Contract 0x1f6b96d2e7a5D70777D2A9c52215044FB3f40D37 3

Contract Overview

Balance:
0 ETH
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x69ef67f4b88f0f3a30068135db5f0bdf2b7bc16826064211a657c60c6c829147Recv104238382022-03-17 1:49:17197 days 23 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000028304923 ETH
0x8d593d1cd4a4b522472b3150be314c09c1ed8d802acba8ace20e32c0ba32b41ePost104151522022-03-16 18:06:11198 days 7 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.00001901717 ETH
0xdfbd5ff96a6d396225c55dca85e000dd5eb3dec9dbffc2665580346562b0b1c4Post104151212022-03-16 18:04:11198 days 7 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.00001914629 ETH
0xa20ece8dc763f77446a2c640f975f3063cfb4d1d186b4ba00bd0ef51d7c237d3Recv104150582022-03-16 18:02:11198 days 7 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000023153216 ETH
0xa75fba2d34375b68fa8927122b10afd567868795dd7d1b1b6af0edd4c3cf7b7dRecv104149262022-03-16 17:55:25198 days 7 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000025441736 ETH
0xa855cda625abc41ece492607e4da471d0f5646257ade04dd6a51bfb012c615c5Recv104142762022-03-16 17:14:06198 days 8 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000020851117 ETH
0x13c4a531d3498a45a20667b44b19bb8f23a2bfaa4f9bbe2293a29ba2242337b6Recv104024942022-03-16 4:55:38198 days 20 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000010336198 ETH
0x8f85b47225b9e4e4e5ef5858604ca112e4271154cce21307bed7abef0fedc9f4Recv104023132022-03-16 4:42:20198 days 20 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000010336351 ETH
0x5d66382a5b71c8434b4b375b3795b15f9f57b1a757f46c834e7630c4342d728aRecv104022432022-03-16 4:38:05198 days 20 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000010355325 ETH
0x3ad9b2621b9c99de8ccf230747ff1a12f7d9fbb0b48643c3448349fec3b3ce26Recv104021352022-03-16 4:30:05198 days 20 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000010355478 ETH
0x9ede11180aafbc1a2a86e6025f4e9dac90b81b7d8f3d70329e4ec8c34cc9dd29Recv104020912022-03-16 4:26:05198 days 21 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000010355325 ETH
0xd31ce65ad2beed93b17e1add669bc6c1da40d85bd3983075f57a09a5d846f7f3Recv104018712022-03-16 4:15:04198 days 21 hrs ago0xd8555a1aee6c342596afd983cd940fa4641d60f0 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000011010614 ETH
0xf0d5c99c4ef2050b355b6a9ec89c0139b846c5616d82d312f1c73e50bf8084eaAdd Chain104015172022-03-16 3:49:33198 days 21 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000008071365 ETH
0xa2afe81d940f6c43bce6f8c6ce0ccd4f784a9301ab6f18b564ee6f04e53a4471Add Chain104014952022-03-16 3:48:33198 days 21 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000008745864 ETH
0xbecca37d1d8ed0ff94d007ca27bd9c7c582c780691293aa9c239e03a4d9cbfc3Authorize Signer104014712022-03-16 3:46:33198 days 21 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH0.000007152967 ETH
0xe9c9237d2852cb83742298b8b6dd064fc750be23d7ea9e9c8cb75913b0635aa90x60806040103967932022-03-15 22:38:04199 days 2 hrs ago0x73570075092502472e4b61a7058df1a4a1db12f2 IN  Create: SystemMessenger0 ETH0.000175568115 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x69ef67f4b88f0f3a30068135db5f0bdf2b7bc16826064211a657c60c6c829147104238382022-03-17 1:49:17197 days 23 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
0x69ef67f4b88f0f3a30068135db5f0bdf2b7bc16826064211a657c60c6c829147104238382022-03-17 1:49:17197 days 23 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0x69ef67f4b88f0f3a30068135db5f0bdf2b7bc16826064211a657c60c6c829147104238382022-03-17 1:49:17197 days 23 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x69ef67f4b88f0f3a30068135db5f0bdf2b7bc16826064211a657c60c6c829147104238382022-03-17 1:49:17197 days 23 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x8d593d1cd4a4b522472b3150be314c09c1ed8d802acba8ace20e32c0ba32b41e104151522022-03-16 18:06:11198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0xdfbd5ff96a6d396225c55dca85e000dd5eb3dec9dbffc2665580346562b0b1c4104151212022-03-16 18:04:11198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0xa20ece8dc763f77446a2c640f975f3063cfb4d1d186b4ba00bd0ef51d7c237d3104150582022-03-16 18:02:11198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH
0xa20ece8dc763f77446a2c640f975f3063cfb4d1d186b4ba00bd0ef51d7c237d3104150582022-03-16 18:02:11198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0xa20ece8dc763f77446a2c640f975f3063cfb4d1d186b4ba00bd0ef51d7c237d3104150582022-03-16 18:02:11198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0xa75fba2d34375b68fa8927122b10afd567868795dd7d1b1b6af0edd4c3cf7b7d104149262022-03-16 17:55:25198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370 ETH
0xa75fba2d34375b68fa8927122b10afd567868795dd7d1b1b6af0edd4c3cf7b7d104149262022-03-16 17:55:25198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0xa75fba2d34375b68fa8927122b10afd567868795dd7d1b1b6af0edd4c3cf7b7d104149262022-03-16 17:55:25198 days 7 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0xa855cda625abc41ece492607e4da471d0f5646257ade04dd6a51bfb012c615c5104142762022-03-16 17:14:06198 days 8 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
0xa855cda625abc41ece492607e4da471d0f5646257ade04dd6a51bfb012c615c5104142762022-03-16 17:14:06198 days 8 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0xa855cda625abc41ece492607e4da471d0f5646257ade04dd6a51bfb012c615c5104142762022-03-16 17:14:06198 days 8 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x13c4a531d3498a45a20667b44b19bb8f23a2bfaa4f9bbe2293a29ba2242337b6104024942022-03-16 4:55:38198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
0x13c4a531d3498a45a20667b44b19bb8f23a2bfaa4f9bbe2293a29ba2242337b6104024942022-03-16 4:55:38198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0x13c4a531d3498a45a20667b44b19bb8f23a2bfaa4f9bbe2293a29ba2242337b6104024942022-03-16 4:55:38198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x8f85b47225b9e4e4e5ef5858604ca112e4271154cce21307bed7abef0fedc9f4104023132022-03-16 4:42:20198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
0x8f85b47225b9e4e4e5ef5858604ca112e4271154cce21307bed7abef0fedc9f4104023132022-03-16 4:42:20198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0x8f85b47225b9e4e4e5ef5858604ca112e4271154cce21307bed7abef0fedc9f4104023132022-03-16 4:42:20198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x5d66382a5b71c8434b4b375b3795b15f9f57b1a757f46c834e7630c4342d728a104022432022-03-16 4:38:05198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
0x5d66382a5b71c8434b4b375b3795b15f9f57b1a757f46c834e7630c4342d728a104022432022-03-16 4:38:05198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0xe842c91a5d2bce122d89497f171d81067255ad0d0 ETH
0x5d66382a5b71c8434b4b375b3795b15f9f57b1a757f46c834e7630c4342d728a104022432022-03-16 4:38:05198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d370x00000000000000000000000000000000000000010 ETH
0x3ad9b2621b9c99de8ccf230747ff1a12f7d9fbb0b48643c3448349fec3b3ce26104021352022-03-16 4:30:05198 days 20 hrs ago 0x1f6b96d2e7a5d70777d2a9c52215044fb3f40d37 0x3bf72348b92c1d6a794a3de46e93ba8e29e2b9c40 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SystemMessenger

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-03-15
*/

