Contract 0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016 8

 
Rebrand announcement. xDai Chain was rebranded and is now known as Gnosis Chain.
 
Txn Hash
Method
Block
From
To
Value
0x78499a40f8638943ba2b5b3353da84d45f351fe15c65a00a514d19fda8b8ed9dRelay Tokens(pending)2023-02-04 0:09:0312 mins ago0xc3c1e8a210df38280f2d02143b4bb58d5a4adbfb IN Gnosis Chain: xDai Bridge0 Ether(Pending)(Pending)
0xf115ab6b89082d092664b292c1d9c91685d0891d0ed93180a78f49e41bfe7c98Execute Signatur...(pending)2023-02-02 5:03:241 day 19 hrs ago0xe941059496356d59adf6c94325fb0a7d10abd736 IN Gnosis Chain: xDai Bridge0 Ether(Pending)(Pending)
0x0cc971c9fccc9107fabd3f04fa767fbc83744a0f4d6050f7bd05980e842bd48cExecute Signatur...(pending)2023-01-29 2:12:195 days 22 hrs ago0x32089aa1b87c13c8c6e5d77437e58351657b094f IN Gnosis Chain: xDai Bridge0 Ether(Pending)(Pending)
0x0f8c8375a9683849a1c370e3b3584e23e7a9e73c33e076efa6eb31b148b469f4Execute Signatur...165499132023-02-03 18:00:596 hrs 20 mins ago0x7378319a4607ffadc23ffe437e1c27838e88ed5a IN  Gnosis Chain: xDai Bridge0 Ether0.00857342 53.29576349
0x7438fc0ca5474ec84abdbb0a801193be1d1f83cdcee58a1db79d5dbce87571e3Relay Tokens165473842023-02-03 9:33:4714 hrs 47 mins ago0xa03b369563b177b8a7ce38701096c26270f47690 IN  Gnosis Chain: xDai Bridge0 Ether0.00138394 18.55557547
0x92aab0a6de5fc417778de1fcffb7a2d535d06d37e5db37f8c12104bdf922d075Execute Signatur...165445692023-02-03 0:04:231 day 16 mins agoENS Name cryptob3.eth IN  Gnosis Chain: xDai Bridge0 Ether0.00504537 28.34848578
0xdf1dd3589a8a9bdbe88d04e5a91e5bbb2c645d245b95c71e10ef2f2307ece2f0Relay Tokens165435102023-02-02 20:30:591 day 3 hrs ago0xc132b931877af2eb687d150811adaa3f0c421f3f IN  Gnosis Chain: xDai Bridge0 Ether0.00212554 36.99167597
0x40874bf87529605b1d764362d0a99c866837f84c79f1b9457b8164470615e811Execute Signatur...165434452023-02-02 20:17:591 day 4 hrs ago0xb8b5678fb2ed1df5f8e04dd418d255796b97e6c1 IN  Gnosis Chain: xDai Bridge0 Ether0.00569925 35.42352305
0xd980aba1ef01c888c484547d7eebcd8837cbca4f3c3b02264e791debb764f765Execute Signatur...165434242023-02-02 20:13:471 day 4 hrs ago0x943ffac61c788fd4a0914b69c797e27aa0fc1b25 IN  Gnosis Chain: xDai Bridge0 Ether0.00491801 34.20588253
0xf2cef524bec7b49a5bfe488a4d23cd43d1ee4d83fa5f57ff65ecbb7108318adbExecute Signatur...165424712023-02-02 17:01:111 day 7 hrs ago0x692d2f20aeda895d3838d236c10e6e9da310ad7b IN  Gnosis Chain: xDai Bridge0 Ether0.00944511 53.05855686
0x5df55bbdf6f436581c8353aecb3705921bfede7cb826131b772e5905cef11834Execute Signatur...165369562023-02-01 22:29:472 days 1 hr agoENS Name shawnc.eth IN  Gnosis Chain: xDai Bridge0 Ether0.00578721 35.97288673
0x3f0247d2e1d79ff320bc934e17fc0687cc0f177961b3e49cb970e9b12d968064Execute Signatur...165365252023-02-01 21:03:112 days 3 hrs ago0x1861974f32eacdcced0f81b0f8eccfed58153a9d IN  Gnosis Chain: xDai Bridge0 Ether0.00648183 45.08630801
0x7a83b35c5351beec9c271f661c699525076a9655764283f8394fdc1cdd12d411Execute Signatur...165349932023-02-01 15:55:112 days 8 hrs ago0xed8db37778804a913670d9367aaf4f043aad938b IN  Gnosis Chain: xDai Bridge0 Ether0.00363161 22.57218722
0x2ff77345bd53247df0d0825507089bdf3df3580d9860b915f1fd818e3b19b88fExecute Signatur...165349532023-02-01 15:47:112 days 8 hrs ago0x1925c9f810c8e2a1b0db1dd9642380019a6a21cf IN  Gnosis Chain: xDai Bridge0 Ether0.00294785 20.49781976
0x2ca34a49b0676dce87a9633dafd7d1e8ba2218eafc755daef5f3ad511bd9582bRelay Tokens165343872023-02-01 13:53:232 days 10 hrs ago0xe90803a2c1c01abb9da36e46c5fcc47dbc462197 IN  Gnosis Chain: xDai Bridge0 Ether0.00099424 17.29963541
0x99c4245236a4fa20fd355279c718628d06ffb3a990bf76dac87cda2171a831d0Execute Signatur...165343592023-02-01 13:47:472 days 10 hrs ago0x5a227e2919a49f9d4698e9fd2b318efcd0f16bda IN  Gnosis Chain: xDai Bridge0 Ether0.00310366 19.29647655
0xdf4a87f9ef0182816fda6361f903ce8211935b73b25d504bff6f9526fdc4a34aExecute Signatur...165340672023-02-01 12:48:472 days 11 hrs ago0xb51aef7030e1cb6d9d1b2c7dddf1832592c32919 IN  Gnosis Chain: xDai Bridge0 Ether0.0024816 15.42205479
0x3eddc9fa21e402b4568df81fe086edc9c884083eb26f45f7a26eaf6f5f41015fExecute Signatur...165339612023-02-01 12:27:232 days 11 hrs ago0xec637985e0afe64700faab8758b1119125175cee IN  Gnosis Chain: xDai Bridge0 Ether0.00255661 15.88937534
0xef4f2bf1576a06c2e09b9bb110e86352693150971dea2f952d71904a5bd3c774Relay Tokens165338942023-02-01 12:13:352 days 12 hrs ago0x69a4066e56bb1f020652931abf629b309692fb8c IN  Gnosis Chain: xDai Bridge0 Ether0.00107312 14.39050133
0x1bfff7b5d5fa655afa0d180b830d847440939f20caef4fdc614bf1fd9acd854aExecute Signatur...165330302023-02-01 9:19:472 days 15 hrs ago0x98fdc482fccc0f8876a80e4d22940b9a3b251eac IN  Gnosis Chain: xDai Bridge0 Ether0.00240382 16.71912332
0x0073ef5c67d402e8b21a3bc50223e9d65532a320b5b3a9fc31dbe2faca9849fdExecute Signatur...165320992023-02-01 6:12:232 days 18 hrs ago0x355382c41debac9ff3161eaa37472e8efeb0db6a IN  Gnosis Chain: xDai Bridge0 Ether0.00220315 15.32087983
0xb502d26a27ef1fb7cb10d4b154eac734f1f6c9951c610d263d34e88e67612ca4Execute Signatur...165318972023-02-01 5:31:232 days 18 hrs ago0xa0f2e2f7b3ab58e3e52b74f08d94ae52778d46df IN  Gnosis Chain: xDai Bridge0 Ether0.00214141 14.89277531
0x226287844d4e61337d93b2431e2c0297682f5936080628fe05485b6e82d807ecExecute Signatur...165318022023-02-01 5:12:232 days 19 hrs ago0x5ba323cc3e4b01ded640fc78c8948dcfb8f298cd IN  Gnosis Chain: xDai Bridge0 Ether0.00195332 13.58466516
0xb8e32ec1fb57a682ba73dd548c5110dcceaa810df8f80125ecffdcd1abfe9450Execute Signatur...165315042023-02-01 4:12:232 days 20 hrs ago0x8713072927592de88fa82ef4649b404bffbe88ad IN  Gnosis Chain: xDai Bridge0 Ether0.00239528 16.65836442
0xe5622e889dfb4d5f8c95817ff6bd6ad22849b9a6af884185e5319583df18bd28Execute Signatur...165314872023-02-01 4:08:592 days 20 hrs ago0x8713072927592de88fa82ef4649b404bffbe88ad IN  Gnosis Chain: xDai Bridge0 Ether0.00227323 15.81218338
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0x7800bb9e24777558d0a96c41fd6a7068c707d08091a5f64161d59c816bc63798111045332020-10-22 7:04:38834 days 17 hrs ago 0x0a1820f0ff7dc9fce0a4f0b589ee14ddae88233c Gnosis Chain: xDai Bridge0.052255 Ether
0x183aa6557a6a831d7b2a5f9b188b5e4e70898a27e9b04a586f67c63900638313111042182020-10-22 5:54:48834 days 18 hrs ago 0x0a1820f0ff7dc9fce0a4f0b589ee14ddae88233c Gnosis Chain: xDai Bridge0.016112 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EternalStorageProxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-10-18
*/

