Contract 0xF191d17dEe9943F06bB784C0492805280AeE0bf9 13

 
Txn Hash Method
Block
From
To
Value
0xb46c6ed508afc46d9405d12a0165330b9cca10347df2cfd7fec02309c90dbd0aMulticall52753962022-04-03 9:40:44614 days 10 hrs ago0x4f46f8d5d164327cac6a15e336de9e9cbac3ea6f IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0006723101110.001
0xbe48c93748238b2308de7be2ea84353817ea62c43995280c34399d41a1a1f7c6Multicall52037102022-04-01 19:01:38616 days 44 mins ago0x5d47e5d242a8f66a6286b0a2353868875f5d6068 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0026331338460.001
0x810a5b497be6fc1993ad546a143f3442df81d3503c9ac6ab2b9308586dff9849Multicall51423292022-03-31 16:57:40617 days 2 hrs ago0xd9c241c5135ae3733da67ec4e67e4d3b2345ac5a IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0007988700320.001
0x2d200dcc99196ea6a1db571711a4900a8b7714575865606bb06537a25f959dc5Multicall49550032022-03-28 15:09:34620 days 4 hrs ago0x705acf1397b2710698bcc4bce346c2c7e5ed5da4 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0010655755650.001
0xae99b3bf699ac019d90dc5f291173398e0efacdca3148a9f404e3d11aefab169Multicall48106932022-03-24 19:26:23624 days 19 mins ago0x9d6949cfb82266da146daf32c52994e2224a8b38 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0027020593430.001
0x7ae748eebf2043898bf4c78d4f91eee94561b19165fc85291102ad189b3f15c2Multicall48104552022-03-24 19:18:54624 days 27 mins ago0x1091fb53079f123e823859919e9f7be919b754e9 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0032488191390.001
0x2a6cb086d08029f683f39cb773b09f7c5a88cfc55006f2a1a8d445a183aeefc4Multicall48064762022-03-24 16:35:30624 days 3 hrs ago0x3b01567fa719f286dd3b9e95266723104915a3ef IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0021659117750.001
0x527cd7c363f1d4163b5a0d16a263b02d08263fcfbe1b78dd42a5a2b0813b2ae0Multicall47483882022-03-23 15:18:55625 days 4 hrs ago 0xab8ae1155fc78779cd8e14fb91283865a5e21423 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0007418333720.001
0x2ad9ebc288ec6bfa5cfd378e024c7b8d457b4e238aab25dd0240baf272927375Multicall47373832022-03-23 9:21:46625 days 10 hrs ago0x493374100e511b1b091fa5bace1929dc154fee80 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0004106145190.001
0x699aacfa5fe60fe8c647fe072ca699212418c40b659179109068e50681cca84dMulticall47181932022-03-22 19:44:05626 days 1 min ago0x2feab9baab22f27289d54e217d3ae02268111c06 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.000683034860.001
0x48407ee882f5a6a7d09c67a23698f4a9b8028047dfd498b71f063642abf4f662Multicall46844762022-03-21 20:47:01626 days 22 hrs ago0x312ad1a126af6884576fa3bce31e613bd4fd94c5 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0006095266030.001
0x7b4e4a57efe92c16ff2bf48abe5e5a4c666a49b8e35ae07ac292b72cd9b2c2b1Multicall46820272022-03-21 18:24:21627 days 1 hr ago0xe652150abcb929c04e013fcb9889ce2160e14982 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0010153022710.001
0xc26cb341b45d6656ee8f402b5993b584932462637694b6c8ba71234bf29f7852Multicall46663872022-03-21 9:39:04627 days 10 hrs ago0x1f3555e9572af36c2a0f0ec54fa929c5f7d04223 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0003366944680.001
0xbd4f91f9cc26371c9cc2d3177600381dc11540c2566fd7dae919ca7771c76bceMulticall46494092022-03-20 20:59:44627 days 22 hrs ago0x5111847c33f1b5cf5c1b874f27e1989e17c80857 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0006721485840.001
0x1bc75b4c0d00455625ce4ec64c88d993b60d6b0cb68bcd257fb5aa6ff20423acMulticall46227952022-03-20 2:36:36628 days 17 hrs ago0x5b78ae09929c53c77ba29a13265e35a2f62dd89f IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0006644850790.001
0xd2d5a2ba92d11a71b1badbc291e8a0a9f4307dd2df3613917e81b5de513a83b8Multicall45853342022-03-18 23:00:53629 days 20 hrs ago0x9ce7c6d8a50319a6ce62084dcf55f00044582c29 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0006391895340.001
0x2875eaf23628dbab9d89d61aa75f6e28e1f52caeef42e695c6da1f704fa2de5cMulticall45849522022-03-18 22:30:04629 days 21 hrs ago 0x9aa4e6641fefd0764bfebdeda637e7782d7ed4dc IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0021718849060.001
0xa2ebdb86286f4410a3f9ad72e51b10ec40bdeeb1334a89ddb8db90a14e0b2b7dMulticall45729192022-03-18 14:35:12630 days 5 hrs ago0xed2170462e997b9590f77bf2cd3cd283b877eade IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0023054760770.001
0xb3886a507f71ae1da62ce4fbb3be3f8a792c23bff4c969d89d85fa2f1ab34f54Multicall45633872022-03-18 8:09:15630 days 11 hrs ago0xb470540fe6ade971de7007595330073b05639daf IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0004485668780.001
0x255633d524c726f021568e381cef59e969ca812d87c1df99125cb9e16b014cf9Multicall45608812022-03-18 5:29:55630 days 14 hrs ago0x7f326ea697ef0dd2bbd628b62f569017c1d43fcb IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0010904937540.001
0xf2a949fa8fc0dab99ce79411dcf89e0b8e3b9c09b9b7e1e694dc888ba155635dMulticall45580172022-03-18 2:00:27630 days 17 hrs ago0xe60d782d5521b69f29f9b65f13e988e7f014c7c8 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0011963227020.001
0x22a83aa9fde86a280c5a17acfa95907040dee238360713dcc5cace875e55e650Multicall45507932022-03-17 19:14:52631 days 31 mins ago0xd491447348c474af15c40839d3e0056a80fec352 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0011625161030.001
0xa1f82f76874247538ea4161542142c38d8ef1f1737f2b292225317e72a467235Multicall45459822022-03-17 15:11:39631 days 4 hrs ago0x4dc7970c0facd251e4398f706c45f3af877d029b IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.001162199510.001
0xf2102414a9574cfa92b506c749b45ce119d30875c55fd63a1ea12d09261c97e8Multicall45422932022-03-17 12:34:53631 days 7 hrs ago0x84f4ccc36fc9d5fb1947949ae5572a33ad738667 IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0029496656970.001
0x255ca559cf9bbd13697062759882b8a410470eac6a4e9ea23453894aab7a6f4aMulticall45405402022-03-17 11:40:03631 days 8 hrs ago0x044a9c43e95aa9fd28eea25131a62b602d304f1f IN  0xf191d17dee9943f06bb784c0492805280aee0bf90 ETH0.0003443550740.001
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MerkleMirrorMultipleLocks

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : MerkleMirrorMultipleLocks.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { Pausable } from "@openzeppelin/contracts/security/Pausable.sol";
import { MerkleProof } from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";