/*
   ____            __   __        __   _
  / __/__ __ ___  / /_ / /  ___  / /_ (_)__ __
 _\ \ / // // _ \/ __// _ \/ -_)/ __// / \ \ /
/___/ \_, //_//_/\__//_//_/\__/ \__//_/ /_\_\
     /___/

* Synthetix: SystemMessenger.sol
*
* Latest source (may be newer): https://github.com/Synthetixio/synthetix/blob/master/contracts/SystemMessenger.sol
* Docs: https://docs.synthetix.io/contracts/SystemMessenger
*
* Contract Dependencies: 
*	- IAddressResolver
*	- ISystemMessenger
*	- MixinResolver
*	- Owned
* Libraries: (none)
*
* MIT License
* ===========
*
* Copyright (c) 2022 Synthetix
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/



pragma solidity ^0.5.16;

// https://docs.synthetix.io/contracts/source/contracts/owned
contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) public {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}


// https://docs.synthetix.io/contracts/source/interfaces/iaddressresolver
interface IAddressResolver {
    function getAddress(bytes32 name) external view returns (address);

    function getSynth(bytes32 key) external view returns (address);

    function requireAndGetAddress(bytes32 name, string calldata reason) external view returns (address);
}


// https://docs.synthetix.io/contracts/source/interfaces/isynth
interface ISynth {
    // Views
    function currencyKey() external view returns (bytes32);

    function transferableSynths(address account) external view returns (uint);

    // Mutative functions
    function transferAndSettle(address to, uint value) external returns (bool);

    function transferFromAndSettle(
        address from,
        address to,
        uint value
    ) external returns (bool);

    // Restricted: used internally to Synthetix
    function burn(address account, uint amount) external;

    function issue(address account, uint amount) external;
}


// https://docs.synthetix.io/contracts/source/interfaces/iissuer
interface IIssuer {
    // Views
    function anySynthOrSNXRateIsInvalid() external view returns (bool anyRateInvalid);

    function availableCurrencyKeys() external view returns (bytes32[] memory);

    function availableSynthCount() external view returns (uint);

    function availableSynths(uint index) external view returns (ISynth);

    function canBurnSynths(address account) external view returns (bool);

    function collateral(address account) external view returns (uint);

    function collateralisationRatio(address issuer) external view returns (uint);

    function collateralisationRatioAndAnyRatesInvalid(address _issuer)
        external
        view
        returns (uint cratio, bool anyRateIsInvalid);

    function debtBalanceOf(address issuer, bytes32 currencyKey) external view returns (uint debtBalance);

    function issuanceRatio() external view returns (uint);

    function lastIssueEvent(address account) external view returns (uint);

    function maxIssuableSynths(address issuer) external view returns (uint maxIssuable);

    function minimumStakeTime() external view returns (uint);

    function remainingIssuableSynths(address issuer)
        external
        view
        returns (
            uint maxIssuable,
            uint alreadyIssued,
            uint totalSystemDebt
        );

    function synths(bytes32 currencyKey) external view returns (ISynth);

    function getSynths(bytes32[] calldata currencyKeys) external view returns (ISynth[] memory);

    function synthsByAddress(address synthAddress) external view returns (bytes32);

    function totalIssuedSynths(bytes32 currencyKey, bool excludeOtherCollateral) external view returns (uint);

    function transferableSynthetixAndAnyRateIsInvalid(address account, uint balance)
        external
        view
        returns (uint transferable, bool anyRateIsInvalid);

    // Restricted: used internally to Synthetix
    function issueSynths(address from, uint amount) external;

    function issueSynthsOnBehalf(
        address issueFor,
        address from,
        uint amount
    ) external;

    function issueMaxSynths(address from) external;

    function issueMaxSynthsOnBehalf(address issueFor, address from) external;

    function burnSynths(address from, uint amount) external;

    function burnSynthsOnBehalf(
        address burnForAddress,
        address from,
        uint amount
    ) external;

    function burnSynthsToTarget(address from) external;

    function burnSynthsToTargetOnBehalf(address burnForAddress, address from) external;

    function burnForRedemption(
        address deprecatedSynthProxy,
        address account,
        uint balance
    ) external;

    function teleportSynth(uint targetChainId, bytes32 currencyKey, address from, uint amount) external returns (bool);

    function receiveTeleportedSynth(bytes32 currencyKey, address from, uint amount) external returns (bool);

    function liquidateDelinquentAccount(
        address account,
        uint susdAmount,
        address liquidator
    ) external returns (uint totalRedeemed, uint amountToLiquidate);

    function setCurrentPeriodId(uint128 periodId) external;
}


// Inheritance


// Internal references


// https://docs.synthetix.io/contracts/source/contracts/addressresolver
contract AddressResolver is Owned, IAddressResolver {
    mapping(bytes32 => address) public repository;

    constructor(address _owner) public Owned(_owner) {}

    /* ========== RESTRICTED FUNCTIONS ========== */

    function importAddresses(bytes32[] calldata names, address[] calldata destinations) external onlyOwner {
        require(names.length == destinations.length, "Input lengths must match");

        for (uint i = 0; i < names.length; i++) {
            bytes32 name = names[i];
            address destination = destinations[i];
            repository[name] = destination;
            emit AddressImported(name, destination);
        }
    }

    /* ========= PUBLIC FUNCTIONS ========== */

    function rebuildCaches(MixinResolver[] calldata destinations) external {
        for (uint i = 0; i < destinations.length; i++) {
            destinations[i].rebuildCache();
        }
    }

    /* ========== VIEWS ========== */

    function areAddressesImported(bytes32[] calldata names, address[] calldata destinations) external view returns (bool) {
        for (uint i = 0; i < names.length; i++) {
            if (repository[names[i]] != destinations[i]) {
                return false;
            }
        }
        return true;
    }

    function getAddress(bytes32 name) external view returns (address) {
        return repository[name];
    }

    function requireAndGetAddress(bytes32 name, string calldata reason) external view returns (address) {
        address _foundAddress = repository[name];
        require(_foundAddress != address(0), reason);
        return _foundAddress;
    }

    function getSynth(bytes32 key) external view returns (address) {
        IIssuer issuer = IIssuer(repository["Issuer"]);
        require(address(issuer) != address(0), "Cannot find Issuer address");
        return address(issuer.synths(key));
    }

    /* ========== EVENTS ========== */

    event AddressImported(bytes32 name, address destination);
}