pragma solidity 0.4.24;

// File: contracts/upgradeability/EternalStorage.sol

/**
 * @title EternalStorage
 * @dev This contract holds all the necessary state variables to carry out the storage of any contract.
 */
contract EternalStorage {

    mapping(bytes32 => uint256) internal uintStorage;
    mapping(bytes32 => string) internal stringStorage;
    mapping(bytes32 => address) internal addressStorage;
    mapping(bytes32 => bytes) internal bytesStorage;
    mapping(bytes32 => bool) internal boolStorage;
    mapping(bytes32 => int256) internal intStorage;

}

// File: contracts/upgradeability/UpgradeabilityOwnerStorage.sol

/**
 * @title UpgradeabilityOwnerStorage
 * @dev This contract keeps track of the upgradeability owner
 */
contract UpgradeabilityOwnerStorage {
    // Owner of the contract
    address private _upgradeabilityOwner;

    /**
    * @dev Tells the address of the owner
    * @return the address of the owner
    */
    function upgradeabilityOwner() public view returns (address) {
        return _upgradeabilityOwner;
    }

    /**
    * @dev Sets the address of the owner
    */
    function setUpgradeabilityOwner(address newUpgradeabilityOwner) internal {
        _upgradeabilityOwner = newUpgradeabilityOwner;
    }
}