import "./merkle-airdrop/ExternalMulticall.sol";

interface IMirroredVotingEscrow {
    function mirror_lock(
        address _to,
        uint256 _chain,
        uint256 _escrow_id,
        uint256 _value,
        uint256 _unlock_time
    ) external;
}

contract MerkleMirrorMultipleLocks is ExternalMulticall, Ownable, Pausable {

    uint256 chainId;

    IMirroredVotingEscrow mirroredVotingEscrow;

    MirrorEvent[] public mirrorEvents;

    constructor(uint256 _chainId, IMirroredVotingEscrow _mirroredVotingEscrow) {
        chainId = _chainId;
        mirroredVotingEscrow = _mirroredVotingEscrow;
    }

    struct MirrorEvent {
        bytes32 merkleRoot;
        mapping(address => mapping(uint256 => mapping(uint256 => bool))) hasMirrored;
    }

    event Mirrored(
        uint indexed eventId,
        address indexed to,
        uint256 chainId,
        uint256 escrowId,
        uint256 lockEnd,
        uint256 amount
    );

    event MirrorEventAdded(uint indexed id);

    function mirror_lock(
        address _to,
        uint256 _chainId,
        uint256 _escrowId,
        uint256 _lockeEnd,
        uint256 _amount,
        uint256 _eventId,
        bytes32[] calldata _proof
    ) external whenNotPaused {
        require(_eventId < mirrorEvents.length, "Invalid mirror event id");
        require(_chainId != chainId, "Cannot mirror local chain locks");

        MirrorEvent storage mirrorEvent_ = mirrorEvents[_eventId];

        require(mirrorEvent_.hasMirrored[_to][_chainId][_escrowId] == false, "Already Mirrored");

        bytes32 leaf_ = keccak256(abi.encodePacked(_to, _chainId, _escrowId, _lockeEnd, _amount));
        bool isValidLeaf_ = MerkleProof.verify(_proof, mirrorEvent_.merkleRoot, leaf_);
        require(isValidLeaf_ == true, "Invalid Merkle proof");

        mirrorEvent_.hasMirrored[_to][_chainId][_escrowId] = true;

        mirroredVotingEscrow.mirror_lock(_to, _chainId, _escrowId, _amount, _lockeEnd);

        emit Mirrored(_eventId, _to, _chainId, _escrowId, _lockeEnd, _amount);
    }

    function hasMirrored(
        uint _eventId,
        address _to,
        uint256 _chainId,
        uint256 _escrowId
    ) external view returns (bool) {
        return mirrorEvents[_eventId].hasMirrored[_to][_chainId][_escrowId];
    }

    function addMirrorEvent(bytes32 _merkleRoot) external onlyOwner {
        uint256 index_ = mirrorEvents.length;
        mirrorEvents.push();

        MirrorEvent storage newMirrorEvent_ = mirrorEvents[index_];
        newMirrorEvent_.merkleRoot = _merkleRoot;

        emit MirrorEventAdded(index_);
    }

    function pause() external onlyOwner whenNotPaused {
        _pause();
    }

    function unPause() external onlyOwner whenPaused {
        _unpause();
    }

}

