Contract 0x75df5af045d91108662d8080fd1fefad6aa0bb59 2

Gnosis 

Contract Overview

Gnosis: AMB-ETH-XDAI
Balance:
0 xDAI

xDAI Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd6b6cc0d6e07e43f92201fd62f707b3eb5d4d790254cc3a343255b9ca29c06feExecute Affirmat...271455192023-03-27 9:30:257 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000215652
0xb47d5555b30f2f38de50ed2163b93be4c3f0bc533199a7e8b26d9f2f7df8258dExecute Affirmat...271455182023-03-27 9:30:207 mins agoGnosis: Gnosis Safe IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000696648
0xa7cfdc2460041b2142775df62ec2e846f4c4cb5a51d5746f5a4bd646c89ba5b6Execute Affirmat...271455172023-03-27 9:30:157 mins agoGnosis: GnosisDAO IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000242421
0x978b5338c56d218854b0c1ca80d65b7198bab079229530cd795e9ea0c8d3725eExecute Affirmat...271455172023-03-27 9:30:157 mins agoGnosis: Cow Protocol IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000242421
0xdaeb332a07e0bb229e05f350eb7610772837d135ab6bcd1dd248c4f127685c46Execute Affirmat...271455162023-03-27 9:30:107 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000293721
0x6b856fa77058e4757d0115d13a7fa618477f2151d51d1b23dd3d2c562e10966eSubmit Signature271454942023-03-27 9:28:159 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.0005454
0x2c4fbfc5f5a068252d454db7269be38e586626c4bf053a61774d00414e6cf7f4Submit Signature271454942023-03-27 9:28:159 mins agoGnosis: Gnosis Safe IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000538038
0xefcc5f5b42d6cfce4d38c96843e897045f89ce1b238e72749b494bd53af78ee6Submit Signature271454942023-03-27 9:28:159 mins agoGnosis: Cow Protocol IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000538374
0x96fa489d77315e67e0cb2e723fff0bb29733bddc1a62e9c492df7ec76fe3b326Submit Signature271454932023-03-27 9:28:109 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.001055976
0xe2b9d1db458b49a4a4d3d77f646b3fda11cd9d40fd79f771d31fa1dfc45f8c07Execute Affirmat...271453492023-03-27 9:15:3022 mins agoGnosis: GnosisDAO IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000527052
0x46fc14e6403123471632bbc1fe4f4903d09646e6ea39aff8632970d8a6c3fabbExecute Affirmat...271453492023-03-27 9:15:3022 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000241809
0x3d1f1ada839fac88203c34ae90d36cabd400267af1f725cbfd21cbd2b872b05eExecute Affirmat...271453482023-03-27 9:15:2522 mins agoGnosis: Cow Protocol IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000241809
0x87785d10f54cbfdee80b25f23eee439f08924b6706a078289f96bc229ed63113Execute Affirmat...271453482023-03-27 9:15:2522 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000293109
0xa8bbca9a358046fb90e9bef66f232bec3a06a6ae0cd6deae22a336751ab71ff4Execute Affirmat...271449892023-03-27 8:43:3054 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000215004
0xdedf7f792c165a37a76b7ba63eb79b353b6cc93b700736cc1a58722a444a45d2Execute Affirmat...271449882023-03-27 8:43:2554 mins agoGnosis: GnosisDAO IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000527025
0xa9516dcab0dad683413dd83746173b554390328d6633cecd437fc68186f0cfffExecute Affirmat...271449882023-03-27 8:43:2554 mins agoGnosis: Cow Protocol IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000241773
0xe638b2379e4ab06b535fa41a9b120f1f84821374ee007a8f5f23422420bea351Execute Affirmat...271449862023-03-27 8:43:1554 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000241773
0xf0df2764469c07c748645bcc0f831133ca75f0da1ddf28bc11380d3d215a81f4Execute Affirmat...271449852023-03-27 8:43:1054 mins agoGnosis: Gnosis Safe IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000293073
0xce161b9fb06102444658d058c36971a60e5162d22a33b3375c0040ff4b65728fSubmit Signature271449462023-03-27 8:39:3558 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000169569
0x6c0ea8d78ce8ec53f970985d21356cffbb18170f80dc709f6fe3a032bd2100faSubmit Signature271449452023-03-27 8:39:3058 mins agoGnosis: Cow Protocol IN  Gnosis: AMB-ETH-XDAI0 xDAI0.00054474
0x08c63a83a0ca9bf93820dedb0571044d5c365440950d99cac027c1310cc36081Submit Signature271449452023-03-27 8:39:3058 mins agoGnosis: GnosisDAO IN  Gnosis: AMB-ETH-XDAI0 xDAI0.00053775
0xe5b2fe4803b1b1de781218351461decbb4b784e1a53e849741b6a188fc3bec6eSubmit Signature271449442023-03-27 8:39:2558 mins agoGnosis: Gnosis Safe IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000538014
0x07a9cc1d8de35af3d8c64304361a8795d36e13efb7b7b2dfe191b9cc84d07ebcSubmit Signature271449442023-03-27 8:39:2558 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.00105588
0x8d0c3c568166351cd5e7d9c6aedc9b7ad1c52475a7370fee9f56742adfc516e3Execute Affirmat...271448902023-03-27 8:34:401 hr 3 mins agoProtofire IN  Gnosis: AMB-ETH-XDAI0 xDAI0.000217452
0x4aba415265e691c121c328495ad77ac5ad3eaad44565f943332eb6d97a2a4473Execute Affirmat...271448902023-03-27 8:34:401 hr 3 mins agoGnosis: Karpatkey IN  Gnosis: AMB-ETH-XDAI0 xDAI0.00118008
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
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:
byzantium EvmVersion
/**
 *Submitted for verification at gnosisscan.io on 2022-08-03
*/

