Contract
0x8a1b966ac46f42275860f905dbc75efbfdc12374
1
Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x4e45db802f763b3fbf93336591fb978fa33c61af8233c9544d39f56e11f99fa8 | 0x60c06040 | 22908883 | 466 days 13 hrs ago | 0x289ed7b614aa9cb2feeace6ce2b4244ba4bd58a2 | IN | Create: EthereumProxy | 0 MATIC | 0.001394845003 |
[ Download CSV Export ]
Contract Name:
EthereumProxy
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; import {IFxMessageProcessor} from '@maticnetwork/fx-portal/contracts/tunnel/FxBaseChildTunnel.sol'; /// @title Ethereum proxy contract /// @dev This contract represents another contract on L1 contract EthereumProxy is IFxMessageProcessor { /// @notice The tunnel contract on the child network, i.e. Polygon address public immutable fxChild; /// @notice The address of the L1 owner contract, i.e. Ethereum L1 owner address address public immutable l1Owner; constructor(address _fxChild, address _l1Owner) { fxChild = _fxChild; l1Owner = _l1Owner; } /// @dev Emitted when this contract simply receives some currency event Received(uint256 value); /// @dev If necessary, this contract can accept funds so that it may send funds receive() external payable { emit Received(msg.value); } /// @dev This function is how messages are delivered from the polygon message passing contract to polygon contracts. function processMessageFromRoot( uint256, /*stateId*/ address sender, bytes memory message ) external override { require(msg.sender == fxChild, 'Can only be called by the state sync child contract'); require(sender == l1Owner, 'L1 sender must be the owner'); (address[] memory targets, bytes[] memory datas, uint256[] memory values) = abi.decode( message, (address[], bytes[], uint256[]) ); require(targets.length == datas.length && targets.length == values.length, 'Inconsistent argument lengths'); for (uint256 i = 0; i < targets.length; i++) { (bool success, ) = targets[i].call{value: values[i]}(datas[i]); require(success, 'Sub-call failed'); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // IFxMessageProcessor represents interface to process message interface IFxMessageProcessor { function processMessageFromRoot(uint256 stateId, address rootMessageSender, bytes calldata data) external; } /** * @notice Mock child tunnel contract to receive and send message from L2 */ abstract contract FxBaseChildTunnel is IFxMessageProcessor{ // MessageTunnel on L1 will get data from this event event MessageSent(bytes message); // fx child address public fxChild; // fx root tunnel address public fxRootTunnel; constructor(address _fxChild) { fxChild = _fxChild; } // Sender must be fxRootTunnel in case of ERC20 tunnel modifier validateSender(address sender) { require(sender == fxRootTunnel, "FxBaseChildTunnel: INVALID_SENDER_FROM_ROOT"); _; } // set fxRootTunnel if not set already function setFxRootTunnel(address _fxRootTunnel) external { require(fxRootTunnel == address(0x0), "FxBaseChildTunnel: ROOT_TUNNEL_ALREADY_SET"); fxRootTunnel = _fxRootTunnel; } function processMessageFromRoot(uint256 stateId, address rootMessageSender, bytes calldata data) external override { require(msg.sender == fxChild, "FxBaseChildTunnel: INVALID_SENDER"); _processMessageFromRoot(stateId, rootMessageSender, data); } /** * @notice Emit message that can be received on Root Tunnel * @dev Call the internal function when need to emit message * @param message bytes message that will be sent to Root Tunnel * some message examples - * abi.encode(tokenId); * abi.encode(tokenId, tokenMetadata); * abi.encode(messageType, messageData); */ function _sendMessageToRoot(bytes memory message) internal { emit MessageSent(message); } /** * @notice Process message received from Root Tunnel * @dev function needs to be implemented to handle message as per requirement * This is called by onStateReceive function. * Since it is called via a system call, any event will not be emitted during its execution. * @param stateId unique state id * @param sender root message sender * @param message bytes message that was sent from Root Tunnel */ function _processMessageFromRoot(uint256 stateId, address sender, bytes memory message) virtual internal; }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_fxChild","type":"address"},{"internalType":"address","name":"_l1Owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"inputs":[],"name":"fxChild","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1Owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516109eb3803806109eb83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516109246100c76000396000818161010801526101f60152600081816089015261014201526109246000f3fe6080604052600436106100385760003560e01c8063450d11f0146100775780639a7c4b71146100d4578063d2db6372146100f657600080fd5b36610072576040513481527fa8142743f8f70a4c26f3691cf4ed59718381fb2f18070ec52be1f1022d8555579060200160405180910390a1005b600080fd5b34801561008357600080fd5b506100ab7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e057600080fd5b506100f46100ef366004610571565b61012a565b005b34801561010257600080fd5b506100ab7f000000000000000000000000000000000000000000000000000000000000000081565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f43616e206f6e6c792062652063616c6c6564206279207468652073746174652060448201527f73796e63206368696c6420636f6e74726163740000000000000000000000000060648201526084015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146102a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4c312073656e646572206d75737420626520746865206f776e6572000000000060448201526064016101eb565b6000806000838060200190518101906102c29190610783565b925092509250815183511480156102da575080518351145b610340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e636f6e73697374656e7420617267756d656e74206c656e6774687300000060448201526064016101eb565b60005b835181101561047f5760008482815181106103605761036061086c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168383815181106103905761039061086c565b60200260200101518584815181106103aa576103aa61086c565b60200260200101516040516103bf919061089b565b60006040518083038185875af1925050503d80600081146103fc576040519150601f19603f3d011682016040523d82523d6000602084013e610401565b606091505b505090508061046c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5375622d63616c6c206661696c6564000000000000000000000000000000000060448201526064016101eb565b5080610477816108b7565b915050610343565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146104aa57600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610523576105236104ad565b604052919050565b600067ffffffffffffffff821115610545576105456104ad565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60008060006060848603121561058657600080fd5b83359250602084013561059881610488565b9150604084013567ffffffffffffffff8111156105b457600080fd5b8401601f810186136105c557600080fd5b80356105d86105d38261052b565b6104dc565b8181528760208385010111156105ed57600080fd5b816020840160208301376000602083830101528093505050509250925092565b600067ffffffffffffffff821115610627576106276104ad565b5060051b60200190565b60005b8381101561064c578181015183820152602001610634565b8381111561065b576000848401525b50505050565b600082601f83011261067257600080fd5b815160206106826105d38361060d565b82815260059290921b840181019181810190868411156106a157600080fd5b8286015b8481101561071d57805167ffffffffffffffff8111156106c55760008081fd5b8701603f810189136106d75760008081fd5b8481015160406106e96105d38361052b565b8281528b828486010111156106fe5760008081fd5b61070d83898301848701610631565b86525050509183019183016106a5565b509695505050505050565b600082601f83011261073957600080fd5b815160206107496105d38361060d565b82815260059290921b8401810191818101908684111561076857600080fd5b8286015b8481101561071d578051835291830191830161076c565b60008060006060848603121561079857600080fd5b835167ffffffffffffffff808211156107b057600080fd5b818601915086601f8301126107c457600080fd5b815160206107d46105d38361060d565b82815260059290921b8401810191818101908a8411156107f357600080fd5b948201945b8386101561081a57855161080b81610488565b825294820194908201906107f8565b9189015191975090935050508082111561083357600080fd5b61083f87838801610661565b9350604086015191508082111561085557600080fd5b5061086286828701610728565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082516108ad818460208701610631565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610910577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c6343000809000a000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f110000000000000000000000001a9c8182c09f50c8318d769245bea52c32be35bc
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f110000000000000000000000001a9c8182c09f50c8318d769245bea52c32be35bc
-----Decoded View---------------
Arg [0] : _fxChild (address): 0xcf73231f28b7331bbe3124b907840a94851f9f11
Arg [1] : _l1Owner (address): 0x1a9c8182c09f50c8318d769245bea52c32be35bc
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f11
Arg [1] : 0000000000000000000000001a9c8182c09f50c8318d769245bea52c32be35bc
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|