File 2 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 4 of 7 : MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

File 5 of 7 : ExternalMulticall.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Address.sol";

abstract contract ExternalMulticall {

    struct CallData {
        address target;
        bytes data;
    }

    /**
    * @dev Receives and executes a batch of function calls on this contract.
    */
    function multicall(CallData[] calldata data) external payable returns (bytes[] memory results) {
        results = new bytes[](data.length);
        for (uint i = 0; i < data.length; i++) {
            results[i] = Address.functionCall(data[i].target, data[i].data);
        }
        return results;
    }
}

File 6 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

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) {
        return msg.data;
    }
}

File 7 of 7 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"contract IMirroredVotingEscrow","name":"_mirroredVotingEscrow","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"MirrorEventAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"eventId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"escrowId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mirrored","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"addMirrorEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eventId","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"uint256","name":"_escrowId","type":"uint256"}],"name":"hasMirrored","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mirrorEvents","outputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_chainId","type":"uint256"},{"internalType":"uint256","name":"_escrowId","type":"uint256"},{"internalType":"uint256","name":"_lockeEnd","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_eventId","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mirror_lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ExternalMulticall.CallData[]","name":"data","type":"tuple[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162002258380380620022588339818101604052810190620000379190620001bb565b620000576200004b620000c160201b60201c565b620000c960201b60201c565b60008060146101000a81548160ff0219169083151502179055508160018190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000282565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200019e816200024e565b92915050565b600081519050620001b58162000268565b92915050565b60008060408385031215620001cf57600080fd5b6000620001df85828601620001a4565b9250506020620001f2858286016200018d565b9150509250929050565b6000620002098262000224565b9050919050565b60006200021d82620001fc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620002598162000210565b81146200026557600080fd5b50565b620002738162000244565b81146200027f57600080fd5b50565b611fc680620002926000396000f3fe60806040526004361061009c5760003560e01c8063a94b70df11610064578063a94b70df14610162578063c1c5eee91461018b578063caa5c23f146101b4578063ce2afa58146101e4578063f2fde38b14610221578063f7b188a51461024a5761009c565b80635c975abb146100a1578063715018a6146100cc57806375f7c3bd146100e35780638456cb59146101205780638da5cb5b14610137575b600080fd5b3480156100ad57600080fd5b506100b6610261565b6040516100c39190611b24565b60405180910390f35b3480156100d857600080fd5b506100e1610277565b005b3480156100ef57600080fd5b5061010a60048036038101906101059190611516565b6102ff565b6040516101179190611b24565b60405180910390f35b34801561012c57600080fd5b506101356103c3565b005b34801561014357600080fd5b5061014c610491565b6040516101599190611a94565b60405180910390f35b34801561016e57600080fd5b50610189600480360381019061018491906113c5565b6104ba565b005b34801561019757600080fd5b506101b260048036038101906101ad91906114c4565b6108d2565b005b6101ce60048036038101906101c9919061147f565b6109fd565b6040516101db9190611b02565b60405180910390f35b3480156101f057600080fd5b5061020b600480360381019061020691906114ed565b610be6565b6040516102189190611b3f565b60405180910390f35b34801561022d57600080fd5b506102486004803603810190610243919061139c565b610c14565b005b34801561025657600080fd5b5061025f610d0c565b005b60008060149054906101000a900460ff16905090565b61027f610dd9565b73ffffffffffffffffffffffffffffffffffffffff1661029d610491565b73ffffffffffffffffffffffffffffffffffffffff16146102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea90611c3c565b60405180910390fd5b6102fd6000610de1565b565b60006003858154811061033b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff169050949350505050565b6103cb610dd9565b73ffffffffffffffffffffffffffffffffffffffff166103e9610491565b73ffffffffffffffffffffffffffffffffffffffff161461043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043690611c3c565b60405180910390fd5b610447610261565b15610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047e90611c1c565b60405180910390fd5b61048f610ea5565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104c2610261565b15610502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f990611c1c565b60405180910390fd5b6003805490508310610549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054090611bdc565b60405180910390fd5b60015487141561058e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058590611b9c565b60405180910390fd5b6000600384815481106105ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202019050600015158160010160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a8152602001908152602001600020600089815260200190815260200160002060009054906101000a900460ff16151514610691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068890611c9c565b60405180910390fd5b600089898989896040516020016106ac9594939291906119f2565b6040516020818303038152906040528051906020012090506000610716858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050846000015484610f48565b9050600115158115151461075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690611c7c565b60405180910390fd5b60018360010160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c815260200190815260200160002060008b815260200190815260200160002060006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633ad9b9678c8c8c8b8d6040518663ffffffff1660e01b815260040161083e959493929190611aaf565b600060405180830381600087803b15801561085857600080fd5b505af115801561086c573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff16867f6270a00201b82b0f7dd8ca5ba572e36cba2c00f8ab825d651e7c454de5d5f16f8c8c8c8c6040516108bd9493929190611cbc565b60405180910390a35050505050505050505050565b6108da610dd9565b73ffffffffffffffffffffffffffffffffffffffff166108f8610491565b73ffffffffffffffffffffffffffffffffffffffff161461094e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094590611c3c565b60405180910390fd5b600060038054905090506003600181600181540180825580915050039060005260206000209050506000600382815481106109b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202019050828160000181905550817f3f216d71ef77c5328e8ca06439256d6dce1da1f412392a6e45f210d0e608238860405160405180910390a2505050565b60608282905067ffffffffffffffff811115610a42577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a7557816020015b6060815260200190600190039081610a605790505b50905060005b83839050811015610bdf57610b88848483818110610ac2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610ad49190611d58565b6000016020810190610ae6919061139c565b858584818110610b1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002810190610b319190611d58565b8060200190610b409190611d01565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610f5f565b828281518110610bc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101819052508080610bd790611e7d565b915050610a7b565b5092915050565b60038181548110610bf657600080fd5b90600052602060002090600202016000915090508060000154905081565b610c1c610dd9565b73ffffffffffffffffffffffffffffffffffffffff16610c3a610491565b73ffffffffffffffffffffffffffffffffffffffff1614610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611c3c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf790611bbc565b60405180910390fd5b610d0981610de1565b50565b610d14610dd9565b73ffffffffffffffffffffffffffffffffffffffff16610d32610491565b73ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90611c3c565b60405180910390fd5b610d90610261565b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690611b7c565b60405180910390fd5b610dd7610fa9565b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610ead610261565b15610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490611c1c565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f31610dd9565b604051610f3e9190611a94565b60405180910390a1565b600082610f55858461104a565b1490509392505050565b6060610fa183836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250611123565b905092915050565b610fb1610261565b610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe790611b7c565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611033610dd9565b6040516110409190611a94565b60405180910390a1565b60008082905060005b8451811015611118576000858281518110611097577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508083116110d85782816040516020016110bb929190611a51565b604051602081830303815290604052805190602001209250611104565b80836040516020016110eb929190611a51565b6040516020818303038152906040528051906020012092505b50808061111090611e7d565b915050611053565b508091505092915050565b6060611132848460008561113b565b90509392505050565b606082471015611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117790611bfc565b60405180910390fd5b6111898561124f565b6111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90611c5c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111f19190611a7d565b60006040518083038185875af1925050503d806000811461122e576040519150601f19603f3d011682016040523d82523d6000602084013e611233565b606091505b5091509150611243828286611262565b92505050949350505050565b600080823b905060008111915050919050565b60608315611272578290506112c2565b6000835111156112855782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b99190611b5a565b60405180910390fd5b9392505050565b6000813590506112d881611f4b565b92915050565b60008083601f8401126112f057600080fd5b8235905067ffffffffffffffff81111561130957600080fd5b60208301915083602082028301111561132157600080fd5b9250929050565b60008083601f84011261133a57600080fd5b8235905067ffffffffffffffff81111561135357600080fd5b60208301915083602082028301111561136b57600080fd5b9250929050565b60008135905061138181611f62565b92915050565b60008135905061139681611f79565b92915050565b6000602082840312156113ae57600080fd5b60006113bc848285016112c9565b91505092915050565b60008060008060008060008060e0898b0312156113e157600080fd5b60006113ef8b828c016112c9565b98505060206114008b828c01611387565b97505060406114118b828c01611387565b96505060606114228b828c01611387565b95505060806114338b828c01611387565b94505060a06114448b828c01611387565b93505060c089013567ffffffffffffffff81111561146157600080fd5b61146d8b828c016112de565b92509250509295985092959890939650565b6000806020838503121561149257600080fd5b600083013567ffffffffffffffff8111156114ac57600080fd5b6114b885828601611328565b92509250509250929050565b6000602082840312156114d657600080fd5b60006114e484828501611372565b91505092915050565b6000602082840312156114ff57600080fd5b600061150d84828501611387565b91505092915050565b6000806000806080858703121561152c57600080fd5b600061153a87828801611387565b945050602061154b878288016112c9565b935050604061155c87828801611387565b925050606061156d87828801611387565b91505092959194509250565b6000611585838361165d565b905092915050565b61159681611df8565b82525050565b6115ad6115a882611df8565b611ec6565b82525050565b60006115be82611d8c565b6115c88185611dba565b9350836020820285016115da85611d7c565b8060005b8581101561161657848403895281516115f78582611579565b945061160283611dad565b925060208a019950506001810190506115de565b50829750879550505050505092915050565b61163181611e0a565b82525050565b61164081611e16565b82525050565b61165761165282611e16565b611ed8565b82525050565b600061166882611d97565b6116728185611dcb565b9350611682818560208601611e4a565b61168b81611f2d565b840191505092915050565b60006116a182611d97565b6116ab8185611ddc565b93506116bb818560208601611e4a565b80840191505092915050565b60006116d282611da2565b6116dc8185611de7565b93506116ec818560208601611e4a565b6116f581611f2d565b840191505092915050565b600061170d601483611de7565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b600061174d601f83611de7565b91507f43616e6e6f74206d6972726f72206c6f63616c20636861696e206c6f636b73006000830152602082019050919050565b600061178d602683611de7565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006117f3601783611de7565b91507f496e76616c6964206d6972726f72206576656e742069640000000000000000006000830152602082019050919050565b6000611833602683611de7565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611899601083611de7565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b60006118d9602083611de7565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000611919601d83611de7565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000611959601483611de7565b91507f496e76616c6964204d65726b6c652070726f6f660000000000000000000000006000830152602082019050919050565b6000611999601083611de7565b91507f416c7265616479204d6972726f726564000000000000000000000000000000006000830152602082019050919050565b6119d581611e40565b82525050565b6119ec6119e782611e40565b611ef4565b82525050565b60006119fe828861159c565b601482019150611a0e82876119db565b602082019150611a1e82866119db565b602082019150611a2e82856119db565b602082019150611a3e82846119db565b6020820191508190509695505050505050565b6000611a5d8285611646565b602082019150611a6d8284611646565b6020820191508190509392505050565b6000611a898284611696565b915081905092915050565b6000602082019050611aa9600083018461158d565b92915050565b600060a082019050611ac4600083018861158d565b611ad160208301876119cc565b611ade60408301866119cc565b611aeb60608301856119cc565b611af860808301846119cc565b9695505050505050565b60006020820190508181036000830152611b1c81846115b3565b905092915050565b6000602082019050611b396000830184611628565b92915050565b6000602082019050611b546000830184611637565b92915050565b60006020820190508181036000830152611b7481846116c7565b905092915050565b60006020820190508181036000830152611b9581611700565b9050919050565b60006020820190508181036000830152611bb581611740565b9050919050565b60006020820190508181036000830152611bd581611780565b9050919050565b60006020820190508181036000830152611bf5816117e6565b9050919050565b60006020820190508181036000830152611c1581611826565b9050919050565b60006020820190508181036000830152611c358161188c565b9050919050565b60006020820190508181036000830152611c55816118cc565b9050919050565b60006020820190508181036000830152611c758161190c565b9050919050565b60006020820190508181036000830152611c958161194c565b9050919050565b60006020820190508181036000830152611cb58161198c565b9050919050565b6000608082019050611cd160008301876119cc565b611cde60208301866119cc565b611ceb60408301856119cc565b611cf860608301846119cc565b95945050505050565b60008083356001602003843603038112611d1a57600080fd5b80840192508235915067ffffffffffffffff821115611d3857600080fd5b602083019250600182023603831315611d5057600080fd5b509250929050565b600082356001604003833603038112611d7057600080fd5b80830191505092915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611e0382611e20565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015611e68578082015181840152602081019050611e4d565b83811115611e77576000848401525b50505050565b6000611e8882611e40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ebb57611eba611efe565b5b600182019050919050565b6000611ed182611ee2565b9050919050565b6000819050919050565b6000611eed82611f3e565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b611f5481611df8565b8114611f5f57600080fd5b50565b611f6b81611e16565b8114611f7657600080fd5b50565b611f8281611e40565b8114611f8d57600080fd5b5056fea2646970667358221220ff60bc1fb31735fe2ee9429a105fdc5cca627b1788828dfde2e2760bf8409aa264736f6c63430008000033000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f

-----Decoded View---------------
Arg [0] : _chainId (uint256): 10
Arg [1] : _mirroredVotingEscrow (address): 0xAc8204a9d79CA87D192ea98A9381600642A66a5F

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 000000000000000000000000ac8204a9d79ca87d192ea98a9381600642a66a5f


Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.