Source Code
Overview
S Balance
0 S
More Info
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Basics | 6312388 | 2 days ago | IN | 0 S | 0.00014854 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
PeerToPlayFactory
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title PeerToPlayFactory * @dev Main Contract For PeerToPlay Smart Accounts. This is also a factory contract, which deploys new PeerToPlay Smart Accounts * and serves as a registry for PeerToPlay Smart Accounts. */ /** * @dev Interface for account functionality in PeerToPlay. */ interface AccountInterface { /** * @dev Returns the version of the account. */ function version() external view returns (uint); /** * @dev Enables an authority for the account. * @param authority The address to be authorized. */ function enable(address authority) external; /** * @dev Executes multiple function calls within the account. * @param _targets The target addresses to call. * @param _datas The data (call data) for each target. * @param _origin The origin address of the call. * @return responses The responses from each call. */ function cast( address[] calldata _targets, bytes[] calldata _datas, address _origin ) external payable returns (bytes32[] memory responses); } /** * @dev Interface for list registry. */ interface ListInterface { /** * @dev Initializes the account in the list. * @param _account The account address to initialize. */ function init(address _account) external; } /** * @title AddressIndex * @dev Contract to manage the master address, connectors, and account versions. */ contract AddressIndex { event LogNewMaster(address indexed master); event LogUpdateMaster(address indexed master); event LogNewAccount( address indexed _newAccount, address indexed _connectors ); // New master address. address private newMaster; // Current master address. address public master; // List registry address. address public list; // Connectors mapping for account versions. mapping(uint => address) public connectors; // Account modules mapping for versions. mapping(uint => address) public account; // Total version count of account modules. uint public versionCount; /** * @dev Modifier to restrict function access to the master address. */ modifier isMaster() { require(msg.sender == master, "not-master"); _; } /** * @dev Initiates the master address change. * @param _newMaster The new master address. */ function changeMaster(address _newMaster) external isMaster { require(_newMaster != master, "already-a-master"); require(_newMaster != address(0), "not-valid-address"); require(newMaster != _newMaster, "already-a-new-master"); newMaster = _newMaster; emit LogNewMaster(_newMaster); } /** * @dev Finalizes the master address update. */ function updateMaster() external { require(newMaster != address(0), "not-valid-address"); require(msg.sender == newMaster, "not-master"); master = newMaster; newMaster = address(0); emit LogUpdateMaster(master); } /** * @dev Adds a new account module. * @param _newAccount The new account module address. * @param _connectors The connectors registry module address. */ function addNewAccount( address _newAccount, address _connectors ) external isMaster { require(_newAccount != address(0), "not-valid-address"); versionCount++; require( AccountInterface(_newAccount).version() == versionCount, "not-valid-version" ); account[versionCount] = _newAccount; if (_connectors != address(0)) connectors[versionCount] = _connectors; emit LogNewAccount(_newAccount, _connectors); } } /** * @title CloneFactory * @dev Contract to clone other contracts. */ contract CloneFactory is AddressIndex { /** * @dev Creates a new clone of the specified account version. * @param version The account module version to clone. * @return result The address of the created clone. */ function createClone(uint version) internal returns (address result) { bytes20 targetBytes = bytes20(account[version]); // solium-disable-next-line security/no-inline-assembly assembly { let clone := mload(0x40) mstore( clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000 ) mstore(add(clone, 0x14), targetBytes) mstore( add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000 ) result := create(0, clone, 0x37) } } /** * @dev Checks if a specified address is a clone of a given account version. * @param version The account module version. * @param query The address to check. * @return result Boolean indicating if the address is a clone. */ function isClone( uint version, address query ) external view returns (bool result) { bytes20 targetBytes = bytes20(account[version]); // solium-disable-next-line security/no-inline-assembly assembly { let clone := mload(0x40) mstore( clone, 0x363d3d373d3d3d363d7300000000000000000000000000000000000000000000 ) mstore(add(clone, 0xa), targetBytes) mstore( add(clone, 0x1e), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000 ) let other := add(clone, 0x40) extcodecopy(query, other, 0, 0x2d) result := and( eq(mload(clone), mload(other)), eq(mload(add(clone, 0xd)), mload(add(other, 0xd))) ) } } } /** * @title PeerToPlayFactory * @dev Main contract for creating and managing PeerToPlay Smart Accounts. */ contract PeerToPlayFactory is CloneFactory { event LogAccountCreated( address sender, address indexed owner, address indexed account, address indexed origin ); /** * @dev Creates a PeerToPlay Smart Account and performs a cast operation. * @param _owner The owner of the PeerToPlay Smart Account. * @param accountVersion The account module version. * @param _targets Target addresses for the cast function. * @param _datas Data (call data) for each target. * @param _origin The origin of the account creation. * @return _account The address of the created account. */ function buildWithCast( address _owner, uint accountVersion, address[] calldata _targets, bytes[] calldata _datas, address _origin ) external payable returns (address _account) { _account = build(_owner, accountVersion, _origin); if (_targets.length > 0) AccountInterface(_account).cast{value: msg.value}( _targets, _datas, _origin ); } /** * @dev Creates a PeerToPlay Smart Account. * @param _owner The owner of the PeerToPlay Smart Account. * @param accountVersion The account module version. * @param _origin The origin of the account creation. * @return _account The address of the created account. */ function build( address _owner, uint accountVersion, address _origin ) public returns (address _account) { require( accountVersion != 0 && accountVersion <= versionCount, "not-valid-account" ); _account = createClone(accountVersion); ListInterface(list).init(_account); AccountInterface(_account).enable(_owner); emit LogAccountCreated(msg.sender, _owner, _account, _origin); } /** * @dev Sets up initial configuration for the PeerToPlayFactory contract. * This function can only be called once. * @param _master The master address. * @param _list The list registry address. * @param _account The initial account module address. * @param _connectors The connectors registry module address. */ function setBasics( address _master, address _list, address _account, address _connectors ) external { require( master == address(0) && list == address(0) && account[1] == address(0) && connectors[1] == address(0) && versionCount == 0, "already-defined" ); master = _master; list = _list; versionCount++; account[versionCount] = _account; connectors[versionCount] = _connectors; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"origin","type":"address"}],"name":"LogAccountCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newAccount","type":"address"},{"indexed":true,"internalType":"address","name":"_connectors","type":"address"}],"name":"LogNewAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"master","type":"address"}],"name":"LogNewMaster","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"master","type":"address"}],"name":"LogUpdateMaster","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"account","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAccount","type":"address"},{"internalType":"address","name":"_connectors","type":"address"}],"name":"addNewAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"accountVersion","type":"uint256"},{"internalType":"address","name":"_origin","type":"address"}],"name":"build","outputs":[{"internalType":"address","name":"_account","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"accountVersion","type":"uint256"},{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"bytes[]","name":"_datas","type":"bytes[]"},{"internalType":"address","name":"_origin","type":"address"}],"name":"buildWithCast","outputs":[{"internalType":"address","name":"_account","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMaster","type":"address"}],"name":"changeMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"connectors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"version","type":"uint256"},{"internalType":"address","name":"query","type":"address"}],"name":"isClone","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"list","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"master","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_master","type":"address"},{"internalType":"address","name":"_list","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_connectors","type":"address"}],"name":"setBasics","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"versionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610f51806100206000396000f3fe6080604052600436106100a75760003560e01c80638aad29e1116100645780638aad29e1146101ba578063a4bb8e7d146101de578063bb7e70ef146101fe578063cf1a0ddc1461021e578063ee97f7f314610233578063f4ff78bf1461025357600080fd5b80630f560cd7146100ac57806313ede1a1146100e95780632dd7c6581461011f5780634e9c4ddc146101555780634f5b256114610177578063743681891461018a575b600080fd5b3480156100b857600080fd5b506002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506100cc610104366004610a73565b6003602052600090815260409020546001600160a01b031681565b34801561012b57600080fd5b506100cc61013a366004610a73565b6004602052600090815260409020546001600160a01b031681565b34801561016157600080fd5b50610175610170366004610aa8565b610273565b005b6100cc610185366004610b27565b61042c565b34801561019657600080fd5b506101aa6101a5366004610bc2565b6104cb565b60405190151581526020016100e0565b3480156101c657600080fd5b506101d060055481565b6040519081526020016100e0565b3480156101ea57600080fd5b506101756101f9366004610be5565b610546565b34801561020a57600080fd5b506100cc610219366004610c39565b6106bf565b34801561022a57600080fd5b50610175610824565b34801561023f57600080fd5b506001546100cc906001600160a01b031681565b34801561025f57600080fd5b5061017561026e366004610c75565b6108c8565b6001546001600160a01b031633146102a65760405162461bcd60e51b815260040161029d90610c97565b60405180910390fd5b6001600160a01b0382166102cc5760405162461bcd60e51b815260040161029d90610cbb565b600580549060006102dc83610ce6565b9190505550600554826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103469190610d0d565b146103875760405162461bcd60e51b81526020600482015260116024820152703737ba16bb30b634b216bb32b939b4b7b760791b604482015260640161029d565b600554600090815260046020526040902080546001600160a01b0319166001600160a01b03848116919091179091558116156103e857600554600090815260036020526040902080546001600160a01b0319166001600160a01b0383161790555b806001600160a01b0316826001600160a01b03167f4b477433704e6bdb6bac955ead37fc90c6c7d9bea88b826f03b22d6ca886d4fd60405160405180910390a35050565b60006104398888846106bf565b905084156104c05760405163e0e90acf60e01b81526001600160a01b0382169063e0e90acf903490610477908a908a908a908a908a90600401610d4f565b60006040518083038185885af1158015610495573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526104be9190810190610e5d565b505b979650505050505050565b60008281526004602052604080822054815169363d3d373d3d3d363d7360b01b815260609190911b6bffffffffffffffffffffffff1916600a82018190526e5af43d82803e903d91602b57fd5bf360881b601e830152918101602d8482873c600d810151600d83015114815183511416935050505092915050565b6001546001600160a01b031615801561056857506002546001600160a01b0316155b80156105a65750600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546001600160a01b0316155b80156105e45750600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c546001600160a01b0316155b80156105f05750600554155b61062e5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4b5919599a5b9959608a1b604482015260640161029d565b600180546001600160a01b038087166001600160a01b03199283161790925560028054928616929091169190911790556005805490600061066e83610ce6565b909155505060058054600090815260046020908152604080832080546001600160a01b039788166001600160a01b031991821617909155935483526003909152902080549290931691161790555050565b600082158015906106d257506005548311155b6107125760405162461bcd60e51b81526020600482015260116024820152701b9bdd0b5d985b1a590b5858d8dbdd5b9d607a1b604482015260640161029d565b61071b83610a05565b60025460405163066ad14f60e21b81526001600160a01b0380841660048301529293509116906319ab453c90602401600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b5050604051630b7f436d60e31b81526001600160a01b03878116600483015284169250635bfa1b689150602401600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50506040513381526001600160a01b03808616935084811692508716907f83435eca805f6256e4aa778ee8b2e8aec7485fa4b643a0fff05b7df6bf6883899060200160405180910390a49392505050565b6000546001600160a01b031661084c5760405162461bcd60e51b815260040161029d90610cbb565b6000546001600160a01b031633146108765760405162461bcd60e51b815260040161029d90610c97565b60008054600180546001600160a01b0383166001600160a01b03199182168117909255909116825560405190917f9ac7c65ebc1e9c5f94a0f9daaed02afefea79ae48162d49f30ab33b6e1637a1d91a2565b6001546001600160a01b031633146108f25760405162461bcd60e51b815260040161029d90610c97565b6001546001600160a01b03908116908216036109435760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c96b096b6b0b9ba32b960811b604482015260640161029d565b6001600160a01b0381166109695760405162461bcd60e51b815260040161029d90610cbb565b6000546001600160a01b038083169116036109bd5760405162461bcd60e51b815260206004820152601460248201527330b63932b0b23c96b096b732bb96b6b0b9ba32b960611b604482015260640161029d565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff2a8c544d5befa20af407e43fa5a05305e50163fb8d06fda74206f0dc08b680f91a250565b600081815260046020526040808220549051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815260609190911b6bffffffffffffffffffffffff1916601482018190526e5af43d82803e903d91602b57fd5bf360881b60288301529060378184f0949350505050565b600060208284031215610a8557600080fd5b5035919050565b80356001600160a01b0381168114610aa357600080fd5b919050565b60008060408385031215610abb57600080fd5b610ac483610a8c565b9150610ad260208401610a8c565b90509250929050565b60008083601f840112610aed57600080fd5b50813567ffffffffffffffff811115610b0557600080fd5b6020830191508360208260051b8501011115610b2057600080fd5b9250929050565b600080600080600080600060a0888a031215610b4257600080fd5b610b4b88610a8c565b965060208801359550604088013567ffffffffffffffff80821115610b6f57600080fd5b610b7b8b838c01610adb565b909750955060608a0135915080821115610b9457600080fd5b50610ba18a828b01610adb565b9094509250610bb4905060808901610a8c565b905092959891949750929550565b60008060408385031215610bd557600080fd5b82359150610ad260208401610a8c565b60008060008060808587031215610bfb57600080fd5b610c0485610a8c565b9350610c1260208601610a8c565b9250610c2060408601610a8c565b9150610c2e60608601610a8c565b905092959194509250565b600080600060608486031215610c4e57600080fd5b610c5784610a8c565b925060208401359150610c6c60408501610a8c565b90509250925092565b600060208284031215610c8757600080fd5b610c9082610a8c565b9392505050565b6020808252600a90820152693737ba16b6b0b9ba32b960b11b604082015260600190565b6020808252601190820152706e6f742d76616c69642d6164647265737360781b604082015260600190565b600060018201610d0657634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610d1f57600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252810185905260008660808301825b88811015610d90576001600160a01b03610d7b84610a8c565b16825260209283019290910190600101610d62565b506020915083810382850152808682528282019050828760051b8301018860005b89811015610e2157848303601f190184528135368c9003601e19018112610dd757600080fd5b8b01868101903567ffffffffffffffff811115610df357600080fd5b803603821315610e0257600080fd5b610e0d858284610d26565b958801959450505090850190600101610db1565b50506001600160a01b03871660408701529350610e3d92505050565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610e7057600080fd5b825167ffffffffffffffff80821115610e8857600080fd5b818501915085601f830112610e9c57600080fd5b815181811115610eae57610eae610e47565b8060051b604051601f19603f83011681018181108582111715610ed357610ed3610e47565b604052918252848201925083810185019188831115610ef157600080fd5b938501935b82851015610f0f57845184529385019392850192610ef6565b9897505050505050505056fea2646970667358221220dea074d1a1087f9107d74d30e26b1d2218715d70217d254d1310d06da4d3bd4364736f6c63430008140033
Deployed Bytecode
0x6080604052600436106100a75760003560e01c80638aad29e1116100645780638aad29e1146101ba578063a4bb8e7d146101de578063bb7e70ef146101fe578063cf1a0ddc1461021e578063ee97f7f314610233578063f4ff78bf1461025357600080fd5b80630f560cd7146100ac57806313ede1a1146100e95780632dd7c6581461011f5780634e9c4ddc146101555780634f5b256114610177578063743681891461018a575b600080fd5b3480156100b857600080fd5b506002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506100cc610104366004610a73565b6003602052600090815260409020546001600160a01b031681565b34801561012b57600080fd5b506100cc61013a366004610a73565b6004602052600090815260409020546001600160a01b031681565b34801561016157600080fd5b50610175610170366004610aa8565b610273565b005b6100cc610185366004610b27565b61042c565b34801561019657600080fd5b506101aa6101a5366004610bc2565b6104cb565b60405190151581526020016100e0565b3480156101c657600080fd5b506101d060055481565b6040519081526020016100e0565b3480156101ea57600080fd5b506101756101f9366004610be5565b610546565b34801561020a57600080fd5b506100cc610219366004610c39565b6106bf565b34801561022a57600080fd5b50610175610824565b34801561023f57600080fd5b506001546100cc906001600160a01b031681565b34801561025f57600080fd5b5061017561026e366004610c75565b6108c8565b6001546001600160a01b031633146102a65760405162461bcd60e51b815260040161029d90610c97565b60405180910390fd5b6001600160a01b0382166102cc5760405162461bcd60e51b815260040161029d90610cbb565b600580549060006102dc83610ce6565b9190505550600554826001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610322573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103469190610d0d565b146103875760405162461bcd60e51b81526020600482015260116024820152703737ba16bb30b634b216bb32b939b4b7b760791b604482015260640161029d565b600554600090815260046020526040902080546001600160a01b0319166001600160a01b03848116919091179091558116156103e857600554600090815260036020526040902080546001600160a01b0319166001600160a01b0383161790555b806001600160a01b0316826001600160a01b03167f4b477433704e6bdb6bac955ead37fc90c6c7d9bea88b826f03b22d6ca886d4fd60405160405180910390a35050565b60006104398888846106bf565b905084156104c05760405163e0e90acf60e01b81526001600160a01b0382169063e0e90acf903490610477908a908a908a908a908a90600401610d4f565b60006040518083038185885af1158015610495573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526104be9190810190610e5d565b505b979650505050505050565b60008281526004602052604080822054815169363d3d373d3d3d363d7360b01b815260609190911b6bffffffffffffffffffffffff1916600a82018190526e5af43d82803e903d91602b57fd5bf360881b601e830152918101602d8482873c600d810151600d83015114815183511416935050505092915050565b6001546001600160a01b031615801561056857506002546001600160a01b0316155b80156105a65750600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05546001600160a01b0316155b80156105e45750600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c546001600160a01b0316155b80156105f05750600554155b61062e5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4b5919599a5b9959608a1b604482015260640161029d565b600180546001600160a01b038087166001600160a01b03199283161790925560028054928616929091169190911790556005805490600061066e83610ce6565b909155505060058054600090815260046020908152604080832080546001600160a01b039788166001600160a01b031991821617909155935483526003909152902080549290931691161790555050565b600082158015906106d257506005548311155b6107125760405162461bcd60e51b81526020600482015260116024820152701b9bdd0b5d985b1a590b5858d8dbdd5b9d607a1b604482015260640161029d565b61071b83610a05565b60025460405163066ad14f60e21b81526001600160a01b0380841660048301529293509116906319ab453c90602401600060405180830381600087803b15801561076457600080fd5b505af1158015610778573d6000803e3d6000fd5b5050604051630b7f436d60e31b81526001600160a01b03878116600483015284169250635bfa1b689150602401600060405180830381600087803b1580156107bf57600080fd5b505af11580156107d3573d6000803e3d6000fd5b50506040513381526001600160a01b03808616935084811692508716907f83435eca805f6256e4aa778ee8b2e8aec7485fa4b643a0fff05b7df6bf6883899060200160405180910390a49392505050565b6000546001600160a01b031661084c5760405162461bcd60e51b815260040161029d90610cbb565b6000546001600160a01b031633146108765760405162461bcd60e51b815260040161029d90610c97565b60008054600180546001600160a01b0383166001600160a01b03199182168117909255909116825560405190917f9ac7c65ebc1e9c5f94a0f9daaed02afefea79ae48162d49f30ab33b6e1637a1d91a2565b6001546001600160a01b031633146108f25760405162461bcd60e51b815260040161029d90610c97565b6001546001600160a01b03908116908216036109435760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c96b096b6b0b9ba32b960811b604482015260640161029d565b6001600160a01b0381166109695760405162461bcd60e51b815260040161029d90610cbb565b6000546001600160a01b038083169116036109bd5760405162461bcd60e51b815260206004820152601460248201527330b63932b0b23c96b096b732bb96b6b0b9ba32b960611b604482015260640161029d565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff2a8c544d5befa20af407e43fa5a05305e50163fb8d06fda74206f0dc08b680f91a250565b600081815260046020526040808220549051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b815260609190911b6bffffffffffffffffffffffff1916601482018190526e5af43d82803e903d91602b57fd5bf360881b60288301529060378184f0949350505050565b600060208284031215610a8557600080fd5b5035919050565b80356001600160a01b0381168114610aa357600080fd5b919050565b60008060408385031215610abb57600080fd5b610ac483610a8c565b9150610ad260208401610a8c565b90509250929050565b60008083601f840112610aed57600080fd5b50813567ffffffffffffffff811115610b0557600080fd5b6020830191508360208260051b8501011115610b2057600080fd5b9250929050565b600080600080600080600060a0888a031215610b4257600080fd5b610b4b88610a8c565b965060208801359550604088013567ffffffffffffffff80821115610b6f57600080fd5b610b7b8b838c01610adb565b909750955060608a0135915080821115610b9457600080fd5b50610ba18a828b01610adb565b9094509250610bb4905060808901610a8c565b905092959891949750929550565b60008060408385031215610bd557600080fd5b82359150610ad260208401610a8c565b60008060008060808587031215610bfb57600080fd5b610c0485610a8c565b9350610c1260208601610a8c565b9250610c2060408601610a8c565b9150610c2e60608601610a8c565b905092959194509250565b600080600060608486031215610c4e57600080fd5b610c5784610a8c565b925060208401359150610c6c60408501610a8c565b90509250925092565b600060208284031215610c8757600080fd5b610c9082610a8c565b9392505050565b6020808252600a90820152693737ba16b6b0b9ba32b960b11b604082015260600190565b6020808252601190820152706e6f742d76616c69642d6164647265737360781b604082015260600190565b600060018201610d0657634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610d1f57600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252810185905260008660808301825b88811015610d90576001600160a01b03610d7b84610a8c565b16825260209283019290910190600101610d62565b506020915083810382850152808682528282019050828760051b8301018860005b89811015610e2157848303601f190184528135368c9003601e19018112610dd757600080fd5b8b01868101903567ffffffffffffffff811115610df357600080fd5b803603821315610e0257600080fd5b610e0d858284610d26565b958801959450505090850190600101610db1565b50506001600160a01b03871660408701529350610e3d92505050565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610e7057600080fd5b825167ffffffffffffffff80821115610e8857600080fd5b818501915085601f830112610e9c57600080fd5b815181811115610eae57610eae610e47565b8060051b604051601f19603f83011681018181108582111715610ed357610ed3610e47565b604052918252848201925083810185019188831115610ef157600080fd5b938501935b82851015610f0f57845184529385019392850192610ef6565b9897505050505050505056fea2646970667358221220dea074d1a1087f9107d74d30e26b1d2218715d70217d254d1310d06da4d3bd4364736f6c63430008140033
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.