// File: contracts/upgradeability/EternalStorage.sol

pragma solidity 0.4.24;

/**
 * @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: openzeppelin-solidity/contracts/AddressUtils.sol

pragma solidity ^0.4.24;


/**
 * Utility library of inline functions on addresses
 */
library AddressUtils {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param _addr address to check
   * @return whether the target address is a contract
   */
  function isContract(address _addr) internal view returns (bool) {
    uint256 size;
    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(_addr) }
    return size > 0;
  }

}

// File: contracts/upgradeability/Proxy.sol

pragma solidity 0.4.24;

/**
 * @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
    */
    /* solcov ignore next */
    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() public payable {
        // solhint-disable-previous-line no-complex-fallback
        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

pragma solidity 0.4.24;

/**
 * @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 uint256 representing the name of the current version
    */
    function version() external 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

pragma solidity 0.4.24;




/**
 * @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);

        // This additional check verifies that provided implementation is at least a contract
        require(AddressUtils.isContract(implementation));

        // This additional check guarantees that new version will be at least greater than the privios one,
        // so it is impossible to reuse old versions, or use the last version twice
        require(version > _version);

        _version = version;
        _implementation = implementation;
        emit Upgraded(version, implementation);
    }
}

// File: contracts/upgradeability/UpgradeabilityOwnerStorage.sol

pragma solidity 0.4.24;

/**
 * @title UpgradeabilityOwnerStorage
 * @dev This contract keeps track of the upgradeability owner
 */
contract UpgradeabilityOwnerStorage {
    // Owner of the contract
    address internal _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/OwnedUpgradeabilityProxy.sol

pragma solidity 0.4.24;



/**
 * @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 onlyUpgradeabilityOwner() {
        require(msg.sender == upgradeabilityOwner());
        /* solcov ignore next */
        _;
    }

    /**
    * @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) external onlyUpgradeabilityOwner {
        require(newOwner != address(0));
        emit ProxyOwnershipTransferred(upgradeabilityOwner(), 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 onlyUpgradeabilityOwner {
        _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)
        external
        payable
        onlyUpgradeabilityOwner
    {
        upgradeTo(version, implementation);
        // solhint-disable-next-line avoid-call-value
        require(address(this).call.value(msg.value)(data));
    }
}

// File: contracts/upgradeability/EternalStorageProxy.sol

pragma solidity 0.4.24;



/**
 * @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
 */
// solhint-disable-next-line no-empty-blocks
contract EternalStorageProxy is EternalStorage, OwnedUpgradeabilityProxy {}

Contract ABI

[{"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"}]

60806040526100163364010000000061001b810204565b61003d565b60068054600160a060020a031916600160a060020a0392909216919091179055565b6103e08061004c6000396000f3006080604052600436106100775763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633ad06d1681146100c257806354fd4d50146100e85780635c60da1b1461010f5780636fde820214610140578063a9c45fcb14610155578063f1739cae14610179575b600061008161019a565b9050600160a060020a038116151561009857600080fd5b60405136600082376000803683855af43d82016040523d6000833e8080156100be573d83f35b3d83fd5b3480156100ce57600080fd5b506100e6600435600160a060020a03602435166101a9565b005b3480156100f457600080fd5b506100fd6101d3565b60408051918252519081900360200190f35b34801561011b57600080fd5b5061012461019a565b60408051600160a060020a039092168252519081900360200190f35b34801561014c57600080fd5b506101246101d9565b6100e6600480359060248035600160a060020a0316916044359182019101356101e8565b34801561018557600080fd5b506100e6600160a060020a0360043516610250565b600854600160a060020a031690565b6101b16101d9565b600160a060020a031633146101c557600080fd5b6101cf82826102d8565b5050565b60075490565b600654600160a060020a031690565b6101f06101d9565b600160a060020a0316331461020457600080fd5b61020e84846101a9565b30600160a060020a03163483836040518083838082843782019150509250505060006040518083038185875af192505050151561024a57600080fd5b50505050565b6102586101d9565b600160a060020a0316331461026c57600080fd5b600160a060020a038116151561028157600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96102aa6101d9565b60408051600160a060020a03928316815291841660208301528051918290030190a16102d58161037d565b50565b600854600160a060020a03828116911614156102f357600080fd5b6102fc816103ac565b151561030757600080fd5b600754821161031557600080fd5b600782905560088054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556040805184815290517f4289d6195cf3c2d2174adf98d0e19d4d2d08887995b99cb7b100e7ffe795820e9181900360200190a25050565b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b11905600a165627a7a7230582078bac02704e0c07980df83f6082a0453ef0e0259d68860b6e0f2c5dc0d11c56c0029

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.