// File: contracts/upgradeability/Proxy.sol

/**
 * @title Proxy
 * @dev Gives the possibility to delegate any call to a foreign implementation.
 */
contract Proxy {

  /**
  * @dev Tells the address of the implementation where every call will be delegated.
  * @return address of the implementation to which it will be delegated
  */
    function implementation() public view returns (address);

  /**
  * @dev Fallback function allowing to perform a delegatecall to the given implementation.
  * This function will return whatever the implementation call returns
  */
    function () payable public {
        address _impl = implementation();
        require(_impl != address(0));
        assembly {
            /*
                0x40 is the "free memory slot", meaning a pointer to next slot of empty memory. mload(0x40)
                loads the data in the free memory slot, so `ptr` is a pointer to the next slot of empty
                memory. It's needed because we're going to write the return data of delegatecall to the
                free memory slot.
            */
            let ptr := mload(0x40)
            /*
                `calldatacopy` is copy calldatasize bytes from calldata
                First argument is the destination to which data is copied(ptr)
                Second argument specifies the start position of the copied data.
                    Since calldata is sort of its own unique location in memory,
                    0 doesn't refer to 0 in memory or 0 in storage - it just refers to the zeroth byte of calldata.
                    That's always going to be the zeroth byte of the function selector.
                Third argument, calldatasize, specifies how much data will be copied.
                    calldata is naturally calldatasize bytes long (same thing as msg.data.length)
            */
            calldatacopy(ptr, 0, calldatasize)
            /*
                delegatecall params explained:
                gas: the amount of gas to provide for the call. `gas` is an Opcode that gives
                    us the amount of gas still available to execution

                _impl: address of the contract to delegate to

                ptr: to pass copied data

                calldatasize: loads the size of `bytes memory data`, same as msg.data.length

                0, 0: These are for the `out` and `outsize` params. Because the output could be dynamic,
                        these are set to 0, 0 so the output data will not be written to memory. The output
                        data will be read using `returndatasize` and `returdatacopy` instead.

                result: This will be 0 if the call fails and 1 if it succeeds
            */
            let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0)
            /*

            */
            /*
                ptr current points to the value stored at 0x40,
                because we assigned it like ptr := mload(0x40).
                Because we use 0x40 as a free memory pointer,
                we want to make sure that the next time we want to allocate memory,
                we aren't overwriting anything important.
                So, by adding ptr and returndatasize,
                we get a memory location beyond the end of the data we will be copying to ptr.
                We place this in at 0x40, and any reads from 0x40 will now read from free memory
            */
            mstore(0x40, add(ptr, returndatasize))
            /*
                `returndatacopy` is an Opcode that copies the last return data to a slot. `ptr` is the
                    slot it will copy to, 0 means copy from the beginning of the return data, and size is
                    the amount of data to copy.
                `returndatasize` is an Opcode that gives us the size of the last return data. In this case, that is the size of the data returned from delegatecall
            */
            returndatacopy(ptr, 0, returndatasize)

            /*
                if `result` is 0, revert.
                if `result` is 1, return `size` amount of data from `ptr`. This is the data that was
                copied to `ptr` from the delegatecall return data
            */
            switch result
            case 0 { revert(ptr, returndatasize) }
            default { return(ptr, returndatasize) }
        }
    }
}

