Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
25929995 | 12 hrs ago | 0 S | ||||
25929995 | 12 hrs ago | 0 S | ||||
25929773 | 12 hrs ago | 0 S | ||||
25929773 | 12 hrs ago | 0 S | ||||
25929639 | 12 hrs ago | 0 S | ||||
25929639 | 12 hrs ago | 0 S | ||||
25929533 | 12 hrs ago | 0 S | ||||
25929533 | 12 hrs ago | 0 S | ||||
25929430 | 12 hrs ago | 0 S | ||||
25929430 | 12 hrs ago | 0 S | ||||
25929262 | 12 hrs ago | 0 S | ||||
25929262 | 12 hrs ago | 0 S | ||||
25929160 | 12 hrs ago | 0 S | ||||
25929160 | 12 hrs ago | 0 S | ||||
25888578 | 18 hrs ago | 0 S | ||||
25888578 | 18 hrs ago | 0 S | ||||
25888336 | 18 hrs ago | 0 S | ||||
25888336 | 18 hrs ago | 0 S | ||||
25769192 | 34 hrs ago | 0 S | ||||
25769192 | 34 hrs ago | 0 S | ||||
25767814 | 34 hrs ago | 0 S | ||||
25767814 | 34 hrs ago | 0 S | ||||
25767212 | 34 hrs ago | 0 S | ||||
25767212 | 34 hrs ago | 0 S | ||||
25766337 | 35 hrs ago | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Wallet
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IConnection} from "../connection/IConnection.sol"; import {IWalletFactory} from "./IWalletFactory.sol"; import {IWallet} from "./IWallet.sol"; /// @title Wallet Contract /// @notice A wallet contract that can execute arbitrary contract calls based on verified messages. /// @dev This contract interacts with a factory and connection for verification and address mapping. contract Wallet is IWallet { /// @notice Factory contract for wallet creation and management. IWalletFactory public immutable factory; /// @notice Connection contract for cross-chain message verification. IConnection public immutable connection; /// @notice The address of the Asset Manager allowed to invoke calls on behalf of a user on token transfers. address public immutable assetManager; /// @notice The address of the XToken Manager allowed to invoke calls on behalf of a user on token transfers. address public immutable xTokenManager; event CallStored(bytes32 indexed callHash); mapping(bytes32 => bool) public storedCalls; /// @notice Initializes the wallet contract. /// @param _factory The address of the wallet factory contract. /// @param _connection The address of the connection contract for message verification. /// @param _assetManager The address of the asset manager contract. constructor(IWalletFactory _factory, IConnection _connection, address _assetManager, address _xTokenManager) { require(address(_factory) != address(0), "Invalid factory address"); require(address(_connection) != address(0), "Invalid connection address"); require(_assetManager != address(0), "Invalid asset manager address"); require(_xTokenManager != address(0), "Invalid xToken manager address"); factory = _factory; connection = _connection; assetManager = _assetManager; xTokenManager = _xTokenManager; } /// @notice Receives and processes a verified cross-chain message. /// @param srcChainId The chain ID of the originating chain. /// @param srcAddress The address of the sender on the originating chain. /// @param _connSn The unique identifier for the message. /// @param _payload The encoded payload containing call data. /// @param signatures An array of signatures for verifying the message. function recvMessage( uint256 srcChainId, bytes calldata srcAddress, uint256 _connSn, bytes memory _payload, bytes[] calldata signatures ) external override { // Verify the message using the connection contract connection.verifyMessage(srcChainId, srcAddress, _connSn, _payload, signatures); // Ensure the caller address matches the expected wallet address from the factory require( address(this) == factory.getWallet(srcChainId, srcAddress), "Mismatched address and caller" ); // Execute the calls described in the payload try this.executeCalls(_payload) {} catch (bytes memory) {} } /// @notice Allows the asset manager to execute calls on behalf of the wallet. /// @param data The encoded data containing an array of ContractCall structs. function assetManagerHook(bytes memory data) external override { // Restrict access to the asset manager require(msg.sender == assetManager, "Only AssetManager is allowed"); // Execute the calls described in the data this.executeCalls(data); } /// @notice Allows the xToken manager to execute calls on behalf of the wallet. /// @param data The encoded data containing an array of ContractCall structs. function xTokenManagerHook(bytes memory data) external override { // Restrict access to the asset manager require(msg.sender == xTokenManager, "Only XTokenManager is allowed"); // Execute the calls described in the data this.executeCalls(data); } /// @notice Executes multiple contract calls described in the input data. /// @dev Decodes the input data into an array of ContractCall structs and executes them sequentially. /// @param data The encoded data containing an array of ContractCall structs. function executeCalls(bytes memory data) external { require(msg.sender == address(this), "Only this contract can execute calls"); if (data.length == 32) { bytes32 callHash = bytesToBytes32(data); storedCalls[callHash] = true; emit CallStored(callHash); return; } // Decode the input data into an array of ContractCall structs ContractCall[] memory contractCalls = abi.decode(data, (ContractCall[])); // Iterate over the array and execute each call for (uint256 i = 0; i < contractCalls.length; i++) { executeInner(contractCalls[i].addr, contractCalls[i].value, contractCalls[i].data); } } function executeStored(bytes memory calls) external { require(storedCalls[keccak256(calls)], "Calls do not match stored calls"); try this.executeCalls(calls) {} catch (bytes memory) {} delete storedCalls[keccak256(calls)]; } /// @notice Performs a single arbitrary call to a specified target. /// @param target The address of the contract or account to call. /// @param value The amount of Ether to send with the call. /// @param data The calldata to send with the call. function executeInner(address target, uint256 value, bytes memory data) internal { // Perform the call and check the result (bool success, ) = target.call{value: value}(data); require(success, "External call failed"); } /// @notice Simulates recvMessage without signature verification (view function) /// @dev This function will always revert at the end to prevent actual state changes /// @param srcChainId The chain ID of the originating chain /// @param srcAddress The address of the sender on the originating chain /// @param _payload The encoded payload containing call data function simulateRecvMessage( uint256 srcChainId, bytes calldata srcAddress, bytes memory _payload ) external { // Ensure the caller address matches the expected wallet address from the factory require( address(this) == factory.getWallet(srcChainId, srcAddress), "Mismatched address and caller" ); // Execute the calls described in the payload this.executeCalls(_payload); // Always revert to prevent state changes revert("Simulation completed"); } function bytesToBytes32(bytes memory source) private pure returns (bytes32 result) { if (source.length == 0) { return 0x0; } assembly { result := mload(add(source, 32)) } } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.8.0; interface IConnection { function sendMessage( uint256 dstChainId, bytes memory dstAddress, bytes memory payload ) external payable; function verifyMessage( uint256 srcChainId, bytes calldata srcAddress, uint256 connSn, bytes memory payload, bytes[] calldata signatures ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IWalletFactory { // Public state variables function implementation() external view returns (address); function owner() external view returns (address); // Events event Deployed(address indexed deployedAddress, bytes32 indexed salt); // Function signatures /// @notice Updates the implementation contract address /// @param _newImplementation The address of the new implementation contract function updateImplementation(address _newImplementation) external; /// @notice Transfers ownership to a new address /// @param _newOwner The address of the new owner function transferOwnership(address _newOwner) external; /// @notice Derive the address of a contract deployed with CREATE3 /// @param chainId chainId of address /// @param user User's address on the specified chain /// @return computedAddress The derived contract address function getWallet(uint256 chainId, bytes calldata user) external returns (address computedAddress); /// @notice Deploy a contract deterministically with CREATE3 /// @param salt Unique salt to differentiate deployments /// @return deployedAddress Address of the deployed contract function deploy(bytes32 salt) external returns (address deployedAddress); /// @notice Derive the address of a contract deployed with CREATE3 /// @param chainId chainId of address /// @param user User's address on the specified chain /// @return computedAddress The derived contract address function getDeployedAddress(uint256 chainId, bytes calldata user) external view returns (address computedAddress); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title IWallet Interface /// @notice Interface for the Wallet contract. interface IWallet { /// @notice Represents a contract call to be executed. struct ContractCall { address addr; // Target address of the call uint256 value; // Ether value to send bytes data; // Calldata for the call } /// @notice Receives and processes a verified cross-chain message. /// @param srcChainId The chain ID of the originating chain. /// @param srcAddress The address of the sender on the originating chain. /// @param _connSn The unique identifier for the message. /// @param _payload The encoded payload containing call data. /// @param signatures An array of signatures for verifying the message. function recvMessage( uint256 srcChainId, bytes calldata srcAddress, uint256 _connSn, bytes memory _payload, bytes[] calldata signatures ) external; /// @notice Allows the asset manager to execute calls on behalf of the wallet. /// @param data The encoded data containing an array of ContractCall structs. function assetManagerHook(bytes memory data) external; /// @notice Allows the asset manager to execute calls on behalf of the wallet. /// @param data The encoded data containing an array of ContractCall structs. function xTokenManagerHook(bytes memory data) external; }
{ "remappings": [ "@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", "@money-market/=contracts/moneyMarket/src/", "@money-market-scripts/=contracts/moneyMarket/scripts/", "@money-market-tests/=contracts/moneyMarket/tests/", "@contracts/=contracts/", "solidity-utils/=lib/solidity-utils/src/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", "ds-test/=lib/solmate/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract ABI
API[{"inputs":[{"internalType":"contract IWalletFactory","name":"_factory","type":"address"},{"internalType":"contract IConnection","name":"_connection","type":"address"},{"internalType":"address","name":"_assetManager","type":"address"},{"internalType":"address","name":"_xTokenManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"callHash","type":"bytes32"}],"name":"CallStored","type":"event"},{"inputs":[],"name":"assetManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"assetManagerHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"connection","outputs":[{"internalType":"contract IConnection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeCalls","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"calls","type":"bytes"}],"name":"executeStored","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IWalletFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"bytes","name":"srcAddress","type":"bytes"},{"internalType":"uint256","name":"_connSn","type":"uint256"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"recvMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"bytes","name":"srcAddress","type":"bytes"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"simulateRecvMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"storedCalls","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xTokenManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"xTokenManagerHook","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610100604052348015610010575f5ffd5b5060405161126d38038061126d83398101604081905261002f916101c5565b6001600160a01b03841661008a5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420666163746f7279206164647265737300000000000000000060448201526064015b60405180910390fd5b6001600160a01b0383166100e05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420636f6e6e656374696f6e20616464726573730000000000006044820152606401610081565b6001600160a01b0382166101365760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206173736574206d616e6167657220616464726573730000006044820152606401610081565b6001600160a01b03811661018c5760405162461bcd60e51b815260206004820152601e60248201527f496e76616c69642078546f6b656e206d616e61676572206164647265737300006044820152606401610081565b6001600160a01b0393841660805291831660a052821660c0521660e052610221565b6001600160a01b03811681146101c2575f5ffd5b50565b5f5f5f5f608085870312156101d8575f5ffd5b84516101e3816101ae565b60208601519094506101f4816101ae565b6040860151909350610205816101ae565b6060860151909250610216816101ae565b939692955090935050565b60805160a05160c05160e051610ff66102775f395f818161019a015261051c01525f818161012101526108ad01525f81816101e7015261032a01525f8181610173015281816103ad01526105f30152610ff65ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063b889587e1161006e578063b889587e1461015b578063c45a01551461016e578063d9e119af14610195578063da99e64e146101bc578063dc53c056146101cf578063fd19016c146101e2575f5ffd5b80630bca7dd3146100aa5780634b2b20e7146100bf5780635b01e546146100d2578063938fe7721461010957806394217ad11461011c575b5f5ffd5b6100bd6100b8366004610abd565b610209565b005b6100bd6100cd366004610b3a565b610313565b6100f46100e0366004610c14565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100bd610117366004610abd565b610511565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610100565b6100bd610169366004610c2b565b6105dc565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6100bd6101ca366004610abd565b61075d565b6100bd6101dd366004610abd565b6108a2565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b80516020808301919091205f90815290819052604090205460ff166102755760405162461bcd60e51b815260206004820152601f60248201527f43616c6c7320646f206e6f74206d617463682073746f7265642063616c6c730060448201526064015b60405180910390fd5b604051636d4cf32760e11b8152309063da99e64e90610298908490600401610cca565b5f604051808303815f87803b1580156102af575f5ffd5b505af19250505080156102c0575060015b6102f5573d8080156102ed576040519150601f19603f3d011682016040523d82523d5f602084013e6102f2565b606091505b50505b80516020918201205f9081529081905260409020805460ff19169055565b60405163372ff73f60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dcbfdcfc9061036b908a908a908a908a908a908a908a90600401610d0b565b5f604051808303815f87803b158015610382575f5ffd5b505af1158015610394573d5f5f3e3d5ffd5b50506040516305d5de2b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250632eaef15891506103e8908a908a908a90600401610de2565b6020604051808303815f875af1158015610404573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610e1f565b6001600160a01b0316306001600160a01b0316146104885760405162461bcd60e51b815260206004820152601d60248201527f4d69736d617463686564206164647265737320616e642063616c6c6572000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906104ab908690600401610cca565b5f604051808303815f87803b1580156104c2575f5ffd5b505af19250505080156104d3575060015b610508573d808015610500576040519150601f19603f3d011682016040523d82523d5f602084013e610505565b606091505b50505b50505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105895760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792058546f6b656e4d616e6167657220697320616c6c6f776564000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906105ac908490600401610cca565b5f604051808303815f87803b1580156105c3575f5ffd5b505af11580156105d5573d5f5f3e3d5ffd5b5050505050565b6040516305d5de2b60e31b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632eaef1589061062c90879087908790600401610de2565b6020604051808303815f875af1158015610648573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066c9190610e1f565b6001600160a01b0316306001600160a01b0316146106cc5760405162461bcd60e51b815260206004820152601d60248201527f4d69736d617463686564206164647265737320616e642063616c6c6572000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906106ef908490600401610cca565b5f604051808303815f87803b158015610706575f5ffd5b505af1158015610718573d5f5f3e3d5ffd5b505060405162461bcd60e51b815260206004820152601460248201527314da5b5d5b185d1a5bdb8818dbdb5c1b195d195960621b6044820152606401915061026c9050565b3330146107b85760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79207468697320636f6e74726163742063616e20657865637574652063604482015263616c6c7360e01b606482015260840161026c565b8051602003610812575f6107cb8261091a565b5f81815260208190526040808220805460ff191660011790555191925082917f95c5bdccc9fd3d9223140b7b7313807f52556b5729cf273201d4166dec7b4d2b9190a25050565b5f818060200190518101906108279190610e38565b90505f5b815181101561089d5761089582828151811061084957610849610f96565b60200260200101515f015183838151811061086657610866610f96565b60200260200101516020015184848151811061088457610884610f96565b602002602001015160400151610932565b60010161082b565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105895760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c792041737365744d616e6167657220697320616c6c6f77656400000000604482015260640161026c565b5f81515f0361092a57505f919050565b506020015190565b5f836001600160a01b0316838360405161094c9190610faa565b5f6040518083038185875af1925050503d805f8114610986576040519150601f19603f3d011682016040523d82523d5f602084013e61098b565b606091505b50509050806109d35760405162461bcd60e51b8152602060048201526014602482015273115e1d195c9b985b0818d85b1b0819985a5b195960621b604482015260640161026c565b50505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610a0f57610a0f6109d9565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610a3d57610a3d6109d9565b604052919050565b5f6001600160401b03821115610a5d57610a5d6109d9565b50601f01601f191660200190565b5f82601f830112610a7a575f5ffd5b8135610a8d610a8882610a45565b610a15565b818152846020838601011115610aa1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215610acd575f5ffd5b81356001600160401b03811115610ae2575f5ffd5b610aee84828501610a6b565b949350505050565b5f5f83601f840112610b06575f5ffd5b5081356001600160401b03811115610b1c575f5ffd5b602083019150836020828501011115610b33575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215610b50575f5ffd5b8735965060208801356001600160401b03811115610b6c575f5ffd5b610b788a828b01610af6565b9097509550506040880135935060608801356001600160401b03811115610b9d575f5ffd5b610ba98a828b01610a6b565b93505060808801356001600160401b03811115610bc4575f5ffd5b8801601f81018a13610bd4575f5ffd5b80356001600160401b03811115610be9575f5ffd5b8a60208260051b8401011115610bfd575f5ffd5b602082019350809250505092959891949750929550565b5f60208284031215610c24575f5ffd5b5035919050565b5f5f5f5f60608587031215610c3e575f5ffd5b8435935060208501356001600160401b03811115610c5a575f5ffd5b610c6687828801610af6565b90945092505060408501356001600160401b03811115610c84575f5ffd5b610c9087828801610a6b565b91505092959194509250565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cdc6020830184610c9c565b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b87815260a060208201525f610d2460a08301888a610ce3565b8660408401528281036060840152610d3c8187610c9c565b83810360808501528481529050602080820190600586901b830101865f36829003601e19015b88821015610dcf57858403601f190185528235818112610d80575f5ffd5b8a016020810190356001600160401b03811115610d9b575f5ffd5b803603821315610da9575f5ffd5b610db4868284610ce3565b95505050602083019250602085019450600182019150610d62565b50919d9c50505050505050505050505050565b838152604060208201525f610dfb604083018486610ce3565b95945050505050565b80516001600160a01b0381168114610e1a575f5ffd5b919050565b5f60208284031215610e2f575f5ffd5b610cdc82610e04565b5f60208284031215610e48575f5ffd5b81516001600160401b03811115610e5d575f5ffd5b8201601f81018413610e6d575f5ffd5b80516001600160401b03811115610e8657610e866109d9565b8060051b610e9660208201610a15565b91825260208184018101929081019087841115610eb1575f5ffd5b6020850192505b83831015610f8b5782516001600160401b03811115610ed5575f5ffd5b85016060818a03601f19011215610eea575f5ffd5b610ef26109ed565b610efe60208301610e04565b81526040820151602082015260608201516001600160401b03811115610f22575f5ffd5b60208184010192505089601f830112610f39575f5ffd5b8151610f47610a8882610a45565b8181528b6020838601011115610f5b575f5ffd5b8160208501602083015e5f6020838301015280604084015250508084525050602082019150602083019250610eb8565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f92019182525091905056fea264697066735822122019adb94ef7212dca01bfc3ba5c24c78446373eca47810192e4cc82df8bf7746364736f6c634300081c0033000000000000000000000000d5cece180a52e0353654b3337c985e8d5e0563440000000000000000000000006c9b999d33c612ccd8721b0e349adcae151fcbbf000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063b889587e1161006e578063b889587e1461015b578063c45a01551461016e578063d9e119af14610195578063da99e64e146101bc578063dc53c056146101cf578063fd19016c146101e2575f5ffd5b80630bca7dd3146100aa5780634b2b20e7146100bf5780635b01e546146100d2578063938fe7721461010957806394217ad11461011c575b5f5ffd5b6100bd6100b8366004610abd565b610209565b005b6100bd6100cd366004610b3a565b610313565b6100f46100e0366004610c14565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100bd610117366004610abd565b610511565b6101437f000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa381565b6040516001600160a01b039091168152602001610100565b6100bd610169366004610c2b565b6105dc565b6101437f000000000000000000000000d5cece180a52e0353654b3337c985e8d5e05634481565b6101437f000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa381565b6100bd6101ca366004610abd565b61075d565b6100bd6101dd366004610abd565b6108a2565b6101437f0000000000000000000000006c9b999d33c612ccd8721b0e349adcae151fcbbf81565b80516020808301919091205f90815290819052604090205460ff166102755760405162461bcd60e51b815260206004820152601f60248201527f43616c6c7320646f206e6f74206d617463682073746f7265642063616c6c730060448201526064015b60405180910390fd5b604051636d4cf32760e11b8152309063da99e64e90610298908490600401610cca565b5f604051808303815f87803b1580156102af575f5ffd5b505af19250505080156102c0575060015b6102f5573d8080156102ed576040519150601f19603f3d011682016040523d82523d5f602084013e6102f2565b606091505b50505b80516020918201205f9081529081905260409020805460ff19169055565b60405163372ff73f60e21b81526001600160a01b037f0000000000000000000000006c9b999d33c612ccd8721b0e349adcae151fcbbf169063dcbfdcfc9061036b908a908a908a908a908a908a908a90600401610d0b565b5f604051808303815f87803b158015610382575f5ffd5b505af1158015610394573d5f5f3e3d5ffd5b50506040516305d5de2b60e31b81526001600160a01b037f000000000000000000000000d5cece180a52e0353654b3337c985e8d5e056344169250632eaef15891506103e8908a908a908a90600401610de2565b6020604051808303815f875af1158015610404573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610e1f565b6001600160a01b0316306001600160a01b0316146104885760405162461bcd60e51b815260206004820152601d60248201527f4d69736d617463686564206164647265737320616e642063616c6c6572000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906104ab908690600401610cca565b5f604051808303815f87803b1580156104c2575f5ffd5b505af19250505080156104d3575060015b610508573d808015610500576040519150601f19603f3d011682016040523d82523d5f602084013e610505565b606091505b50505b50505050505050565b336001600160a01b037f000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa316146105895760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792058546f6b656e4d616e6167657220697320616c6c6f776564000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906105ac908490600401610cca565b5f604051808303815f87803b1580156105c3575f5ffd5b505af11580156105d5573d5f5f3e3d5ffd5b5050505050565b6040516305d5de2b60e31b81526001600160a01b037f000000000000000000000000d5cece180a52e0353654b3337c985e8d5e0563441690632eaef1589061062c90879087908790600401610de2565b6020604051808303815f875af1158015610648573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066c9190610e1f565b6001600160a01b0316306001600160a01b0316146106cc5760405162461bcd60e51b815260206004820152601d60248201527f4d69736d617463686564206164647265737320616e642063616c6c6572000000604482015260640161026c565b604051636d4cf32760e11b8152309063da99e64e906106ef908490600401610cca565b5f604051808303815f87803b158015610706575f5ffd5b505af1158015610718573d5f5f3e3d5ffd5b505060405162461bcd60e51b815260206004820152601460248201527314da5b5d5b185d1a5bdb8818dbdb5c1b195d195960621b6044820152606401915061026c9050565b3330146107b85760405162461bcd60e51b8152602060048201526024808201527f4f6e6c79207468697320636f6e74726163742063616e20657865637574652063604482015263616c6c7360e01b606482015260840161026c565b8051602003610812575f6107cb8261091a565b5f81815260208190526040808220805460ff191660011790555191925082917f95c5bdccc9fd3d9223140b7b7313807f52556b5729cf273201d4166dec7b4d2b9190a25050565b5f818060200190518101906108279190610e38565b90505f5b815181101561089d5761089582828151811061084957610849610f96565b60200260200101515f015183838151811061086657610866610f96565b60200260200101516020015184848151811061088457610884610f96565b602002602001015160400151610932565b60010161082b565b505050565b336001600160a01b037f000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa316146105895760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c792041737365744d616e6167657220697320616c6c6f77656400000000604482015260640161026c565b5f81515f0361092a57505f919050565b506020015190565b5f836001600160a01b0316838360405161094c9190610faa565b5f6040518083038185875af1925050503d805f8114610986576040519150601f19603f3d011682016040523d82523d5f602084013e61098b565b606091505b50509050806109d35760405162461bcd60e51b8152602060048201526014602482015273115e1d195c9b985b0818d85b1b0819985a5b195960621b604482015260640161026c565b50505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610a0f57610a0f6109d9565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610a3d57610a3d6109d9565b604052919050565b5f6001600160401b03821115610a5d57610a5d6109d9565b50601f01601f191660200190565b5f82601f830112610a7a575f5ffd5b8135610a8d610a8882610a45565b610a15565b818152846020838601011115610aa1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215610acd575f5ffd5b81356001600160401b03811115610ae2575f5ffd5b610aee84828501610a6b565b949350505050565b5f5f83601f840112610b06575f5ffd5b5081356001600160401b03811115610b1c575f5ffd5b602083019150836020828501011115610b33575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215610b50575f5ffd5b8735965060208801356001600160401b03811115610b6c575f5ffd5b610b788a828b01610af6565b9097509550506040880135935060608801356001600160401b03811115610b9d575f5ffd5b610ba98a828b01610a6b565b93505060808801356001600160401b03811115610bc4575f5ffd5b8801601f81018a13610bd4575f5ffd5b80356001600160401b03811115610be9575f5ffd5b8a60208260051b8401011115610bfd575f5ffd5b602082019350809250505092959891949750929550565b5f60208284031215610c24575f5ffd5b5035919050565b5f5f5f5f60608587031215610c3e575f5ffd5b8435935060208501356001600160401b03811115610c5a575f5ffd5b610c6687828801610af6565b90945092505060408501356001600160401b03811115610c84575f5ffd5b610c9087828801610a6b565b91505092959194509250565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610cdc6020830184610c9c565b9392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b87815260a060208201525f610d2460a08301888a610ce3565b8660408401528281036060840152610d3c8187610c9c565b83810360808501528481529050602080820190600586901b830101865f36829003601e19015b88821015610dcf57858403601f190185528235818112610d80575f5ffd5b8a016020810190356001600160401b03811115610d9b575f5ffd5b803603821315610da9575f5ffd5b610db4868284610ce3565b95505050602083019250602085019450600182019150610d62565b50919d9c50505050505050505050505050565b838152604060208201525f610dfb604083018486610ce3565b95945050505050565b80516001600160a01b0381168114610e1a575f5ffd5b919050565b5f60208284031215610e2f575f5ffd5b610cdc82610e04565b5f60208284031215610e48575f5ffd5b81516001600160401b03811115610e5d575f5ffd5b8201601f81018413610e6d575f5ffd5b80516001600160401b03811115610e8657610e866109d9565b8060051b610e9660208201610a15565b91825260208184018101929081019087841115610eb1575f5ffd5b6020850192505b83831015610f8b5782516001600160401b03811115610ed5575f5ffd5b85016060818a03601f19011215610eea575f5ffd5b610ef26109ed565b610efe60208301610e04565b81526040820151602082015260608201516001600160401b03811115610f22575f5ffd5b60208184010192505089601f830112610f39575f5ffd5b8151610f47610a8882610a45565b8181528b6020838601011115610f5b575f5ffd5b8160208501602083015e5f6020838301015280604084015250508084525050602082019150602083019250610eb8565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f92019182525091905056fea264697066735822122019adb94ef7212dca01bfc3ba5c24c78446373eca47810192e4cc82df8bf7746364736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d5cece180a52e0353654b3337c985e8d5e0563440000000000000000000000006c9b999d33c612ccd8721b0e349adcae151fcbbf000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3
-----Decoded View---------------
Arg [0] : _factory (address): 0xd5CECE180a52e0353654B3337c985E8d5E056344
Arg [1] : _connection (address): 0x6c9b999D33C612cCd8721b0e349adcAE151fcbBf
Arg [2] : _assetManager (address): 0x594b477dd2195CCB5Ff43EafC9b8a8de0F4B4fA3
Arg [3] : _xTokenManager (address): 0x594b477dd2195CCB5Ff43EafC9b8a8de0F4B4fA3
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000d5cece180a52e0353654b3337c985e8d5e056344
Arg [1] : 0000000000000000000000006c9b999d33c612ccd8721b0e349adcae151fcbbf
Arg [2] : 000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3
Arg [3] : 000000000000000000000000594b477dd2195ccb5ff43eafc9b8a8de0f4b4fa3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.