Source Code
Overview
APE Balance
More Info
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deploy And Confi... | 15090614 | 12 days ago | IN | 0 APE | 0.00004599 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AuthorizedTransferSecurityRegistryCreator
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import { ImmutableCreate2FactoryInterface } from "seaport-types/src/interfaces/ImmutableCreate2FactoryInterface.sol"; import { IAuthorizedTransferSecurityRegistry } from "./interfaces/IAuthorizedTransferSecurityRegistry.sol"; /// @title AuthorizedTransferSecurityRegistryCreator /// @dev Deploys and configures AuthorizedTransferSecurityRegistry contracts. contract AuthorizedTransferSecurityRegistryCreator { ImmutableCreate2FactoryInterface private constant factory = ( ImmutableCreate2FactoryInterface( 0x0000000000FFe8B47B3e2130213B802212439497 ) ); error UNAUTHORIZED(); function _canDeploy() internal view returns (bool) { return tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) || tx.origin == address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) || tx.origin == address(0x86D26897267711ea4b173C8C124a0A73612001da) || tx.origin == address(0xbF81D02F3Ee59E79af3D9337a186F65c9faE39F3); } function deployAndConfigure( address initialOwner, bytes32 salt, bytes memory initializationCode, address[] memory authorizers, address[] memory operators ) external returns (address registry) { if (!_canDeploy()) { revert UNAUTHORIZED(); } IAuthorizedTransferSecurityRegistry registryContract = ( IAuthorizedTransferSecurityRegistry( factory.safeCreate2(salt, initializationCode) ) ); // Note: in provided init code, this contract must be supplied // as the default owner so that it can perform configuration and // reassign ownership of the default list to the supplied owner. if (authorizers.length > 0) { registryContract.addAuthorizers(0, authorizers); } if (operators.length > 0) { registryContract.addOperators(0, operators); } registryContract.reassignOwnershipOfList(0, initialOwner); return address(registryContract); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @title ImmutableCreate2FactoryInterface * @author 0age * @notice This contract provides a safeCreate2 function that takes a salt value * and a block of initialization code as arguments and passes them into * inline assembly. The contract prevents redeploys by maintaining a * mapping of all contracts that have already been deployed, and * prevents frontrunning or other collisions by requiring that the first * 20 bytes of the salt are equal to the address of the caller (this can * be bypassed by setting the first 20 bytes to the null address). There * is also a view function that computes the address of the contract * that will be created when submitting a given salt or nonce along with * a given block of initialization code. */ interface ImmutableCreate2FactoryInterface { /** * @dev Create a contract using CREATE2 by submitting a given salt or nonce * along with the initialization code for the contract. Note that the * first 20 bytes of the salt must match those of the calling address, * which prevents contract creation events from being submitted by * unintended parties. * * @param salt The nonce that will be passed into the CREATE2 * call. * @param initializationCode The initialization code that will be passed * into the CREATE2 call. * * @return deploymentAddress Address of the contract that will be created. */ function safeCreate2( bytes32 salt, bytes calldata initializationCode ) external payable returns (address deploymentAddress); /** * @dev Compute the address of the contract that will be created when * submitting a given salt or nonce to the contract along with the * contract's initialization code. The CREATE2 address is computed in * accordance with EIP-1014, and adheres to the formula therein of * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` * when performing the computation. The computed address is then * checked for any existing contract code - if so, the null address * will be returned instead. * * @param salt The nonce passed into the CREATE2 address calculation. * @param initCode The contract initialization code to be used that will be * passed into the CREATE2 address calculation. * * @return deploymentAddress Address of the contract that will be created, * or the null address if a contract already * exists at that address. */ function findCreate2Address( bytes32 salt, bytes calldata initCode ) external view returns (address deploymentAddress); /** * @dev Compute the address of the contract that will be created when * submitting a given salt or nonce to the contract along with the * keccak256 hash of the contract's initialization code. The CREATE2 * address is computed in accordance with EIP-1014, and adheres to the * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` * formula when performing the computation. The computed address is * then checked for any existing contract code - if so, the null * address will be returned instead. * * @param salt The nonce passed into the CREATE2 address * calculation. * @param initCodeHash The keccak256 hash of the initialization code that * will be passed into the CREATE2 address calculation. * * @return deploymentAddress Address of the contract that will be created, * or the null address if a contract already * exists at that address. */ function findCreate2AddressViaHash( bytes32 salt, bytes32 initCodeHash ) external view returns (address deploymentAddress); /** * @dev Determine if a contract has already been deployed by the factory to * a given address. * * @param deploymentAddress The contract address to check. * * @return True if the contract has been deployed, false otherwise. */ function hasBeenDeployed( address deploymentAddress ) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; enum ListTypes { AuthorizerList, OperatorList } /// @title IAuthorizedTransferSecurityRegistry /// @dev Interface for the Authorized Transfer Security Registry, a simplified version of the Transfer /// Security Registry that only supports authorizers and whitelisted operators, and assumes a /// security level of OperatorWhitelistEnableOTC + authorizers for all collections that use it. /// Note that a number of view functions on collections that add this validator will not work. interface IAuthorizedTransferSecurityRegistry { event CreatedList(uint256 indexed id, string name); event AppliedListToCollection(address indexed collection, uint120 indexed id); event ReassignedListOwnership(uint256 indexed id, address indexed newOwner); event AddedAccountToList(ListTypes indexed kind, uint256 indexed id, address indexed account); event RemovedAccountFromList(ListTypes indexed kind, uint256 indexed id, address indexed account); error AuthorizedTransferSecurityRegistry__ListDoesNotExist(); error AuthorizedTransferSecurityRegistry__CallerDoesNotOwnList(); error AuthorizedTransferSecurityRegistry__ArrayLengthCannotBeZero(); error AuthorizedTransferSecurityRegistry__CallerMustHaveElevatedPermissionsForSpecifiedNFT(); error AuthorizedTransferSecurityRegistry__ListOwnershipCannotBeTransferredToZeroAddress(); error AuthorizedTransferSecurityRegistry__ZeroAddressNotAllowed(); error AuthorizedTransferSecurityRegistry__UnauthorizedTransfer(); error AuthorizedTransferSecurityRegistry__CallerIsNotValidAuthorizer(); /// Manage lists of authorizers & operators that can be applied to collections function createList(string calldata name) external returns (uint120); function createListCopy(string calldata name, uint120 sourceListId) external returns (uint120); function reassignOwnershipOfList(uint120 id, address newOwner) external; function renounceOwnershipOfList(uint120 id) external; function applyListToCollection(address collection, uint120 id) external; function listOwners(uint120 id) external view returns (address); /// Manage and query for authorizers on lists function addAuthorizers(uint120 id, address[] calldata accounts) external; function removeAuthorizers(uint120 id, address[] calldata accounts) external; function getAuthorizers(uint120 id) external view returns (address[] memory); function isAuthorizer(uint120 id, address account) external view returns (bool); function getAuthorizersByCollection(address collection) external view returns (address[] memory); function isAuthorizerByCollection(address collection, address account) external view returns (bool); /// Manage and query for operators on lists function addOperators(uint120 id, address[] calldata accounts) external; function removeOperators(uint120 id, address[] calldata accounts) external; function getOperators(uint120 id) external view returns (address[] memory); function isOperator(uint120 id, address account) external view returns (bool); function getOperatorsByCollection(address collection) external view returns (address[] memory); function isOperatorByCollection(address collection, address account) external view returns (bool); /// Ensure that a specific operator has been authorized to transfer tokens function validateTransfer(address caller, address from, address to) external view; /// Ensure that a transfer has been authorized for a specific tokenId function validateTransfer(address caller, address from, address to, uint256 tokenId) external view; /// Ensure that a transfer has been authorized for a specific amount of a specific tokenId, and /// reduce the transferable amount remaining function validateTransfer(address caller, address from, address to, uint256 tokenId, uint256 amount) external; /// Legacy alias for validateTransfer (address caller, address from, address to) function applyCollectionTransferPolicy(address caller, address from, address to) external view; /// Temporarily assign a specific allowed operator for a given collection function beforeAuthorizedTransfer(address operator, address token) external; /// Clear assignment of a specific allowed operator for a given collection function afterAuthorizedTransfer(address token) external; /// Temporarily allow a specific tokenId from a given collection to be transferred function beforeAuthorizedTransfer(address token, uint256 tokenId) external; /// Clear assignment of an specific tokenId's transfer allowance function afterAuthorizedTransfer(address token, uint256 tokenId) external; /// Temporarily allow a specific amount of a specific tokenId from a given collection to be transferred function beforeAuthorizedTransferWithAmount(address token, uint256 tokenId, uint256 amount) external; /// Clear assignment of a tokenId's transfer allowance for a specific amount function afterAuthorizedTransferWithAmount(address token, uint256 tokenId) external; }
{ "remappings": [ "seaport-core/=lib/seaport-core/", "seaport-types/=lib/seaport-types/", "seaport-sol/=lib/seaport-sol/src/", "seaport-deploy/=lib/seaport-deploy/src/", "solady/=lib/solady/", "@openzeppelin/=lib/openzeppelin-contracts/", "@limitbreak/creator-token-standards/=lib/creator-token-standards/src/", "@rari-capital/solmate/=lib/seaport-sol/lib/seaport/lib/solmate/", "ERC721A/=lib/creator-token-standards/lib/ERC721A/contracts/", "creator-token-standards/=lib/creator-token-standards/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/seaport-sol/lib/seaport/lib/openzeppelin-contracts/lib/erc4626-tests/", "erc721a/=lib/creator-token-standards/lib/ERC721A/", "forge-std/=lib/forge-std/src/", "murky/=lib/creator-token-standards/lib/murky/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "seaport/=lib/seaport-sol/lib/seaport/contracts/", "solarray/=lib/seaport-sol/lib/solarray/src/", "solmate/=lib/seaport-sol/lib/seaport/lib/solmate/src/", "tstorish/=lib/tstorish/src/" ], "optimizer": { "enabled": true, "runs": 9999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
[{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"initializationCode","type":"bytes"},{"internalType":"address[]","name":"authorizers","type":"address[]"},{"internalType":"address[]","name":"operators","type":"address[]"}],"name":"deployAndConfigure","outputs":[{"internalType":"address","name":"registry","type":"address"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b506106c18061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e8a2ee9d1461002d575b5f80fd5b61004061003b366004610476565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f6100726102d9565b6100a8576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f64e030870000000000000000000000000000000000000000000000000000000081525f906effe8b47b3e2130213b802212439497906364e03087906100f79089908990600401610582565b6020604051808303815f875af1158015610113573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013791906105f4565b8451909150156101c3576040517f755b6fd700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063755b6fd790610195905f908890600401610616565b5f604051808303815f87803b1580156101ac575f80fd5b505af11580156101be573d5f803e3d5ffd5b505050505b82511561024c576040517fa5ce71f500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a5ce71f59061021e905f908790600401610616565b5f604051808303815f87803b158015610235575f80fd5b505af1158015610247573d5f803e3d5ffd5b505050505b6040517f6bfab91d0000000000000000000000000000000000000000000000000000000081525f600482015273ffffffffffffffffffffffffffffffffffffffff8881166024830152821690636bfab91d906044015f604051808303815f87803b1580156102b8575f80fd5b505af11580156102ca573d5f803e3d5ffd5b50929998505050505050505050565b5f3273939c8d89ebc11fa45e576215e2353673ad0ba18a148061030f57503273e80a65eb7a3018deda407e621ef5fb5b416678ca145b8061032d5750327386d26897267711ea4b173c8c124a0a73612001da145b8061034b57503273bf81d02f3ee59e79af3d9337a186f65c9fae39f3145b905090565b73ffffffffffffffffffffffffffffffffffffffff81168114610371575f80fd5b50565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103e8576103e8610374565b604052919050565b5f82601f8301126103ff575f80fd5b8135602067ffffffffffffffff82111561041b5761041b610374565b8160051b61042a8282016103a1565b9283528481018201928281019087851115610443575f80fd5b83870192505b8483101561046b57823561045c81610350565b82529183019190830190610449565b979650505050505050565b5f805f805f60a0868803121561048a575f80fd5b853561049581610350565b94506020868101359450604087013567ffffffffffffffff808211156104b9575f80fd5b818901915089601f8301126104cc575f80fd5b8135818111156104de576104de610374565b61050e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016103a1565b8181528b85838601011115610521575f80fd5b81858501868301375f9181019094015291945060608801359180831115610546575f80fd5b6105528a848b016103f0565b94506080890135925080831115610567575f80fd5b5050610575888289016103f0565b9150509295509295909350565b8281525f60206040602084015283518060408501525f5b818110156105b557858101830151858201606001528201610599565b505f6060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b5f60208284031215610604575f80fd5b815161060f81610350565b9392505050565b5f604082016effffffffffffffffffffffffffffff851683526020604060208501528185518084526060860191506020870193505f5b8181101561067e57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161064c565b509097965050505050505056fea26469706673582212202a38376c0d6ab3a62226ed1dc3e1cea45bbe803f813125912b2426d1df57649d64736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e8a2ee9d1461002d575b5f80fd5b61004061003b366004610476565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f6100726102d9565b6100a8576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f64e030870000000000000000000000000000000000000000000000000000000081525f906effe8b47b3e2130213b802212439497906364e03087906100f79089908990600401610582565b6020604051808303815f875af1158015610113573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013791906105f4565b8451909150156101c3576040517f755b6fd700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063755b6fd790610195905f908890600401610616565b5f604051808303815f87803b1580156101ac575f80fd5b505af11580156101be573d5f803e3d5ffd5b505050505b82511561024c576040517fa5ce71f500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a5ce71f59061021e905f908790600401610616565b5f604051808303815f87803b158015610235575f80fd5b505af1158015610247573d5f803e3d5ffd5b505050505b6040517f6bfab91d0000000000000000000000000000000000000000000000000000000081525f600482015273ffffffffffffffffffffffffffffffffffffffff8881166024830152821690636bfab91d906044015f604051808303815f87803b1580156102b8575f80fd5b505af11580156102ca573d5f803e3d5ffd5b50929998505050505050505050565b5f3273939c8d89ebc11fa45e576215e2353673ad0ba18a148061030f57503273e80a65eb7a3018deda407e621ef5fb5b416678ca145b8061032d5750327386d26897267711ea4b173c8c124a0a73612001da145b8061034b57503273bf81d02f3ee59e79af3d9337a186f65c9fae39f3145b905090565b73ffffffffffffffffffffffffffffffffffffffff81168114610371575f80fd5b50565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103e8576103e8610374565b604052919050565b5f82601f8301126103ff575f80fd5b8135602067ffffffffffffffff82111561041b5761041b610374565b8160051b61042a8282016103a1565b9283528481018201928281019087851115610443575f80fd5b83870192505b8483101561046b57823561045c81610350565b82529183019190830190610449565b979650505050505050565b5f805f805f60a0868803121561048a575f80fd5b853561049581610350565b94506020868101359450604087013567ffffffffffffffff808211156104b9575f80fd5b818901915089601f8301126104cc575f80fd5b8135818111156104de576104de610374565b61050e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016103a1565b8181528b85838601011115610521575f80fd5b81858501868301375f9181019094015291945060608801359180831115610546575f80fd5b6105528a848b016103f0565b94506080890135925080831115610567575f80fd5b5050610575888289016103f0565b9150509295509295909350565b8281525f60206040602084015283518060408501525f5b818110156105b557858101830151858201606001528201610599565b505f6060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b5f60208284031215610604575f80fd5b815161060f81610350565b9392505050565b5f604082016effffffffffffffffffffffffffffff851683526020604060208501528185518084526060860191506020870193505f5b8181101561067e57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161064c565b509097965050505050505056fea26469706673582212202a38376c0d6ab3a62226ed1dc3e1cea45bbe803f813125912b2426d1df57649d64736f6c63430008180033
Deployed Bytecode Sourcemap
425:1725:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1088:1060;;;;;;:::i;:::-;;:::i;:::-;;;3153:42:3;3141:55;;;3123:74;;3111:2;3096:18;1088:1060:1;;;;;;;;1307:16;1340:12;:10;:12::i;:::-;1335:65;;1375:14;;;;;;;;;;;;;;1335:65;1532:45;;;;;1410:52;;598:42;;1532:19;;:45;;1552:4;;1558:18;;1532:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1833:18;;1410:191;;-1:-1:-1;1833:22:1;1829:100;;1871:47;;;;;:31;;;;;;:47;;1903:1;;1906:11;;1871:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:100;1942:16;;:20;1938:94;;1978:43;;;;;:29;;;;;;:43;;2008:1;;2011:9;;1978:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1938:94;2041:57;;;;;2082:1;2041:57;;;5131:64:3;2041:40:1;5231:55:3;;;5211:18;;;5204:83;2041:40:1;;;;;5104:18:3;;2041:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2124:16:1;;1088:1060;-1:-1:-1;;;;;;;;;1088:1060:1:o;690:392::-;735:4;771:9;792:42;771:64;;:144;;-1:-1:-1;851:9:1;872:42;851:64;771:144;:224;;;-1:-1:-1;931:9:1;952:42;931:64;771:224;:304;;;-1:-1:-1;1011:9:1;1032:42;1011:64;771:304;751:324;;690:392;:::o;14:154:3:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:184::-;225:77;222:1;215:88;322:4;319:1;312:15;346:4;343:1;336:15;362:334;433:2;427:9;489:2;479:13;;494:66;475:86;463:99;;592:18;577:34;;613:22;;;574:62;571:88;;;639:18;;:::i;:::-;675:2;668:22;362:334;;-1:-1:-1;362:334:3:o;701:787::-;755:5;808:3;801:4;793:6;789:17;785:27;775:55;;826:1;823;816:12;775:55;862:6;849:20;888:4;911:18;907:2;904:26;901:52;;;933:18;;:::i;:::-;979:2;976:1;972:10;1002:28;1026:2;1022;1018:11;1002:28;:::i;:::-;1064:15;;;1134;;;1130:24;;;1095:12;;;;1166:15;;;1163:35;;;1194:1;1191;1184:12;1163:35;1230:2;1222:6;1218:15;1207:26;;1242:217;1258:6;1253:3;1250:15;1242:217;;;1338:3;1325:17;1355:31;1380:5;1355:31;:::i;:::-;1399:18;;1275:12;;;;1437;;;;1242:217;;;1477:5;701:787;-1:-1:-1;;;;;;;701:787:3:o;1493:1479::-;1647:6;1655;1663;1671;1679;1732:3;1720:9;1711:7;1707:23;1703:33;1700:53;;;1749:1;1746;1739:12;1700:53;1788:9;1775:23;1807:31;1832:5;1807:31;:::i;:::-;1857:5;-1:-1:-1;1881:2:3;1915:18;;;1902:32;;-1:-1:-1;1985:2:3;1970:18;;1957:32;2008:18;2038:14;;;2035:34;;;2065:1;2062;2055:12;2035:34;2103:6;2092:9;2088:22;2078:32;;2148:7;2141:4;2137:2;2133:13;2129:27;2119:55;;2170:1;2167;2160:12;2119:55;2206:2;2193:16;2228:2;2224;2221:10;2218:36;;;2234:18;;:::i;:::-;2276:112;2384:2;2315:66;2308:4;2304:2;2300:13;2296:86;2292:95;2276:112;:::i;:::-;2411:2;2404:5;2397:17;2451:7;2446:2;2441;2437;2433:11;2429:20;2426:33;2423:53;;;2472:1;2469;2462:12;2423:53;2527:2;2522;2518;2514:11;2509:2;2502:5;2498:14;2485:45;2571:1;2550:14;;;2546:23;;;2539:34;2554:5;;-1:-1:-1;2650:2:3;2635:18;;2622:32;;2666:16;;;2663:36;;;2695:1;2692;2685:12;2663:36;2718:63;2773:7;2762:8;2751:9;2747:24;2718:63;:::i;:::-;2708:73;;2834:3;2823:9;2819:19;2806:33;2790:49;;2864:2;2854:8;2851:16;2848:36;;;2880:1;2877;2870:12;2848:36;;;2903:63;2958:7;2947:8;2936:9;2932:24;2903:63;:::i;:::-;2893:73;;;1493:1479;;;;;;;;:::o;3208:676::-;3383:6;3372:9;3365:25;3346:4;3409:2;3447;3442;3431:9;3427:18;3420:30;3479:6;3473:13;3522:6;3517:2;3506:9;3502:18;3495:34;3547:1;3557:140;3571:6;3568:1;3565:13;3557:140;;;3666:14;;;3662:23;;3656:30;3632:17;;;3651:2;3628:26;3621:66;3586:10;;3557:140;;;3561:3;3746:1;3741:2;3732:6;3721:9;3717:22;3713:31;3706:42;3875:2;3805:66;3800:2;3792:6;3788:15;3784:88;3773:9;3769:104;3765:113;3757:121;;;;3208:676;;;;;:::o;3889:251::-;3959:6;4012:2;4000:9;3991:7;3987:23;3983:32;3980:52;;;4028:1;4025;4018:12;3980:52;4060:9;4054:16;4079:31;4104:5;4079:31;:::i;:::-;4129:5;3889:251;-1:-1:-1;;;3889:251:3:o;4145:799::-;4323:4;4371:2;4360:9;4356:18;4413:32;4405:6;4401:45;4390:9;4383:64;4466:2;4504;4499;4488:9;4484:18;4477:30;4527:6;4562;4556:13;4593:6;4585;4578:22;4631:2;4620:9;4616:18;4609:25;;4669:2;4661:6;4657:15;4643:29;;4690:1;4700:218;4714:6;4711:1;4708:13;4700:218;;;4779:13;;4794:42;4775:62;4763:75;;4893:15;;;;4858:12;;;;4736:1;4729:9;4700:218;;;-1:-1:-1;4935:3:3;;4145:799;-1:-1:-1;;;;;;;4145:799:3:o
Swarm Source
ipfs://2a38376c0d6ab3a62226ed1dc3e1cea45bbe803f813125912b2426d1df57649d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.