// File: contracts/upgradeability/UpgradeabilityStorage.sol

/**
 * @title UpgradeabilityStorage
 * @dev This contract holds all the necessary state variables to support the upgrade functionality
 */
contract UpgradeabilityStorage {
    // Version name of the current implementation
    uint256 internal _version;

    // Address of the current implementation
    address internal _implementation;

    /**
    * @dev Tells the version name of the current implementation
    * @return string representing the name of the current version
    */
    function version() public view returns (uint256) {
        return _version;
    }

    /**
    * @dev Tells the address of the current implementation
    * @return address of the current implementation
    */
    function implementation() public view returns (address) {
        return _implementation;
    }
}

// File: contracts/upgradeability/UpgradeabilityProxy.sol

/**
 * @title UpgradeabilityProxy
 * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded
 */
contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage {
    /**
    * @dev This event will be emitted every time the implementation gets upgraded
    * @param version representing the version name of the upgraded implementation
    * @param implementation representing the address of the upgraded implementation
    */
    event Upgraded(uint256 version, address indexed implementation);

    /**
    * @dev Upgrades the implementation address
    * @param version representing the version name of the new implementation to be set
    * @param implementation representing the address of the new implementation to be set
    */
    function _upgradeTo(uint256 version, address implementation) internal {
        require(_implementation != implementation);
        require(version > _version);
        _version = version;
        _implementation = implementation;
        emit Upgraded(version, implementation);
    }
}

// File: contracts/upgradeability/OwnedUpgradeabilityProxy.sol

/**
 * @title OwnedUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with basic authorization control functionalities
 */