// Internal references


// https://docs.synthetix.io/contracts/source/contracts/mixinresolver
contract MixinResolver {
    AddressResolver public resolver;

    mapping(bytes32 => address) private addressCache;

    constructor(address _resolver) internal {
        resolver = AddressResolver(_resolver);
    }

    /* ========== INTERNAL FUNCTIONS ========== */

    function combineArrays(bytes32[] memory first, bytes32[] memory second)
        internal
        pure
        returns (bytes32[] memory combination)
    {
        combination = new bytes32[](first.length + second.length);

        for (uint i = 0; i < first.length; i++) {
            combination[i] = first[i];
        }

        for (uint j = 0; j < second.length; j++) {
            combination[first.length + j] = second[j];
        }
    }

    /* ========== PUBLIC FUNCTIONS ========== */

    // Note: this function is public not external in order for it to be overridden and invoked via super in subclasses
    function resolverAddressesRequired() public view returns (bytes32[] memory addresses) {}

    function rebuildCache() public {
        bytes32[] memory requiredAddresses = resolverAddressesRequired();
        // The resolver must call this function whenver it updates its state
        for (uint i = 0; i < requiredAddresses.length; i++) {
            bytes32 name = requiredAddresses[i];
            // Note: can only be invoked once the resolver has all the targets needed added
            address destination =
                resolver.requireAndGetAddress(name, string(abi.encodePacked("Resolver missing target: ", name)));
            addressCache[name] = destination;
            emit CacheUpdated(name, destination);
        }
    }

    /* ========== VIEWS ========== */

    function isResolverCached() external view returns (bool) {
        bytes32[] memory requiredAddresses = resolverAddressesRequired();
        for (uint i = 0; i < requiredAddresses.length; i++) {
            bytes32 name = requiredAddresses[i];
            // false if our cache is invalid or if the resolver doesn't have the required address
            if (resolver.getAddress(name) != addressCache[name] || addressCache[name] == address(0)) {
                return false;
            }
        }

        return true;
    }

    /* ========== INTERNAL FUNCTIONS ========== */

    function requireAndGetAddress(bytes32 name) internal view returns (address) {
        address _foundAddress = addressCache[name];
        require(_foundAddress != address(0), string(abi.encodePacked("Missing address: ", name)));
        return _foundAddress;
    }

    /* ========== EVENTS ========== */

    event CacheUpdated(bytes32 name, address destination);
}


