Sophon Testnet
    /

    Contract

    0x0dFcccB95225ffB03c6FBB2559B530C2B7C8A912

    Overview

    SOPH Balance

    Sophon Sepolia  LogoSophon Sepolia  LogoSophon Sepolia  Logo0 SOPH

    Multichain Info

    N/A
    Transaction Hash
    Method
    Block
    Age
    From
    To

    There are no matching entries

    1 Internal Transaction found.

    Latest 1 internal transaction

    Advanced mode:
    Parent Transaction Hash Block Age From To Amount
    135052024-08-20 8:14:49228 days ago1724141689
     Contract Creation
    0 SOPH
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    MultiSend

    Compiler Version
    v0.7.6+commit.7338295f

    ZkSolc Version
    v1.3.8

    Optimization Enabled:
    Yes with Mode 3

    Other Settings:
    default evmVersion, MIT license

    Contract Source Code (Solidity Standard Json-Input format)

    File 1 of 36 : MultiSend.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title Multi Send - Allows to batch multiple transactions into one.
    /// @author Nick Dodson - <nick.dodson@consensys.net>
    /// @author Gonçalo Sá - <goncalo.sa@consensys.net>
    /// @author Stefan George - <stefan@gnosis.io>
    /// @author Richard Meissner - <richard@gnosis.io>
    contract MultiSend {
    address private immutable multisendSingleton;
    constructor() {
    multisendSingleton = address(this);
    }
    /// @dev Sends multiple transactions and reverts all if one fails.
    /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of
    /// operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),
    /// to as a address (=> 20 bytes),
    /// value as a uint256 (=> 32 bytes),
    /// data length as a uint256 (=> 32 bytes),
    /// data as bytes.
    /// see abi.encodePacked for more information on packed encoding
    /// @notice This method is payable as delegatecalls keep the msg.value from the previous call
    /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise
    function multiSend(bytes memory transactions) public payable {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 36 : CreateCall.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title Create Call - Allows to use the different create opcodes to deploy a contract
    /// @author Richard Meissner - <richard@gnosis.io>
    contract CreateCall {
    event ContractCreation(address newContract);
    function performCreate2(
    uint256 value,
    bytes memory deploymentData,
    bytes32 salt
    ) public returns (address newContract) {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    newContract := create2(value, add(0x20, deploymentData), mload(deploymentData), salt)
    }
    require(newContract != address(0), "Could not deploy contract");
    emit ContractCreation(newContract);
    }
    function performCreate(uint256 value, bytes memory deploymentData) public returns (address newContract) {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    newContract := create(value, add(deploymentData, 0x20), mload(deploymentData))
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 36 : GnosisSafeProxy.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title IProxy - Helper interface to access masterCopy of the Proxy on-chain
    /// @author Richard Meissner - <richard@gnosis.io>
    interface IProxy {
    function masterCopy() external view returns (address);
    }
    /// @title GnosisSafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.
    /// @author Stefan George - <stefan@gnosis.io>
    /// @author Richard Meissner - <richard@gnosis.io>
    contract GnosisSafeProxy {
    // singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.
    // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`
    address internal singleton;
    /// @dev Constructor function sets address of singleton contract.
    /// @param _singleton Singleton address.
    constructor(address _singleton) {
    require(_singleton != address(0), "Invalid singleton address provided");
    singleton = _singleton;
    }
    /// @dev Fallback function forwards all transactions and returns all received return data.
    fallback() external payable {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 36 : IProxyCreationCallback.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./GnosisSafeProxy.sol";
    interface IProxyCreationCallback {
    function proxyCreated(
    GnosisSafeProxy proxy,
    address _singleton,
    bytes calldata initializer,
    uint256 saltNonce
    ) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 36 : GnosisSafeProxyFactory.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./GnosisSafeProxy.sol";
    import "./IProxyCreationCallback.sol";
    /// @title Proxy Factory - Allows to create new proxy contact and execute a message call to the new proxy within one transaction.
    /// @author Stefan George - <stefan@gnosis.pm>
    contract GnosisSafeProxyFactory {
    event ProxyCreation(GnosisSafeProxy proxy, address singleton);
    /// @dev Allows to create new proxy contact and execute a message call to the new proxy within one transaction.
    /// @param singleton Address of singleton contract.
    /// @param data Payload for message call sent to new proxy contract.
    function createProxy(address singleton, bytes memory data) public returns (GnosisSafeProxy proxy) {
    proxy = new GnosisSafeProxy(singleton);
    if (data.length > 0)
    // solhint-disable-next-line no-inline-assembly
    assembly {
    if eq(call(gas(), proxy, 0, add(data, 0x20), mload(data), 0, 0), 0) {
    revert(0, 0)
    }
    }
    emit ProxyCreation(proxy, singleton);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 36 : MultiSendCallOnly.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title Multi Send Call Only - Allows to batch multiple transactions into one, but only calls
    /// @author Stefan George - <stefan@gnosis.io>
    /// @author Richard Meissner - <richard@gnosis.io>
    /// @notice The guard logic is not required here as this contract doesn't support nested delegate calls
    contract MultiSendCallOnly {
    /// @dev Sends multiple transactions and reverts all if one fails.
    /// @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of
    /// operation has to be uint8(0) in this version (=> 1 byte),
    /// to as a address (=> 20 bytes),
    /// value as a uint256 (=> 32 bytes),
    /// data length as a uint256 (=> 32 bytes),
    /// data as bytes.
    /// see abi.encodePacked for more information on packed encoding
    /// @notice The code is for most part the same as the normal MultiSend (to keep compatibility),
    /// but reverts if a transaction tries to use a delegatecall.
    /// @notice This method is payable as delegatecalls keep the msg.value from the previous call
    /// If the calling method (e.g. execTransaction) received ETH this would revert otherwise
    function multiSend(bytes memory transactions) public payable {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    let length := mload(transactions)
    let i := 0x20
    for {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 36 : SimulateTxAccessor.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../base/Executor.sol";
    /// @title Simulate Transaction Accessor - can be used with StorageAccessible to simulate Safe transactions
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract SimulateTxAccessor is Executor {
    address private immutable accessorSingleton;
    constructor() {
    accessorSingleton = address(this);
    }
    modifier onlyDelegateCall() {
    require(address(this) != accessorSingleton, "SimulateTxAccessor should only be called via delegatecall");
    _;
    }
    function simulate(
    address to,
    uint256 value,
    bytes calldata data,
    Enum.Operation operation
    )
    external
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 36 : Executor.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../common/Enum.sol";
    /// @title Executor - A contract that can execute transactions
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract Executor {
    function execute(
    address to,
    uint256 value,
    bytes memory data,
    Enum.Operation operation,
    uint256 txGas
    ) internal returns (bool success) {
    if (operation == Enum.Operation.DelegateCall) {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    success := delegatecall(txGas, to, add(data, 0x20), mload(data), 0, 0)
    }
    } else {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    success := call(txGas, to, value, add(data, 0x20), mload(data), 0, 0)
    }
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 36 : Enum.sol
    1
    2
    3
    4
    5
    6
    7
    8
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title Enum - Collection of enums
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract Enum {
    enum Operation {Call, DelegateCall}
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 36 : ModuleManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../common/Enum.sol";
    import "../common/SelfAuthorized.sol";
    import "./Executor.sol";
    /// @title Module Manager - A contract that manages modules that can execute transactions via this contract
    /// @author Stefan George - <stefan@gnosis.pm>
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract ModuleManager is SelfAuthorized, Executor {
    event EnabledModule(address module);
    event DisabledModule(address module);
    event ExecutionFromModuleSuccess(address indexed module);
    event ExecutionFromModuleFailure(address indexed module);
    address internal constant SENTINEL_MODULES = address(0x1);
    mapping(address => address) internal modules;
    function setupModules(address to, bytes memory data) internal {
    require(modules[SENTINEL_MODULES] == address(0), "GS100");
    modules[SENTINEL_MODULES] = SENTINEL_MODULES;
    if (to != address(0))
    // Setup has to complete successfully or transaction fails.
    require(execute(to, 0, data, Enum.Operation.DelegateCall, gasleft()), "GS000");
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 36 : SelfAuthorized.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title SelfAuthorized - authorizes current contract to perform actions
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract SelfAuthorized {
    function requireSelfCall() private view {
    require(msg.sender == address(this), "GS031");
    }
    modifier authorized() {
    // This is a function call as it minimized the bytecode size
    requireSelfCall();
    _;
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 36 : GnosisSafe.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./base/ModuleManager.sol";
    import "./base/OwnerManager.sol";
    import "./base/FallbackManager.sol";
    import "./base/GuardManager.sol";
    import "./common/EtherPaymentFallback.sol";
    import "./common/Singleton.sol";
    import "./common/SignatureDecoder.sol";
    import "./common/SecuredTokenTransfer.sol";
    import "./common/StorageAccessible.sol";
    import "./interfaces/ISignatureValidator.sol";
    import "./external/GnosisSafeMath.sol";
    /// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.
    /// @author Stefan George - <stefan@gnosis.io>
    /// @author Richard Meissner - <richard@gnosis.io>
    contract GnosisSafe is
    EtherPaymentFallback,
    Singleton,
    ModuleManager,
    OwnerManager,
    SignatureDecoder,
    SecuredTokenTransfer,
    ISignatureValidatorConstants,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 36 : OwnerManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../common/SelfAuthorized.sol";
    /// @title OwnerManager - Manages a set of owners and a threshold to perform actions.
    /// @author Stefan George - <stefan@gnosis.pm>
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract OwnerManager is SelfAuthorized {
    event AddedOwner(address owner);
    event RemovedOwner(address owner);
    event ChangedThreshold(uint256 threshold);
    address internal constant SENTINEL_OWNERS = address(0x1);
    mapping(address => address) internal owners;
    uint256 internal ownerCount;
    uint256 internal threshold;
    /// @dev Setup function sets initial storage of contract.
    /// @param _owners List of Safe owners.
    /// @param _threshold Number of required confirmations for a Safe transaction.
    function setupOwners(address[] memory _owners, uint256 _threshold) internal {
    // Threshold can only be 0 at initialization.
    // Check ensures that setup function can only be called once.
    require(threshold == 0, "GS200");
    // Validate that threshold is smaller than number of added owners.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 36 : FallbackManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../common/SelfAuthorized.sol";
    /// @title Fallback Manager - A contract that manages fallback calls made to this contract
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract FallbackManager is SelfAuthorized {
    event ChangedFallbackHandler(address handler);
    // keccak256("fallback_manager.handler.address")
    bytes32 internal constant FALLBACK_HANDLER_STORAGE_SLOT = 0x6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d5;
    function internalSetFallbackHandler(address handler) internal {
    bytes32 slot = FALLBACK_HANDLER_STORAGE_SLOT;
    // solhint-disable-next-line no-inline-assembly
    assembly {
    sstore(slot, handler)
    }
    }
    /// @dev Allows to add a contract to handle fallback calls.
    /// Only fallback calls without value and with data will be forwarded.
    /// This can only be done via a Safe transaction.
    /// @param handler contract to handle fallbacks calls.
    function setFallbackHandler(address handler) public authorized {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 36 : GuardManager.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../common/Enum.sol";
    import "../common/SelfAuthorized.sol";
    interface Guard {
    function checkTransaction(
    address to,
    uint256 value,
    bytes memory data,
    Enum.Operation operation,
    uint256 safeTxGas,
    uint256 baseGas,
    uint256 gasPrice,
    address gasToken,
    address payable refundReceiver,
    bytes memory signatures,
    address msgSender
    ) external;
    function checkAfterExecution(bytes32 txHash, bool success) external;
    }
    /// @title Fallback Manager - A contract that manages fallback calls made to this contract
    /// @author Richard Meissner - <richard@gnosis.pm>
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 36 : EtherPaymentFallback.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title EtherPaymentFallback - A contract that has a fallback to accept ether payments
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract EtherPaymentFallback {
    event SafeReceived(address indexed sender, uint256 value);
    /// @dev Fallback function accepts Ether transactions.
    receive() external payable {
    emit SafeReceived(msg.sender, msg.value);
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 36 : Singleton.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title Singleton - Base for singleton contracts (should always be first super contract)
    /// This contract is tightly coupled to our proxy contract (see `proxies/GnosisSafeProxy.sol`)
    /// @author Richard Meissner - <richard@gnosis.io>
    contract Singleton {
    // singleton always needs to be first declared variable, to ensure that it is at the same location as in the Proxy contract.
    // It should also always be ensured that the address is stored alone (uses a full word)
    address private singleton;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 36 : SignatureDecoder.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title SignatureDecoder - Decodes signatures that a encoded as bytes
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract SignatureDecoder {
    /// @dev divides bytes signature into `uint8 v, bytes32 r, bytes32 s`.
    /// @notice Make sure to peform a bounds check for @param pos, to avoid out of bounds access on @param signatures
    /// @param pos which signature to read. A prior bounds check of this parameter should be performed, to avoid out of bounds access
    /// @param signatures concatenated rsv signatures
    function signatureSplit(bytes memory signatures, uint256 pos)
    internal
    pure
    returns (
    uint8 v,
    bytes32 r,
    bytes32 s
    )
    {
    // The signature format is a compact form of:
    // {bytes32 r}{bytes32 s}{uint8 v}
    // Compact means, uint8 is not padded to 32 bytes.
    // solhint-disable-next-line no-inline-assembly
    assembly {
    let signaturePos := mul(0x41, pos)
    r := mload(add(signatures, add(signaturePos, 0x20)))
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 36 : SecuredTokenTransfer.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title SecuredTokenTransfer - Secure token transfer
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract SecuredTokenTransfer {
    /// @dev Transfers a token and returns if it was a success
    /// @param token Token that should be transferred
    /// @param receiver Receiver to whom the token should be transferred
    /// @param amount The amount of tokens that should be transferred
    function transferToken(
    address token,
    address receiver,
    uint256 amount
    ) internal returns (bool transferred) {
    // 0xa9059cbb - keccack("transfer(address,uint256)")
    bytes memory data = abi.encodeWithSelector(0xa9059cbb, receiver, amount);
    // solhint-disable-next-line no-inline-assembly
    assembly {
    // We write the return value to scratch space.
    // See https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html#layout-in-memory
    let success := call(sub(gas(), 10000), token, 0, add(data, 0x20), mload(data), 0, 0x20)
    switch returndatasize()
    case 0 {
    transferred := success
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 36 : StorageAccessible.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title StorageAccessible - generic base contract that allows callers to access all internal storage.
    /// @notice See https://github.com/gnosis/util-contracts/blob/bb5fe5fb5df6d8400998094fb1b32a178a47c3a1/contracts/StorageAccessible.sol
    contract StorageAccessible {
    /**
    * @dev Reads `length` bytes of storage in the currents contract
    * @param offset - the offset in the current contract's storage in words to start reading from
    * @param length - the number of words (32 bytes) of data to read
    * @return the bytes that were read.
    */
    function getStorageAt(uint256 offset, uint256 length) public view returns (bytes memory) {
    bytes memory result = new bytes(length * 32);
    for (uint256 index = 0; index < length; index++) {
    // solhint-disable-next-line no-inline-assembly
    assembly {
    let word := sload(add(offset, index))
    mstore(add(add(result, 0x20), mul(index, 0x20)), word)
    }
    }
    return result;
    }
    /**
    * @dev Performs a delegetecall on a targetContract in the context of self.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 36 : ISignatureValidator.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    contract ISignatureValidatorConstants {
    // bytes4(keccak256("isValidSignature(bytes,bytes)")
    bytes4 internal constant EIP1271_MAGIC_VALUE = 0x20c13b0b;
    }
    abstract contract ISignatureValidator is ISignatureValidatorConstants {
    /**
    * @dev Should return whether the signature provided is valid for the provided data
    * @param _data Arbitrary length data signed on the behalf of address(this)
    * @param _signature Signature byte array associated with _data
    *
    * MUST return the bytes4 magic value 0x20c13b0b when function passes.
    * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)
    * MUST allow external calls
    */
    function isValidSignature(bytes memory _data, bytes memory _signature) public view virtual returns (bytes4);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 22 of 36 : GnosisSafeMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /**
    * @title GnosisSafeMath
    * @dev Math operations with safety checks that revert on error
    * Renamed from SafeMath to GnosisSafeMath to avoid conflicts
    * TODO: remove once open zeppelin update to solc 0.5.0
    */
    library GnosisSafeMath {
    /**
    * @dev Multiplies two numbers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
    return 0;
    }
    uint256 c = a * b;
    require(c / a == b);
    return c;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 23 of 36 : SignMessageLib.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./GnosisSafeStorage.sol";
    import "../GnosisSafe.sol";
    /// @title SignMessageLib - Allows to set an entry in the signedMessages
    /// @author Richard Meissner - <richard@gnosis.io>
    contract SignMessageLib is GnosisSafeStorage {
    //keccak256(
    // "SafeMessage(bytes message)"
    //);
    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;
    event SignMsg(bytes32 indexed msgHash);
    /// @dev Marks a message as signed, so that it can be used with EIP-1271
    /// @notice Marks a message (`_data`) as signed.
    /// @param _data Arbitrary length data that should be marked as signed on the behalf of address(this)
    function signMessage(bytes calldata _data) external {
    bytes32 msgHash = getMessageHash(_data);
    signedMessages[msgHash] = 1;
    emit SignMsg(msgHash);
    }
    /// @dev Returns hash of a message that can be signed by owners.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 24 of 36 : GnosisSafeStorage.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @title GnosisSafeStorage - Storage layout of the Safe contracts to be used in libraries
    /// @author Richard Meissner - <richard@gnosis.io>
    contract GnosisSafeStorage {
    // From /common/Singleton.sol
    address internal singleton;
    // From /common/ModuleManager.sol
    mapping(address => address) internal modules;
    // From /common/OwnerManager.sol
    mapping(address => address) internal owners;
    uint256 internal ownerCount;
    uint256 internal threshold;
    // From /GnosisSafe.sol
    uint256 internal nonce;
    bytes32 internal _deprecatedDomainSeparator;
    mapping(bytes32 => uint256) internal signedMessages;
    mapping(address => mapping(bytes32 => uint256)) internal approvedHashes;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 25 of 36 : Migrate_1_3_0_to_1_2_0.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../../libraries/GnosisSafeStorage.sol";
    /// @title Migration - migrates a Safe contract from 1.3.0 to 1.2.0
    /// @author Richard Meissner - <richard@gnosis.io>
    contract Migration is GnosisSafeStorage {
    bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749;
    address public immutable migrationSingleton;
    address public immutable safe120Singleton;
    constructor(address targetSingleton) {
    require(targetSingleton != address(0), "Invalid singleton address provided");
    safe120Singleton = targetSingleton;
    migrationSingleton = address(this);
    }
    event ChangedMasterCopy(address singleton);
    bytes32 private guard;
    /// @dev Allows to migrate the contract. This can only be called via a delegatecall.
    function migrate() public {
    require(address(this) != migrationSingleton, "Migration should only be called via delegatecall");
    // Master copy address cannot be null.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 26 of 36 : CompatibilityFallbackHandler.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./DefaultCallbackHandler.sol";
    import "../interfaces/ISignatureValidator.sol";
    import "../GnosisSafe.sol";
    /// @title Compatibility Fallback Handler - fallback handler to provider compatibility between pre 1.3.0 and 1.3.0+ Safe contracts
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract CompatibilityFallbackHandler is DefaultCallbackHandler, ISignatureValidator {
    //keccak256(
    // "SafeMessage(bytes message)"
    //);
    bytes32 private constant SAFE_MSG_TYPEHASH = 0x60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca;
    bytes4 internal constant SIMULATE_SELECTOR = bytes4(keccak256("simulate(address,bytes)"));
    address internal constant SENTINEL_MODULES = address(0x1);
    bytes4 internal constant UPDATED_MAGIC_VALUE = 0x1626ba7e;
    /**
    * Implementation of ISignatureValidator (see `interfaces/ISignatureValidator.sol`)
    * @dev Should return whether the signature provided is valid for the provided data.
    * @param _data Arbitrary length data signed on the behalf of address(msg.sender)
    * @param _signature Signature byte array associated with _data
    * @return a bool upon valid or invalid signature with corresponding _data
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 27 of 36 : DefaultCallbackHandler.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../interfaces/ERC1155TokenReceiver.sol";
    import "../interfaces/ERC721TokenReceiver.sol";
    import "../interfaces/ERC777TokensRecipient.sol";
    import "../interfaces/IERC165.sol";
    /// @title Default Callback Handler - returns true for known token callbacks
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract DefaultCallbackHandler is ERC1155TokenReceiver, ERC777TokensRecipient, ERC721TokenReceiver, IERC165 {
    string public constant NAME = "Default Callback Handler";
    string public constant VERSION = "1.0.0";
    function onERC1155Received(
    address,
    address,
    uint256,
    uint256,
    bytes calldata
    ) external pure override returns (bytes4) {
    return 0xf23a6e61;
    }
    function onERC1155BatchReceived(
    address,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 28 of 36 : ERC1155TokenReceiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /**
    Note: The ERC-165 identifier for this interface is 0x4e2312e0.
    */
    interface ERC1155TokenReceiver {
    /**
    @notice Handle the receipt of a single ERC1155 token type.
    @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the
                balance has been updated.
    This function MUST return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61) if it accepts the
                transfer.
    This function MUST revert if it rejects the transfer.
    Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.
    @param _operator The address which initiated the transfer (i.e. msg.sender)
    @param _from The address which previously owned the token
    @param _id The ID of the token being transferred
    @param _value The amount of tokens being transferred
    @param _data Additional data with no specified format
    @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    */
    function onERC1155Received(
    address _operator,
    address _from,
    uint256 _id,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 29 of 36 : ERC721TokenReceiver.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
    interface ERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    /// after a `transfer`. This function MAY throw to revert and reject the
    /// transfer. Return of other than the magic value MUST result in the
    /// transaction being reverted.
    /// Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    /// unless throwing
    function onERC721Received(
    address _operator,
    address _from,
    uint256 _tokenId,
    bytes calldata _data
    ) external returns (bytes4);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 30 of 36 : ERC777TokensRecipient.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    interface ERC777TokensRecipient {
    function tokensReceived(
    address operator,
    address from,
    address to,
    uint256 amount,
    bytes calldata data,
    bytes calldata operatorData
    ) external;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 31 of 36 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    /// @notice More details at https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol
    interface IERC165 {
    /**
    * @dev Returns true if this contract implements the interface defined by
    * `interfaceId`. See the corresponding
    * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
    * to learn more about how these ids are created.
    *
    * This function call must use less than 30 000 gas.
    */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 32 of 36 : ERC1155Token.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../interfaces/ERC1155TokenReceiver.sol";
    import "../external/GnosisSafeMath.sol";
    contract ERC1155Token {
    using GnosisSafeMath for uint256;
    // Mapping from token ID to owner balances
    mapping(uint256 => mapping(address => uint256)) private _balances;
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    /**
    @dev Get the specified address' balance for token with specified ID.
    @param owner The address of the token holder
    @param id ID of the token
    @return The owner's balance of the token type requested
    */
    function balanceOf(address owner, uint256 id) public view returns (uint256) {
    require(owner != address(0), "ERC1155: balance query for the zero address");
    return _balances[id][owner];
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 33 of 36 : GnosisSafeL2.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "./GnosisSafe.sol";
    /// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.
    /// @author Stefan George - <stefan@gnosis.io>
    /// @author Richard Meissner - <richard@gnosis.io>
    contract GnosisSafeL2 is GnosisSafe {
    event SafeMultiSigTransaction(
    address to,
    uint256 value,
    bytes data,
    Enum.Operation operation,
    uint256 safeTxGas,
    uint256 baseGas,
    uint256 gasPrice,
    address gasToken,
    address payable refundReceiver,
    bytes signatures,
    // We combine nonce, sender and threshold into one to avoid stack too deep
    // Dev note: additionalInfo should not contain `bytes`, as this complicates decoding
    bytes additionalInfo
    );
    event SafeModuleTransaction(address module, address to, uint256 value, bytes data, Enum.Operation operation);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 34 of 36 : ReentrancyTransactionGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../../common/Enum.sol";
    import "../../base/GuardManager.sol";
    import "../../GnosisSafe.sol";
    contract ReentrancyTransactionGuard is Guard {
    bytes32 internal constant GUARD_STORAGE_SLOT = keccak256("reentrancy_guard.guard.struct");
    struct GuardValue {
    bool active;
    }
    // solhint-disable-next-line payable-fallback
    fallback() external {
    // We don't revert on fallback to avoid issues in case of a Safe upgrade
    // E.g. The expected check method might change and then the Safe would be locked.
    }
    function getGuard() internal pure returns (GuardValue storage guard) {
    bytes32 slot = GUARD_STORAGE_SLOT;
    // solhint-disable-next-line no-inline-assembly
    assembly {
    guard.slot := slot
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 35 of 36 : DelegateCallTransactionGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../../common/Enum.sol";
    import "../../base/GuardManager.sol";
    import "../../GnosisSafe.sol";
    contract DelegateCallTransactionGuard is Guard {
    address public immutable allowedTarget;
    constructor(address target) {
    allowedTarget = target;
    }
    // solhint-disable-next-line payable-fallback
    fallback() external {
    // We don't revert on fallback to avoid issues in case of a Safe upgrade
    // E.g. The expected check method might change and then the Safe would be locked.
    }
    function checkTransaction(
    address to,
    uint256,
    bytes memory,
    Enum.Operation operation,
    uint256,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 36 of 36 : DebugTransactionGuard.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: LGPL-3.0-only
    pragma solidity >=0.7.0 <0.9.0;
    import "../../common/Enum.sol";
    import "../../base/GuardManager.sol";
    import "../../GnosisSafe.sol";
    /// @title Debug Transaction Guard - A guard that will emit events with extended information.
    /// @notice This guard is only meant as a development tool and example
    /// @author Richard Meissner - <richard@gnosis.pm>
    contract DebugTransactionGuard is Guard {
    // solhint-disable-next-line payable-fallback
    fallback() external {
    // We don't revert on fallback to avoid issues in case of a Safe upgrade
    // E.g. The expected check method might change and then the Safe would be locked.
    }
    event TransactionDetails(
    address indexed safe,
    bytes32 indexed txHash,
    address to,
    uint256 value,
    bytes data,
    Enum.Operation operation,
    uint256 safeTxGas,
    bool usesRefund,
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    "optimizer": {
    "enabled": true,
    "mode": "3"
    },
    "outputSelection": {
    "*": {
    "*": [
    "abi"
    ]
    }
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract ABI

    API
    [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes","name":"transactions","type":"bytes"}],"name":"multiSend","outputs":[],"stateMutability":"payable","type":"function"}]

    00000000000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000000000000100004bc5b24bb687f66bb0211b8bb6a14350bd2ab3035bd503c6340569aa8d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

    Deployed Bytecode

    0x00020000000000020003000000000002000100000001035500000060011002700000003c0010019d0000000101200190000000750000c13d0000008001000039000000400010043f0000000002000031000000040120008c000000d90000413d0000000101000367000000000301043b0000003e033001970000003f0330009c000000d90000c13d000000240420008a000000200300008a000000000434004b000000d90000813d0000000404100370000000000504043b000000400450009c000000d90000213d0000002404500039000000000624004b000000d90000213d0000000405500039000000000151034f000000000101043b000000400510009c000000d90000213d0000000005410019000000000225004b000000d90000213d000000bf02100039000000000232016f000000400020043f0000001f0210018f000000800010043f00000001034003670000000504100272000000350000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b0000002d0000413d000000000520004c000000440000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a0011000390000000000010435000000410100004100000000001004390000000001000412000000040010044300000024000004430000003c0100004100000000020004140000003c0320009c0000000001024019000000c00110021000000042011001c7000080050200003900ec00e20000040f0000000102200190000000d90000613d000000000101043b00000043011001970000000002000410000000000121004b000000850000c13d000000400100043d00000064021000390000004703000041000000000032043500000044021000390000004803000041000000000032043500000024021000390000003003000039000000000032043500000049020000410000000000210435000000040210003900000020030000390000000000320435000000400200043d000000000121004900000084011000390000003c030000410000003c0410009c00000000010380190000003c0420009c000000000203801900000040022002100000006001100210000000000121019f000000ee00010430000000a001000039000000400010043f0000000001000416000000000110004c000000d90000c13d00000000010004100000006002100210000000800020043f0000014000000443000001600010044300000020010000390000010000100443000000010100003900000120001004430000003d01000041000000ed0001042e000000800600043d000000210160008c000000db0000413d0000002007000039000100000006001d000000980000013d00000046011001c70000800902000039000000000500001900ec00dd0000040f0000000106000029000000030700002900000002080000290000000101200190000000d90000613d00000000018700190000005507100039000000000167004b000000db0000813d000000d501700039000000b50270003900000000080204330000009502700039000000000302043300000081027000390000000002020433000000600420027000000080027000390000000002020433000000440520009c000000be0000813d0000000002000414000000040540008c000000940000613d000300000007001d0000003c050000410000003c0610009c000000000105801900000040011002100000003c0680009c000200000008001d000000000605001900000000060840190000006006600210000000000116019f0000003c0620009c0000000002058019000000c002200210000000000112019f000000000230004c0000008b0000c13d000000000204001900ec00dd0000040f000000010600002900000003070000290000000208000029000000920000013d0000004502200197000000440220009c000000d90000c13d0000000002000414000000040340008c000000940000613d0000003c030000410000003c0510009c000000000103801900000040011002100000003c0580009c000000000503001900000000050840190000006005500210000000000115019f0000003c0520009c0000000002038019000000c002200210000000000112019f0000000002040019000300000007001d000200000008001d00ec00e70000040f000000020800002900000003070000290000000106000029000000920000013d0000000001000019000000ee000104300000000001000019000000ed0001042e000000e0002104210000000102000039000000000001042d0000000002000019000000000001042d000000e5002104230000000102000039000000000001042d0000000002000019000000000001042d000000ea002104250000000102000039000000000001042d0000000002000019000000000001042d000000ec00000432000000ed0001042e000000ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000080000001000000000000000000ffffffff000000000000000000000000000000000000000000000000000000008d80ff0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000007669612064656c656761746563616c6c000000000000000000000000000000004d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642008c379a0000000000000000000000000000000000000000000000000000000006c159535dabcd6eea267a67de311bb086b15c371538c8bd0058bd754ca11f065

    Block Age Transaction Gas Used Reward
    view all blocks produced

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits
    Loading...
    Loading
    Loading...
    Loading
    [ Download: CSV Export  ]

    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.