contract OwnedUpgradeabilityProxy is UpgradeabilityOwnerStorage, UpgradeabilityProxy {
  /**
  * @dev Event to show ownership has been transferred
  * @param previousOwner representing the address of the previous owner
  * @param newOwner representing the address of the new owner
  */
    event ProxyOwnershipTransferred(address previousOwner, address newOwner);

    /**
    * @dev the constructor sets the original owner of the contract to the sender account.
    */
    constructor() public {
        setUpgradeabilityOwner(msg.sender);
    }

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyProxyOwner() {
        require(msg.sender == proxyOwner());
        _;
    }

    /**
    * @dev Tells the address of the proxy owner
    * @return the address of the proxy owner
    */
    function proxyOwner() public view returns (address) {
        return upgradeabilityOwner();
    }

    /**
    * @dev Allows the current owner to transfer control of the contract to a newOwner.
    * @param newOwner The address to transfer ownership to.
    */
    function transferProxyOwnership(address newOwner) public onlyProxyOwner {
        require(newOwner != address(0));
        emit ProxyOwnershipTransferred(proxyOwner(), newOwner);
        setUpgradeabilityOwner(newOwner);
    }

    /**
    * @dev Allows the upgradeability owner to upgrade the current version of the proxy.
    * @param version representing the version name of the new implementation to be set.
    * @param implementation representing the address of the new implementation to be set.
    */
    function upgradeTo(uint256 version, address implementation) public onlyProxyOwner {
        _upgradeTo(version, implementation);
    }

    /**
    * @dev Allows the upgradeability owner to upgrade the current version of the proxy and call the new implementation
    * to initialize whatever is needed through a low level call.
    * @param version representing the version name of the new implementation to be set.
    * @param implementation representing the address of the new implementation to be set.
    * @param data represents the msg.data to bet sent in the low level call. This parameter may include the function
    * signature of the implementation to be called with the needed payload
    */
    function upgradeToAndCall(uint256 version, address implementation, bytes data) payable public onlyProxyOwner {
        upgradeTo(version, implementation);
        require(address(this).call.value(msg.value)(data));
    }
}

// File: contracts/upgradeability/EternalStorageProxy.sol

/**
 * @title EternalStorageProxy
 * @dev This proxy holds the storage of the token contract and delegates every call to the current implementation set.
 * Besides, it allows to upgrade the token's behaviour towards further implementations, and provides basic
 * authorization control functionalities
 */
contract EternalStorageProxy is OwnedUpgradeabilityProxy, EternalStorage {}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"proxyOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"version","type":"uint256"},{"name":"implementation","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeabilityOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"version","type":"uint256"},{"name":"implementation","type":"address"},{"name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferProxyOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"ProxyOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"version","type":"uint256"},{"indexed":true,"name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}]

60806040526100163364010000000061001b810204565b61003d565b60008054600160a060020a031916600160a060020a0392909216919091179055565b6104718061004c6000396000f3006080604052600436106100825763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100cd5780633ad06d16146100fe57806354fd4d50146101245780635c60da1b1461014b5780636fde820214610160578063a9c45fcb14610175578063f1739cae146101d1575b600061008c6101f2565b9050600160a060020a03811615156100a357600080fd5b60405136600082376000803683855af43d82016040523d6000833e8080156100c9573d83f35b3d83fd5b3480156100d957600080fd5b506100e2610201565b60408051600160a060020a039092168252519081900360200190f35b34801561010a57600080fd5b50610122600435600160a060020a0360243516610210565b005b34801561013057600080fd5b5061013961023a565b60408051918252519081900360200190f35b34801561015757600080fd5b506100e26101f2565b34801561016c57600080fd5b506100e2610240565b604080516020600460443581810135601f81018490048402850184019095528484526101229482359460248035600160a060020a03169536959460649492019190819084018382808284375094975061024f9650505050505050565b3480156101dd57600080fd5b50610122600160a060020a03600435166102fd565b600254600160a060020a031690565b600061020b610240565b905090565b610218610201565b600160a060020a0316331461022c57600080fd5b6102368282610385565b5050565b60015490565b600054600160a060020a031690565b610257610201565b600160a060020a0316331461026b57600080fd5b6102758383610210565b30600160a060020a0316348260405180828051906020019080838360005b838110156102ab578181015183820152602001610293565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af19250505015156102f857600080fd5b505050565b610305610201565b600160a060020a0316331461031957600080fd5b600160a060020a038116151561032e57600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd9610357610201565b60408051600160a060020a03928316815291841660208301528051918290030190a161038281610416565b50565b600254600160a060020a03828116911614156103a057600080fd5b60015482116103ae57600080fd5b600182905560028054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556040805184815290517f4289d6195cf3c2d2174adf98d0e19d4d2d08887995b99cb7b100e7ffe795820e9181900360200190a25050565b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a72305820468432494ae522077e1a5855bc87444d93894689c72242af4568befd3cd609d60029

Swarm Source

bzzr://468432494ae522077e1a5855bc87444d93894689c72242af4568befd3cd609d6
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.