Polygon Sponsored slots available. Book your slot here!
Overview
POL Balance
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Name:
MigrationReceiver
Compiler Version
v0.8.22+commit.4fc1097e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "IERC20.sol"; import {Client} from "Client.sol"; import {CCIPReceiver} from "CCIPReceiver.sol"; contract MigrationReceiver is CCIPReceiver { // Event emitted when a message is received from another chain. // The unique ID of the CCIP message. // The chain selector of the source chain. // The address of the sender from the source chain. // The text that was received. // The token address that was transferred. // The token amount that was transferred. event RewardReceived( bytes32 indexed messageId, uint64 indexed sourceChainSelector, address sender, address token, uint256 tokenAmount ); bytes32 private lastReceivedMessageId; // Store the last received messageId. address private lastReceivedTokenAddress; // Store the last received token address. uint256 private lastReceivedTokenAmount; // Store the last received amount. address public migrator; address public owner; // Custom errors to provide more descriptive revert messages. error SourceChainNotWhitelisted(uint64 sourceChainSelector); // Used when the source chain has not been whitelisted by the contract owner. error SenderNotWhitelisted(address sender); // Used when the sender has not been whitelisted by the contract owner. // Mapping to keep track of whitelisted source chains. uint64 public whitelistedSourceChain; address public whitelistedSender; /// @dev Modifier that checks if the chain with the given sourceChainSelector is whitelisted. /// @param _sourceChainSelector The selector of the destination chain. modifier onlyWhitelistedSourceChain(uint64 _sourceChainSelector) { if (whitelistedSourceChain != _sourceChainSelector) { revert SourceChainNotWhitelisted(_sourceChainSelector); } _; } /// @dev Modifier that checks if the chain with the given sourceChainSelector is whitelisted. /// @param _sender The address of the sender. modifier onlyWhitelistedSenders(address _sender) { if (whitelistedSender != _sender) revert SenderNotWhitelisted(_sender); _; } /// @dev Modifier that checks whether the msg.sender is owner modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; } constructor(address _router, uint64 _sourceChain, address _sender, address _migrator, address _owner) CCIPReceiver(_router) { whitelistedSourceChain = _sourceChain; whitelistedSender = _sender; migrator = _migrator; owner = _owner; } /// handle a received message function _ccipReceive(Client.Any2EVMMessage memory message) internal override onlyWhitelistedSourceChain(message.sourceChainSelector) onlyWhitelistedSenders(abi.decode(message.sender, (address))) { lastReceivedMessageId = message.messageId; // fetch the messageId // Expect one token to be transferred at once, but you can transfer several tokens. address token = message.destTokenAmounts[0].token; uint256 amount = message.destTokenAmounts[0].amount; lastReceivedTokenAddress = token; lastReceivedTokenAmount = amount; // Send received tokens to migrator contract IERC20(token).transfer(migrator, amount); emit RewardReceived( message.messageId, message.sourceChainSelector, // fetch the source chain identifier (aka selector) abi.decode(message.sender, (address)), // abi-decoding of the sender address, token, amount ); } /* Admin */ /// @notice Fallback function to allow the contract to receive Ether. /// @dev This function has no function body, making it a default function for receiving Ether. /// It is automatically called when Ether is transferred to the contract without any data. receive() external payable {} /// @notice Allows the owner to set a new contract owner. /// @param newOwner The address of the new contract owner. function setOwner(address newOwner) external onlyOwner { owner = newOwner; } /// @notice Allows the owner to set a new migrator contract. /// @param newMigrator The address of the new migrator contract. function setMigrator(address newMigrator) external onlyOwner { migrator = newMigrator; } /// @notice Emergency withdraw /// @param _token Address of token to withdraw function emergencyWithdraw(address _beneficiary, address _token, uint256 _amount) external onlyOwner { IERC20(_token).transfer(_beneficiary, _amount); } /// @notice Emergency withdraw native token /// @param _beneficiary Receiver of emergeny withdraw /// @param _amount Amount to withdraw function emergencyWithdrawNative(address _beneficiary, uint256 _amount) external onlyOwner { (bool sent,) = _beneficiary.call{value: _amount}(""); require(sent, "Failed to send Ether"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // End consumer library. library Client { struct EVMTokenAmount { address token; // token address on the local chain. uint256 amount; // Amount of tokens. } struct Any2EVMMessage { bytes32 messageId; // MessageId corresponding to ccipSend on source. uint64 sourceChainSelector; // Source chain selector. bytes sender; // abi.decode(sender) if coming from an EVM chain. bytes data; // payload sent in original message. EVMTokenAmount[] destTokenAmounts; // Tokens and their amounts in their destination chain representation. } // If extraArgs is empty bytes, the default is 200k gas limit and strict = false. struct EVM2AnyMessage { bytes receiver; // abi.encode(receiver address) for dest EVM chains bytes data; // Data payload EVMTokenAmount[] tokenAmounts; // Token transfers address feeToken; // Address of feeToken. address(0) means you will send msg.value. bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV1) } // extraArgs will evolve to support new features // bytes4(keccak256("CCIP EVMExtraArgsV1")); bytes4 public constant EVM_EXTRA_ARGS_V1_TAG = 0x97a657c9; struct EVMExtraArgsV1 { uint256 gasLimit; // ATTENTION!!! MAX GAS LIMIT 4M FOR BETA TESTING bool strict; // See strict sequencing details below. } function _argsToBytes(EVMExtraArgsV1 memory extraArgs) internal pure returns (bytes memory bts) { return abi.encodeWithSelector(EVM_EXTRA_ARGS_V1_TAG, extraArgs); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import {IAny2EVMMessageReceiver} from "IAny2EVMMessageReceiver.sol"; import {Client} from "Client.sol"; import {IERC165} from "IERC165.sol"; /// @title CCIPReceiver - Base contract for CCIP applications that can receive messages. abstract contract CCIPReceiver is IAny2EVMMessageReceiver, IERC165 { address internal immutable i_router; constructor(address router) { if (router == address(0)) revert InvalidRouter(address(0)); i_router = router; } /// @notice IERC165 supports an interfaceId /// @param interfaceId The interfaceId to check /// @return true if the interfaceId is supported function supportsInterface(bytes4 interfaceId) public pure override returns (bool) { return interfaceId == type(IAny2EVMMessageReceiver).interfaceId || interfaceId == type(IERC165).interfaceId; } /// @inheritdoc IAny2EVMMessageReceiver function ccipReceive(Client.Any2EVMMessage calldata message) external virtual override onlyRouter { _ccipReceive(message); } /// @notice Override this function in your implementation. /// @param message Any2EVMMessage function _ccipReceive(Client.Any2EVMMessage memory message) internal virtual; ///////////////////////////////////////////////////////////////////// // Plumbing ///////////////////////////////////////////////////////////////////// /// @notice Return the current router /// @return i_router address function getRouter() public view returns (address) { return address(i_router); } error InvalidRouter(address router); /// @dev only calls from the set router are accepted. modifier onlyRouter() { if (msg.sender != address(i_router)) revert InvalidRouter(msg.sender); _; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Client} from "Client.sol"; /// @notice Application contracts that intend to receive messages from /// the router should implement this interface. interface IAny2EVMMessageReceiver { /// @notice Called by the Router to deliver a message. /// If this reverts, any token transfers also revert. The message /// will move to a FAILED state and become available for manual execution. /// @param message CCIP Message /// @dev Note ensure you check the msg.sender is the OffRampRouter function ccipReceive(Client.Any2EVMMessage calldata message) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "MigrationReceiver.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"uint64","name":"_sourceChain","type":"uint64"},{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_migrator","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"InvalidRouter","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderNotWhitelisted","type":"error"},{"inputs":[{"internalType":"uint64","name":"sourceChainSelector","type":"uint64"}],"name":"SourceChainNotWhitelisted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"messageId","type":"bytes32"},{"indexed":true,"internalType":"uint64","name":"sourceChainSelector","type":"uint64"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardReceived","type":"event"},{"inputs":[{"components":[{"internalType":"bytes32","name":"messageId","type":"bytes32"},{"internalType":"uint64","name":"sourceChainSelector","type":"uint64"},{"internalType":"bytes","name":"sender","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct Client.EVMTokenAmount[]","name":"destTokenAmounts","type":"tuple[]"}],"internalType":"struct Client.Any2EVMMessage","name":"message","type":"tuple"}],"name":"ccipReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMigrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"whitelistedSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedSourceChain","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610ca9380380610ca983398101604081905261002f916100e3565b846001600160a01b03811661005e576040516335fdcccd60e21b81526000600482015260240160405180910390fd5b6001600160a01b0390811660805260048054600580549684166001600160a01b0319978816179055600380549584169587169590951790945591166001600160401b03909416600160a01b02929092166001600160e01b03199091161791909117905550610157565b80516001600160a01b03811681146100de57600080fd5b919050565b600080600080600060a086880312156100fb57600080fd5b610104866100c7565b60208701519095506001600160401b038116811461012157600080fd5b935061012f604087016100c7565b925061013d606087016100c7565b915061014b608087016100c7565b90509295509295909350565b608051610b306101796000396000818161022901526103500152610b306000f3fe6080604052600436106100a05760003560e01c80637cd07e47116100645780637cd07e471461019a57806385572ffb146101ba5780638da5cb5b146101da5780639b788504146101fa578063b0f479a11461021a578063e63ea4081461024d57600080fd5b806301ffc9a7146100ac57806313af4035146100e15780631d7979221461010357806323cf31181461014257806374e47b0a1461016257600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610705565b61026d565b60405190151581526020015b60405180910390f35b3480156100ed57600080fd5b506101016100fc36600461074b565b6102a4565b005b34801561010f57600080fd5b5060045461012a90600160a01b90046001600160401b031681565b6040516001600160401b0390911681526020016100d8565b34801561014e57600080fd5b5061010161015d36600461074b565b6102f9565b34801561016e57600080fd5b50600554610182906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b3480156101a657600080fd5b50600354610182906001600160a01b031681565b3480156101c657600080fd5b506101016101d5366004610768565b610345565b3480156101e657600080fd5b50600454610182906001600160a01b031681565b34801561020657600080fd5b506101016102153660046107a2565b6103a4565b34801561022657600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610182565b34801561025957600080fd5b506101016102683660046107ce565b61046d565b60006001600160e01b031982166385572ffb60e01b148061029e57506001600160e01b031982166301ffc9a760e01b145b92915050565b6004546001600160a01b031633146102d75760405162461bcd60e51b81526004016102ce9061080f565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146103235760405162461bcd60e51b81526004016102ce9061080f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610390576040516335fdcccd60e21b81523360048201526024016102ce565b6103a161039c826109f9565b610510565b50565b6004546001600160a01b031633146103ce5760405162461bcd60e51b81526004016102ce9061080f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461041b576040519150601f19603f3d011682016040523d82523d6000602084013e610420565b606091505b50509050806104685760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016102ce565b505050565b6004546001600160a01b031633146104975760405162461bcd60e51b81526004016102ce9061080f565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156104e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050a9190610aa5565b50505050565b60208101516004546001600160401b03808316600160a01b9092041614610555576040516313415d6960e11b81526001600160401b03821660048201526024016102ce565b816040015180602001905181019061056d9190610ac7565b6005546001600160a01b038281169116146105a65760405163bf3f938960e01b81526001600160a01b03821660048201526024016102ce565b825160009081556080840151805182906105c2576105c2610ae4565b6020026020010151600001519050600084608001516000815181106105e9576105e9610ae4565b6020908102919091018101510151600180546001600160a01b0319166001600160a01b03858116918217909255600283905560035460405163a9059cbb60e01b8152921660048301526024820183905291925063a9059cbb906044016020604051808303816000875af1158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610aa5565b5084602001516001600160401b031685600001517f4988aeba21d7ace8ca57c8e87a65c5af92b30f4c8915a3923ddb4c6e6c9db0d487604001518060200190518101906106d59190610ac7565b604080516001600160a01b0392831681529187166020830152810185905260600160405180910390a35050505050565b60006020828403121561071757600080fd5b81356001600160e01b03198116811461072f57600080fd5b9392505050565b6001600160a01b03811681146103a157600080fd5b60006020828403121561075d57600080fd5b813561072f81610736565b60006020828403121561077a57600080fd5b81356001600160401b0381111561079057600080fd5b820160a0818503121561072f57600080fd5b600080604083850312156107b557600080fd5b82356107c081610736565b946020939093013593505050565b6000806000606084860312156107e357600080fd5b83356107ee81610736565b925060208401356107fe81610736565b929592945050506040919091013590565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561086a5761086a610832565b60405290565b60405160a081016001600160401b038111828210171561086a5761086a610832565b604051601f8201601f191681016001600160401b03811182821017156108ba576108ba610832565b604052919050565b80356001600160401b03811681146108d957600080fd5b919050565b600082601f8301126108ef57600080fd5b81356001600160401b0381111561090857610908610832565b61091b601f8201601f1916602001610892565b81815284602083860101111561093057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261095e57600080fd5b813560206001600160401b0382111561097957610979610832565b610987818360051b01610892565b82815260069290921b840181019181810190868411156109a657600080fd5b8286015b848110156109ee57604081890312156109c35760008081fd5b6109cb610848565b81356109d681610736565b815281850135858201528352918301916040016109aa565b509695505050505050565b600060a08236031215610a0b57600080fd5b610a13610870565b82358152610a23602084016108c2565b602082015260408301356001600160401b0380821115610a4257600080fd5b610a4e368387016108de565b60408401526060850135915080821115610a6757600080fd5b610a73368387016108de565b60608401526080850135915080821115610a8c57600080fd5b50610a993682860161094d565b60808301525092915050565b600060208284031215610ab757600080fd5b8151801515811461072f57600080fd5b600060208284031215610ad957600080fd5b815161072f81610736565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220022f2c525d79162c9af3daa992249ba2a31db7678306877b963bbb62d12f126664736f6c634300081600330000000000000000000000003c3d92629a02a8d95d5cb9650fe49c3544f69b4300000000000000000000000000000000000000000000000045849994fc9c7b150000000000000000000000007ace867b3a503c6c76834ac223993fbd8963bed2000000000000000000000000f626acb046cc03ec45acff7f02792044cc225fe400000000000000000000000080d27bfb638f4fea1e862f1bd07dea577cb77d38
Deployed Bytecode
0x6080604052600436106100a05760003560e01c80637cd07e47116100645780637cd07e471461019a57806385572ffb146101ba5780638da5cb5b146101da5780639b788504146101fa578063b0f479a11461021a578063e63ea4081461024d57600080fd5b806301ffc9a7146100ac57806313af4035146100e15780631d7979221461010357806323cf31181461014257806374e47b0a1461016257600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004610705565b61026d565b60405190151581526020015b60405180910390f35b3480156100ed57600080fd5b506101016100fc36600461074b565b6102a4565b005b34801561010f57600080fd5b5060045461012a90600160a01b90046001600160401b031681565b6040516001600160401b0390911681526020016100d8565b34801561014e57600080fd5b5061010161015d36600461074b565b6102f9565b34801561016e57600080fd5b50600554610182906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b3480156101a657600080fd5b50600354610182906001600160a01b031681565b3480156101c657600080fd5b506101016101d5366004610768565b610345565b3480156101e657600080fd5b50600454610182906001600160a01b031681565b34801561020657600080fd5b506101016102153660046107a2565b6103a4565b34801561022657600080fd5b507f0000000000000000000000003c3d92629a02a8d95d5cb9650fe49c3544f69b43610182565b34801561025957600080fd5b506101016102683660046107ce565b61046d565b60006001600160e01b031982166385572ffb60e01b148061029e57506001600160e01b031982166301ffc9a760e01b145b92915050565b6004546001600160a01b031633146102d75760405162461bcd60e51b81526004016102ce9061080f565b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031633146103235760405162461bcd60e51b81526004016102ce9061080f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b336001600160a01b037f0000000000000000000000003c3d92629a02a8d95d5cb9650fe49c3544f69b431614610390576040516335fdcccd60e21b81523360048201526024016102ce565b6103a161039c826109f9565b610510565b50565b6004546001600160a01b031633146103ce5760405162461bcd60e51b81526004016102ce9061080f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461041b576040519150601f19603f3d011682016040523d82523d6000602084013e610420565b606091505b50509050806104685760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016102ce565b505050565b6004546001600160a01b031633146104975760405162461bcd60e51b81526004016102ce9061080f565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af11580156104e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050a9190610aa5565b50505050565b60208101516004546001600160401b03808316600160a01b9092041614610555576040516313415d6960e11b81526001600160401b03821660048201526024016102ce565b816040015180602001905181019061056d9190610ac7565b6005546001600160a01b038281169116146105a65760405163bf3f938960e01b81526001600160a01b03821660048201526024016102ce565b825160009081556080840151805182906105c2576105c2610ae4565b6020026020010151600001519050600084608001516000815181106105e9576105e9610ae4565b6020908102919091018101510151600180546001600160a01b0319166001600160a01b03858116918217909255600283905560035460405163a9059cbb60e01b8152921660048301526024820183905291925063a9059cbb906044016020604051808303816000875af1158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610aa5565b5084602001516001600160401b031685600001517f4988aeba21d7ace8ca57c8e87a65c5af92b30f4c8915a3923ddb4c6e6c9db0d487604001518060200190518101906106d59190610ac7565b604080516001600160a01b0392831681529187166020830152810185905260600160405180910390a35050505050565b60006020828403121561071757600080fd5b81356001600160e01b03198116811461072f57600080fd5b9392505050565b6001600160a01b03811681146103a157600080fd5b60006020828403121561075d57600080fd5b813561072f81610736565b60006020828403121561077a57600080fd5b81356001600160401b0381111561079057600080fd5b820160a0818503121561072f57600080fd5b600080604083850312156107b557600080fd5b82356107c081610736565b946020939093013593505050565b6000806000606084860312156107e357600080fd5b83356107ee81610736565b925060208401356107fe81610736565b929592945050506040919091013590565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561086a5761086a610832565b60405290565b60405160a081016001600160401b038111828210171561086a5761086a610832565b604051601f8201601f191681016001600160401b03811182821017156108ba576108ba610832565b604052919050565b80356001600160401b03811681146108d957600080fd5b919050565b600082601f8301126108ef57600080fd5b81356001600160401b0381111561090857610908610832565b61091b601f8201601f1916602001610892565b81815284602083860101111561093057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261095e57600080fd5b813560206001600160401b0382111561097957610979610832565b610987818360051b01610892565b82815260069290921b840181019181810190868411156109a657600080fd5b8286015b848110156109ee57604081890312156109c35760008081fd5b6109cb610848565b81356109d681610736565b815281850135858201528352918301916040016109aa565b509695505050505050565b600060a08236031215610a0b57600080fd5b610a13610870565b82358152610a23602084016108c2565b602082015260408301356001600160401b0380821115610a4257600080fd5b610a4e368387016108de565b60408401526060850135915080821115610a6757600080fd5b610a73368387016108de565b60608401526080850135915080821115610a8c57600080fd5b50610a993682860161094d565b60808301525092915050565b600060208284031215610ab757600080fd5b8151801515811461072f57600080fd5b600060208284031215610ad957600080fd5b815161072f81610736565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220022f2c525d79162c9af3daa992249ba2a31db7678306877b963bbb62d12f126664736f6c63430008160033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003c3d92629a02a8d95d5cb9650fe49c3544f69b4300000000000000000000000000000000000000000000000045849994fc9c7b150000000000000000000000007ace867b3a503c6c76834ac223993fbd8963bed2000000000000000000000000f626acb046cc03ec45acff7f02792044cc225fe400000000000000000000000080d27bfb638f4fea1e862f1bd07dea577cb77d38
-----Decoded View---------------
Arg [0] : _router (address): 0x3C3D92629A02a8D95D5CB9650fe49C3544f69B43
Arg [1] : _sourceChain (uint64): 5009297550715157269
Arg [2] : _sender (address): 0x7ace867b3a503C6C76834ac223993FBD8963BED2
Arg [3] : _migrator (address): 0xF626AcB046CC03EC45aCff7F02792044Cc225fe4
Arg [4] : _owner (address): 0x80D27bfb638F4Fea1e862f1bd07DEa577CB77D38
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c3d92629a02a8d95d5cb9650fe49c3544f69b43
Arg [1] : 00000000000000000000000000000000000000000000000045849994fc9c7b15
Arg [2] : 0000000000000000000000007ace867b3a503c6c76834ac223993fbd8963bed2
Arg [3] : 000000000000000000000000f626acb046cc03ec45acff7f02792044cc225fe4
Arg [4] : 00000000000000000000000080d27bfb638f4fea1e862f1bd07dea577cb77d38
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.