// https://docs.synthetix.io/contracts/source/interfaces/isystemstatus
interface ISystemMessenger {
    // send a message only to one chain
    function post(
        uint targetChainId,
        bytes32 targetContract,
        bytes calldata data,
        uint32 gasLimit
    ) external;

    // send a copy of this message to all registered chains
    function broadcast(
        bytes32 targetContract,
        bytes calldata data,
        uint32 gasLimit
    ) external;
    
    // called by relayer to finalize message sent cross-chain
    function recv(
        uint srcChainId,
        uint srcNonce,
        bytes32 targetContract,
        bytes calldata data,
        uint32 gasLimit,
        bytes calldata sigs
    ) external;

    function addChain(uint chainId, address messenger) external;
    function removeChain(uint chainId) external;

    function authorizeSigner(address signer) external;
    function revokeSigner(address signer) external;

    function setRequiredSignatures(uint count) external;
}


// Inheritance


// https://docs.synthetix.io/contracts/source/contracts/systemstatus
contract SystemMessenger is Owned, MixinResolver, ISystemMessenger {

    bytes32 public constant CONTRACT_NAME = "SystemMessenger";

    uint[] public activeChains;

    mapping(uint => address) public messengerAddresses;
    mapping(uint => uint) public outgoingNonces;
    mapping(uint => uint) public incomingNonces;

    mapping(address => bool) public signers;
    uint public requiredSignatures;

    constructor(address _owner, address _resolver) public Owned(_owner) MixinResolver(_resolver) {
        requiredSignatures = 1;
    }

    /* ========== VIEWS ========== */
    function getMessageHash(
        uint srcChainId,
        uint srcNonce,
        bytes32 targetContract,
        bytes memory data,
        uint32 gasLimit
    ) public pure returns (bytes32) {
        return keccak256(
            abi.encodePacked(
                bytes32("Synthetixv2x"),
                srcChainId,
                srcNonce,
                targetContract, 
                data, 
                gasLimit
            )
        );
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    // send a message only to one chain
    function post(
        uint targetChainId,
        bytes32 targetContract,
        bytes memory data,
        uint32 gasLimit
    ) public onlyAuthorizedMessenger {
        emit MessagePosted(targetChainId, outgoingNonces[targetChainId]++, targetContract, data, gasLimit);
    }

    // sends a copy of this message to all chains synthetix is deployed to
    function broadcast(
        bytes32 targetContract,
        bytes memory data,
        uint32 gasLimit
    ) public onlyAuthorizedMessenger {
        for (uint i = 0;i < activeChains.length;i++) {
            post(activeChains[i], targetContract, data, gasLimit);
        }
    }

    function recv(
        uint srcChainId,
        uint srcNonce,
        bytes32 targetContract,
        bytes calldata data,
        uint32 gasLimit,
        bytes calldata sigs
    ) external {
        require(incomingNonces[srcChainId]++ == srcNonce, "can only submit next message nonce");

        bytes32 signHash = keccak256(
            abi.encodePacked(
                "\x19Ethereum Signed Message:\n32",
                getMessageHash(srcChainId, srcNonce, targetContract, data, gasLimit)
            )
        );

        require(validateSignatures(signHash, sigs) >= requiredSignatures, "invalid signature blob");

        // not using `requireAndGetAddress` becuase the message ID would be blocked otherwise
        // when `target.call` is executed below, it will simply fail the internal call without blocking the incoming nonce increment
        address target = resolver.getAddress(targetContract);

        (bool success, bytes memory returned) = target.call(data);

        emit MessageProcessed(srcChainId, srcNonce, targetContract, data, gasLimit, success, returned);
    }

    function addChain(uint chainId, address messenger) external onlyOwnerOrSelf {
        messengerAddresses[chainId] = messenger;
        activeChains.push(chainId);
    }

    function removeChain(uint chainId) external onlyOwnerOrSelf {
        messengerAddresses[chainId] = address(0);
        incomingNonces[chainId] = 0;
        outgoingNonces[chainId] = 0;
        
        for (uint i = 0;i < activeChains.length;i++) {
            if (activeChains[i] == chainId) {
                activeChains[i] = activeChains[activeChains.length - 1];

                activeChains.pop();
                return;
            }
        }

        revert("could not find specified chain id");
    }

    function authorizeSigner(address signer) external onlyOwnerOrSelf {
        signers[signer] = true;
    }

    function revokeSigner(address signer) external onlyOwnerOrSelf {
        signers[signer] = false;
    }

    function setRequiredSignatures(uint count) external onlyOwnerOrSelf {
        requiredSignatures = count;
    }

    /* ========== INTERNAL FUNCTIONS ========= */

    function validateSignatures(bytes32 signHash, bytes memory signatures) internal view returns (uint) {
        if (signatures.length == 0) {
            return 0;
        }

        address lastSigner = address(0);

        uint signatureCount = signatures.length / 65;

        for (uint256 i = 0; i < signatureCount; i++) {
            address signer = recoverSigner(signHash, signatures, i);

            if (signer <= lastSigner) {
                return 0; // Signers must be different
            }

            lastSigner = signer;

            if (!signers[signer]) {
                return 0;
            }
        }

        return signatureCount;
    }

    /**
    * copied exactly from https://github.com/argentlabs/argent-contracts/blob/develop/contracts/modules/common/Utils.sol
    * @notice Helper method to recover the signer at a given position from a list of concatenated signatures.
    * @param _signedHash The signed hash
    * @param _signatures The concatenated signatures.
    * @param _index The index of the signature to recover.
    */
    function recoverSigner(bytes32 _signedHash, bytes memory _signatures, uint _index) internal pure returns (address) {
        uint8 v;
        bytes32 r;
        bytes32 s;
        // we jump 32 (0x20) as the first slot of bytes contains the length
        // we jump 65 (0x41) per signature
        // for v we load 32 bytes ending with v (the first 31 come from s) then apply a mask
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(_signatures, add(0x20,mul(0x41,_index))))
            s := mload(add(_signatures, add(0x40,mul(0x41,_index))))
            v := and(mload(add(_signatures, add(0x41,mul(0x41,_index)))), 0xff)
        }
        require(v == 27 || v == 28, "Utils: bad v value in signature");

        address recoveredAddress = ecrecover(_signedHash, v, r, s);
        require(recoveredAddress != address(0), "Utils: ecrecover returned 0");
        return recoveredAddress;
    }

    /* ========== MODIFIERS ======== */
    modifier onlyAuthorizedMessenger {
        require(msg.sender == resolver.getAddress("Issuer") || msg.sender == owner, "Only authorized senders can call");
        _;
    }

    modifier onlyOwnerOrSelf {
        require(msg.sender == address(this) || msg.sender == owner, "Only owner or self can call");
        _;
    }

    /* ========== EVENTS ========== */
    event MessagePosted(uint indexed targetChainId, uint indexed nonce, bytes32 indexed targetContract, bytes data, uint32 gasLimit);
    event MessageProcessed(uint indexed srcChainId, uint indexed nonce, bytes32 indexed targetContract, bytes data, uint32 gasLimit, bool success, bytes resultData);
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_resolver","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":false,"internalType":"address","name":"destination","type":"address"}],"name":"CacheUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"targetChainId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"MessagePosted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"srcChainId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint32","name":"gasLimit","type":"uint32"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"resultData","type":"bytes"}],"name":"MessageProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"constant":true,"inputs":[],"name":"CONTRACT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activeChains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"messenger","type":"address"}],"name":"addChain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"authorizeSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"broadcast","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"uint256","name":"srcNonce","type":"uint256"},{"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"incomingNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isResolverCached","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"messengerAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outgoingNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"targetChainId","type":"uint256"},{"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"post","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"rebuildCache","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"srcChainId","type":"uint256"},{"internalType":"uint256","name":"srcNonce","type":"uint256"},{"internalType":"bytes32","name":"targetContract","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"bytes","name":"sigs","type":"bytes"}],"name":"recv","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"name":"removeChain","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requiredSignatures","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"resolver","outputs":[{"internalType":"contract AddressResolver","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"resolverAddressesRequired","outputs":[{"internalType":"bytes32[]","name":"addresses","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"revokeSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"setRequiredSignatures","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"signers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50604051611a29380380611a298339818101604052604081101561003357600080fd5b50805160209091015180826001600160a01b038116610099576040805162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a150600280546001600160a01b0319166001600160a01b039290921691909117905550506001600955611901806101286000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806379ba5097116100c357806398ada2521161007c57806398ada252146105f0578063bfe51c101461060d578063c34b44a014610633578063cbf50bb614610659578063fcaa63c114610676578063fe5495121461069357610158565b806379ba5097146105465780637d2b9cc01461054e578063823716671461056b578063899ffef4146105885780638d068043146105e05780638da5cb5b146105e857610158565b80635303942b116101155780635303942b1461040b57806353a47bb71461043757806358abb6621461043f578063614d08f814610510578063736c0d5b14610518578063741853601461053e57610158565b806304f3bcec1461015d5780630c1d2f39146101815780630c6bc705146102365780631627540c146103115780632af64bd314610337578063521700cc14610353575b600080fd5b6101656106b0565b604080516001600160a01b039092168252519081900360200190f35b6102346004803603606081101561019757600080fd5b81359190810190604081016020820135600160201b8111156101b857600080fd5b8201836020820111156101ca57600080fd5b803590602001918460018302840111600160201b831117156101eb57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff1691506106bf9050565b005b610234600480360360c081101561024c57600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561027957600080fd5b82018360208201111561028b57600080fd5b803590602001918460018302840111600160201b831117156102ac57600080fd5b9193909263ffffffff83351692604081019060200135600160201b8111156102d357600080fd5b8201836020820111156102e557600080fd5b803590602001918460018302840111600160201b8311171561030657600080fd5b5090925090506107ee565b6102346004803603602081101561032757600080fd5b50356001600160a01b0316610b4d565b61033f610ba9565b604080519115158252519081900360200190f35b6102346004803603608081101561036957600080fd5b813591602081013591810190606081016040820135600160201b81111561038f57600080fd5b8201836020820111156103a157600080fd5b803590602001918460018302840111600160201b831117156103c257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff169150610cb49050565b6102346004803603604081101561042157600080fd5b50803590602001356001600160a01b0316610e7c565b610165610f31565b6104fe600480360360a081101561045557600080fd5b81359160208101359160408201359190810190608081016060820135600160201b81111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460018302840111600160201b831117156104b557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff169150610f409050565b60408051918252519081900360200190f35b6104fe611001565b61033f6004803603602081101561052e57600080fd5b50356001600160a01b0316611017565b61023461102c565b6102346111f4565b6102346004803603602081101561056457600080fd5b50356112b0565b6104fe6004803603602081101561058157600080fd5b503561130c565b61059061131e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105cc5781810151838201526020016105b4565b505050509050019250505060405180910390f35b6104fe611323565b610165611329565b6104fe6004803603602081101561060657600080fd5b5035611338565b6102346004803603602081101561062357600080fd5b50356001600160a01b031661134a565b6102346004803603602081101561064957600080fd5b50356001600160a01b03166113c5565b6102346004803603602081101561066f57600080fd5b503561143d565b6104fe6004803603602081101561068c57600080fd5b5035611591565b610165600480360360208110156106a957600080fd5b50356115af565b6002546001600160a01b031681565b600254604080516321f8a72160e01b81526524b9b9bab2b960d11b600482015290516001600160a01b03909216916321f8a72191602480820192602092909190829003018186803b15801561071357600080fd5b505afa158015610727573d6000803e3d6000fd5b505050506040513d602081101561073d57600080fd5b50516001600160a01b031633148061075f57506000546001600160a01b031633145b6107b0576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c7920617574686f72697a65642073656e646572732063616e2063616c6c604482015290519081900360640190fd5b60005b6004548110156107e8576107e0600482815481106107cd57fe5b9060005260206000200154858585610cb4565b6001016107b3565b50505050565b600088815260076020526040902080546001810190915587146108425760405162461bcd60e51b815260040180806020018281038252602281526020018061185c6022913960400191505060405180910390fd5b600061088889898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250610f40915050565b60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182815260200191505060405160208183030381529060405280519060200120905060095461091b8285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115ca92505050565b1015610967576040805162461bcd60e51b815260206004820152601660248201527534b73b30b634b21039b4b3b730ba3ab93290313637b160511b604482015290519081900360640190fd5b600254604080516321f8a72160e01b8152600481018a905290516000926001600160a01b0316916321f8a721916024808301926020929190829003018186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d60208110156109dd57600080fd5b50516040519091506000906060906001600160a01b038416908a908a90808383808284376040519201945060009350909150508083038183865af19150503d8060008114610a47576040519150601f19603f3d011682016040523d82523d6000602084013e610a4c565b606091505b5091509150898b8d7f25a1115e3df032d0edabbe51c74a1f48854849886e9b62ac945e892dcfff47298c8c8c888860405180806020018563ffffffff1663ffffffff168152602001841515151581526020018060200183810383528888828181526020019250808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b83811015610b00578181015183820152602001610ae8565b50505050905090810190601f168015610b2d5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a4505050505050505050505050565b610b5561166c565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b60006060610bb561131e565b905060005b8151811015610caa576000828281518110610bd157fe5b6020908102919091018101516000818152600383526040908190205460025482516321f8a72160e01b81526004810185905292519395506001600160a01b03918216949116926321f8a721926024808201939291829003018186803b158015610c3957600080fd5b505afa158015610c4d573d6000803e3d6000fd5b505050506040513d6020811015610c6357600080fd5b50516001600160a01b0316141580610c9057506000818152600360205260409020546001600160a01b0316155b15610ca15760009350505050610cb1565b50600101610bba565b5060019150505b90565b600254604080516321f8a72160e01b81526524b9b9bab2b960d11b600482015290516001600160a01b03909216916321f8a72191602480820192602092909190829003018186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d6020811015610d3257600080fd5b50516001600160a01b0316331480610d5457506000546001600160a01b031633145b610da5576040805162461bcd60e51b815260206004820181905260248201527f4f6e6c7920617574686f72697a65642073656e646572732063616e2063616c6c604482015290519081900360640190fd5b8260066000868152602001908152602001600020600081548092919060010191905055857f4152144c621b4a550fb00c63494a7b9d5905054a19d6373e0dda762ec20265b7858560405180806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015610e3b578181015183820152602001610e23565b50505050905090810190601f168015610e685780820380516001836020036101000a031916815260200191505b50935050505060405180910390a450505050565b33301480610e9457506000546001600160a01b031633145b610ed3576040805162461bcd60e51b815260206004820152601b60248201526000805160206118ad833981519152604482015290519081900360640190fd5b600082815260056020526040812080546001600160a01b0319166001600160a01b0393909316929092179091556004805460018101825591527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0155565b6001546001600160a01b031681565b60006b0a6f2dce8d0cae8d2f0ec64f60a31b86868686866040516020018087815260200186815260200185815260200184815260200183805190602001908083835b60208310610fa15780518252601f199092019160209182019101610f82565b6001836020036101000a0380198251168184511680821785525050505050509050018263ffffffff1663ffffffff1660e01b8152600401965050505050505060405160208183030381529060405280519060200120905095945050505050565b6e29bcb9ba32b6a6b2b9b9b2b733b2b960891b81565b60086020526000908152604090205460ff1681565b606061103661131e565b905060005b81518110156111f057600082828151811061105257fe5b602090810291909101810151600254604080517f5265736f6c766572206d697373696e67207461726765743a2000000000000000818601526039808201859052825180830390910181526059820180845263dacb2d0160e01b9052605d8201858152607d83019384528151609d84015281519597506000966001600160a01b039095169563dacb2d01958995939492939260bd0191908501908083838c5b838110156111085781810151838201526020016110f0565b50505050905090810190601f1680156111355780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561115357600080fd5b505afa158015611167573d6000803e3d6000fd5b505050506040513d602081101561117d57600080fd5b505160008381526003602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582518681529182015281519293507f88a93678a3692f6789d9546fc621bf7234b101ddb7d4fe479455112831b8aa68929081900390910190a1505060010161103b565b5050565b6001546001600160a01b0316331461123d5760405162461bcd60e51b81526004018080602001828103825260358152602001806118066035913960400191505060405180910390fd5b600054600154604080516001600160a01b03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b333014806112c857506000546001600160a01b031633145b611307576040805162461bcd60e51b815260206004820152601b60248201526000805160206118ad833981519152604482015290519081900360640190fd5b600955565b60076020526000908152604090205481565b606090565b60095481565b6000546001600160a01b031681565b60066020526000908152604090205481565b3330148061136257506000546001600160a01b031633145b6113a1576040805162461bcd60e51b815260206004820152601b60248201526000805160206118ad833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b333014806113dd57506000546001600160a01b031633145b61141c576040805162461bcd60e51b815260206004820152601b60248201526000805160206118ad833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600860205260409020805460ff19169055565b3330148061145557506000546001600160a01b031633145b611494576040805162461bcd60e51b815260206004820152601b60248201526000805160206118ad833981519152604482015290519081900360640190fd5b600081815260056020908152604080832080546001600160a01b031916905560078252808320839055600690915281208190555b6004548110156115565781600482815481106114e057fe5b9060005260206000200154141561154e5760048054600019810190811061150357fe5b90600052602060002001546004828154811061151b57fe5b600091825260209091200155600480548061153257fe5b600190038181906000526020600020016000905590555061158e565b6001016114c8565b5060405162461bcd60e51b815260040180806020018281038252602181526020018061183b6021913960400191505060405180910390fd5b50565b6004818154811061159e57fe5b600091825260209091200154905081565b6005602052600090815260409020546001600160a01b031681565b60008151600014156115de57506000611666565b815160009060419004815b818110156116615760006115fe8787846116b7565b9050836001600160a01b0316816001600160a01b031611611626576000945050505050611666565b6001600160a01b038116600090815260086020526040902054909350839060ff16611658576000945050505050611666565b506001016115e9565b509150505b92915050565b6000546001600160a01b031633146116b55760405162461bcd60e51b815260040180806020018281038252602f81526020018061187e602f913960400191505060405180910390fd5b565b6041808202830160208101516040820151919092015160009260ff9190911691601b8314806116e957508260ff16601c145b61173a576040805162461bcd60e51b815260206004820152601f60248201527f5574696c733a2062616420762076616c756520696e207369676e617475726500604482015290519081900360640190fd5b60408051600080825260208083018085528b905260ff87168385015260608301869052608083018590529251909260019260a080820193601f1981019281900390910190855afa158015611792573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117fa576040805162461bcd60e51b815260206004820152601b60248201527f5574696c733a2065637265636f7665722072657475726e656420300000000000604482015290519081900360640190fd5b97965050505050505056fe596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e657273686970636f756c64206e6f742066696e642073706563696669656420636861696e20696463616e206f6e6c79207375626d6974206e657874206d657373616765206e6f6e63654f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e4f6e6c79206f776e6572206f722073656c662063616e2063616c6c0000000000a265627a7a7231582052e6083c9a347141d3295944ab3165e7901931267a3cf165ca6eed03581fd5a664736f6c6343000510003200000000000000000000000073570075092502472e4b61a7058df1a4a1db12f2000000000000000000000000e842c91a5d2bce122d89497f171d81067255ad0d

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

00000000000000000000000073570075092502472e4b61a7058df1a4a1db12f2000000000000000000000000e842c91a5d2bce122d89497f171d81067255ad0d

-----Decoded View---------------
Arg [0] : _owner (address): 0x73570075092502472e4b61a7058df1a4a1db12f2
Arg [1] : _resolver (address): 0xe842c91a5d2bce122d89497f171d81067255ad0d

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000073570075092502472e4b61a7058df1a4a1db12f2
Arg [1] : 000000000000000000000000e842c91a5d2bce122d89497f171d81067255ad0d


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading