Source Code
Overview
POL Balance
POL Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Cross-Chain Transactions
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
Contract ABI
API[{"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
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.