Contract
0x797887e464e49e6b376fe15da9fddf15a770cd6b
1
Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xf0da70aa8982c42fecd0fd4ecba95846fef2313316136df9be88569f0e848457 | Set Fx Root Tunn... | 19693119 | 539 days 10 hrs ago | 0xc102f76973f4890cab1b5d1ed26f3623381983af | IN | 0x797887e464e49e6b376fe15da9fddf15a770cd6b | 0 MATIC | 0.00086877 | |
0x33a3175bb378337e905382c3a47b1587a122333c48d753e14b7bcf56bbcc80ef | Set Fx Root Tunn... | 19690830 | 539 days 12 hrs ago | 0xc102f76973f4890cab1b5d1ed26f3623381983af | IN | 0x797887e464e49e6b376fe15da9fddf15a770cd6b | 0 MATIC | 0.00138177 | |
0x29db6f197715bddd7ae765053cd3bf5dfde6875f91c3cbbe12ad3440838b1d2a | 0x60806040 | 19690709 | 539 days 12 hrs ago | 0xc102f76973f4890cab1b5d1ed26f3623381983af | IN | Create: PolygonOwnershipCache | 0 MATIC | 0.01463499 |
[ Download CSV Export ]
Contract Name:
PolygonOwnershipCache
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {FxBaseChildTunnel} from "../Libraries/tunnel/FxBaseChildTunnel.sol"; contract PolygonOwnershipCache is FxBaseChildTunnel { mapping(address => mapping(uint256 => address)) internal layerOneOwnership; constructor(address _fxChild) FxBaseChildTunnel(_fxChild) {} // solhint-disable-line no-empty-blocks function _processMessageFromRoot( uint256 stateId, address sender, bytes memory data ) internal override validateSender(sender) { (address contractAddress, uint256 tokenId, address layerOneOwner) = abi.decode( data, (address, uint256, address) ); layerOneOwnership[contractAddress][tokenId] = layerOneOwner; } function getOwner(address contractAddress, uint256 tokenId) public view returns (address owner) { return layerOneOwnership[contractAddress][tokenId]; } function isOwner( address contractAddress, uint256 tokenId, address actingAddress ) public view returns (bool) { return getOwner(contractAddress, tokenId) == actingAddress; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // 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, Ownable { // 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) public onlyOwner { fxRootTunnel = _fxRootTunnel; } function processMessageFromRoot( uint256 stateId, address rootMessageSender, bytes memory data ) public override { require(_msgSender() == 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 ) internal virtual; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_fxChild","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"}],"name":"MessageSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"fxChild","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fxRootTunnel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwner","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"actingAddress","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stateId","type":"uint256"},{"internalType":"address","name":"rootMessageSender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"processMessageFromRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fxRootTunnel","type":"address"}],"name":"setFxRootTunnel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516107cb3803806107cb83398101604081905261002f91610096565b600080546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b0319166001600160a01b0392909216919091179055506100c4565b6000602082840312156100a7578081fd5b81516001600160a01b03811681146100bd578182fd5b9392505050565b6106f8806100d36000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637f1e9cb0116100665780637f1e9cb01461012b578063888370941461013e5780638da5cb5b146101515780639a7c4b7114610162578063f2fde38b1461017557610093565b80632f634a9014610098578063450d11f0146100eb578063514c78c1146100fe578063715018a614610121575b600080fd5b6100ce6100a6366004610536565b6001600160a01b03918216600090815260036020908152604080832093835292905220541690565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100ce906001600160a01b031681565b61011161010c366004610561565b610188565b60405190151581526020016100e2565b6101296101d3565b005b6002546100ce906001600160a01b031681565b61012961014c3660046104d1565b610250565b6000546001600160a01b03166100ce565b610129610170366004610597565b61029c565b6101296101833660046104d1565b610319565b6000816001600160a01b03166101c185856001600160a01b03918216600090815260036020908152604080832093835292905220541690565b6001600160a01b031614949350505050565b6000546001600160a01b031633146102065760405162461bcd60e51b81526004016101fd9061065f565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461027a5760405162461bcd60e51b81526004016101fd9061065f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316336001600160a01b0316146103095760405162461bcd60e51b815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e44456044820152602960f91b60648201526084016101fd565b610314838383610403565b505050565b6000546001600160a01b031633146103435760405162461bcd60e51b81526004016101fd9061065f565b6001600160a01b0381166103a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101fd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60025482906001600160a01b038083169116146104765760405162461bcd60e51b815260206004820152602b60248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201526a1497d19493d357d493d3d560aa1b60648201526084016101fd565b60008060008480602001905181019061048f91906104f4565b6001600160a01b0392831660009081526003602090815260408083209483529390529190912080546001600160a01b0319169190921617905550505050505050565b6000602082840312156104e2578081fd5b81356104ed816106aa565b9392505050565b600080600060608486031215610508578182fd5b8351610513816106aa565b60208501516040860151919450925061052b816106aa565b809150509250925092565b60008060408385031215610548578182fd5b8235610553816106aa565b946020939093013593505050565b600080600060608486031215610575578283fd5b8335610580816106aa565b925060208401359150604084013561052b816106aa565b6000806000606084860312156105ab578283fd5b8335925060208401356105bd816106aa565b9150604084013567ffffffffffffffff808211156105d9578283fd5b818601915086601f8301126105ec578283fd5b8135818111156105fe576105fe610694565b604051601f8201601f19908116603f0116810190838211818310171561062657610626610694565b8160405282815289602084870101111561063e578586fd5b82602086016020830137856020848301015280955050505050509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146106bf57600080fd5b5056fea26469706673582212208bf7c434e8316b20a341536bf2bf5a477fceac42d249ab18390831dd5b61fbff64736f6c63430008020033000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f11
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f11
-----Decoded View---------------
Arg [0] : _fxChild (address): 0xcf73231f28b7331bbe3124b907840a94851f9f11
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf73231f28b7331bbe3124b907840a94851f9f11
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|