xDAI Price: $0.999894 (-0.00%)

Contract

0xF9D64d54D32EE2BDceAAbFA60C4C438E224427d0
Transaction Hash
Block
From
To
Sponsored Call V...400539402025-05-14 6:52:15245 days ago1747205535IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074971.00000001
Sponsored Call V...400518512025-05-14 3:52:10245 days ago1747194730IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981
Sponsored Call V...400505742025-05-14 2:02:20245 days ago1747188140IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074971.00000212
Sponsored Call V...400497612025-05-14 0:52:15246 days ago1747183935IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000001
Sponsored Call V...400484952025-05-13 23:02:25246 days ago1747177345IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000002
Sponsored Call V...400476762025-05-13 21:52:15246 days ago1747173135IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000001
Sponsored Call V...400456192025-05-13 18:52:30246 days ago1747162350IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00004594
Sponsored Call V...400435362025-05-13 15:52:10246 days ago1747151530IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000114
Sponsored Call V...400414422025-05-13 12:52:15246 days ago1747140735IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074971.00000224
Sponsored Call V...400393502025-05-13 9:52:15246 days ago1747129935IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000008
Sponsored Call V...400372552025-05-13 6:52:10246 days ago1747119130IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981
Sponsored Call V...400351732025-05-13 3:52:15246 days ago1747108335IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00008634
Sponsored Call V...400332182025-05-13 1:02:10247 days ago1747098130IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991
Sponsored Call V...400327572025-05-13 0:22:15247 days ago1747095735IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000001
Sponsored Call V...400310222025-05-12 21:52:15247 days ago1747086735IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000001
Sponsored Call V...400299832025-05-12 20:22:15247 days ago1747081335IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000001
Sponsored Call V...400289462025-05-12 18:52:20247 days ago1747075940IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000075111.00154549
Sponsored Call V...400268632025-05-12 15:52:15247 days ago1747065135IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.0000031
Sponsored Call V...400255952025-05-12 14:02:10247 days ago1747058530IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000088
Sponsored Call V...400227022025-05-12 9:52:15247 days ago1747043535IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074991.00000001
Sponsored Call V...400164402025-05-12 0:52:10248 days ago1747011130IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074971
Sponsored Call V...400143762025-05-11 21:52:10248 days ago1747000330IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000001
Sponsored Call V...400122922025-05-11 18:52:15248 days ago1746989535IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074961.00002115
Sponsored Call V...400102022025-05-11 15:52:20248 days ago1746978740IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000074981.00000003
Sponsored Call V...400088002025-05-11 13:50:20248 days ago1746971420IN
Gelato Network: Relay 1Balance V2
0 XDAI0.000056691.00000027
View all transactions

Latest 1 internal transaction

Parent Transaction Hash Block From To
322169072024-01-31 9:09:55714 days ago1706692195  Contract Creation0 XDAI
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GelatoRelay1BalanceV2

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 999999 runs

Other Settings:
paris EvmVersion, MIT license
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import {IGelatoRelay1BalanceV2} from "./interfaces/IGelatoRelay1BalanceV2.sol";
import {IGelato1BalanceV2} from "./interfaces/IGelato1BalanceV2.sol";
import {GelatoCallUtils} from "./lib/GelatoCallUtils.sol";

/// @title  Gelato Relay V2 contract
/// @notice This contract deals with Gelato 1Balance payments
/// @dev    This contract must NEVER hold funds!
/// @dev    Maliciously crafted transaction payloads could wipe out any funds left here
// solhint-disable-next-line max-states-count
contract GelatoRelay1BalanceV2 is IGelatoRelay1BalanceV2, IGelato1BalanceV2 {
    using GelatoCallUtils for address;

    /// @notice Relay call + One Balance payment - with sponsor authentication
    /// @dev    This method can be called directly without passing through the diamond
    /// @dev    The validity of the emitted LogUseGelato1BalanceV2 event must be verified off-chain
    /// @dev    Payment is handled with off-chain accounting using Gelato's 1Balance system
    /// @param _target Relay call target
    /// @param _data Relay call data
    /// @param _correlationId Unique task identifier generated by gelato
    /// Signature is split into `r` and `vs` - See https://eips.ethereum.org/EIPS/eip-2098
    /// @param _r Checker signature
    /// @param _vs Checker signature
    function sponsoredCallV2(
        address _target,
        bytes calldata _data,
        bytes32 _correlationId,
        bytes32 _r,
        bytes32 _vs
    ) external {
        // These parameters are decoded from calldata
        (_correlationId);
        (_r);
        (_vs);

        // INTERACTIONS
        _target.revertingContractCall(_data, "GelatoRelay.sponsoredCallV2:");

        emit LogUseGelato1BalanceV2();
    }
}

File 2 of 5 : IGelato1BalanceV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

interface IGelato1BalanceV2 {
    event LogUseGelato1BalanceV2();
}

File 3 of 5 : IGelatoRelay1BalanceV2.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

interface IGelatoRelay1BalanceV2 {
    function sponsoredCallV2(
        address _target,
        bytes calldata _data,
        bytes32 _correlationId,
        bytes32 _r,
        bytes32 _vs
    ) external;
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

library GelatoBytes {
    function calldataSliceSelector(
        bytes calldata _bytes
    ) internal pure returns (bytes4 selector) {
        selector =
            _bytes[0] |
            (bytes4(_bytes[1]) >> 8) |
            (bytes4(_bytes[2]) >> 16) |
            (bytes4(_bytes[3]) >> 24);
    }

    function memorySliceSelector(
        bytes memory _bytes
    ) internal pure returns (bytes4 selector) {
        selector =
            _bytes[0] |
            (bytes4(_bytes[1]) >> 8) |
            (bytes4(_bytes[2]) >> 16) |
            (bytes4(_bytes[3]) >> 24);
    }

    function revertWithError(
        bytes memory _bytes,
        string memory _tracingInfo
    ) internal pure {
        // 68: 32-location, 32-length, 4-ErrorSelector, UTF-8 err
        if (_bytes.length % 32 == 4) {
            bytes4 selector;
            assembly {
                selector := mload(add(0x20, _bytes))
            }
            if (selector == 0x08c379a0) {
                // Function selector for Error(string)
                assembly {
                    _bytes := add(_bytes, 68)
                }
                revert(string(abi.encodePacked(_tracingInfo, string(_bytes))));
            } else {
                revert(
                    string(abi.encodePacked(_tracingInfo, "NoErrorSelector"))
                );
            }
        } else {
            revert(
                string(abi.encodePacked(_tracingInfo, "UnexpectedReturndata"))
            );
        }
    }

    function returnError(
        bytes memory _bytes,
        string memory _tracingInfo
    ) internal pure returns (string memory) {
        // 68: 32-location, 32-length, 4-ErrorSelector, UTF-8 err
        if (_bytes.length % 32 == 4) {
            bytes4 selector;
            assembly {
                selector := mload(add(0x20, _bytes))
            }
            if (selector == 0x08c379a0) {
                // Function selector for Error(string)
                assembly {
                    _bytes := add(_bytes, 68)
                }
                return string(abi.encodePacked(_tracingInfo, string(_bytes)));
            } else {
                return
                    string(abi.encodePacked(_tracingInfo, "NoErrorSelector"));
            }
        } else {
            return
                string(abi.encodePacked(_tracingInfo, "UnexpectedReturndata"));
        }
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import {GelatoBytes} from "./GelatoBytes.sol";

library GelatoCallUtils {
    using GelatoBytes for bytes;

    function revertingContractCall(
        address _contract,
        bytes memory _data,
        string memory _errorMsg
    ) internal returns (bytes memory returndata) {
        bool success;
        (success, returndata) = _contract.call(_data);

        // solhint-disable-next-line max-line-length
        // https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/f9b6fc3fdab7aca33a9cfa8837c5cd7f67e176be/contracts/utils/AddressUpgradeable.sol#L177
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(
                    isContract(_contract),
                    string(abi.encodePacked(_errorMsg, "Call to non contract"))
                );
            }
        } else {
            returndata.revertWithError(_errorMsg);
        }
    }

    // solhint-disable-next-line max-line-length
    // https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/f9b6fc3fdab7aca33a9cfa8837c5cd7f67e176be/contracts/utils/AddressUpgradeable.sol#L36
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[],"name":"LogUseGelato1BalanceV2","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes32","name":"_correlationId","type":"bytes32"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_vs","type":"bytes32"}],"name":"sponsoredCallV2","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506105bb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ad718d2a14610030575b600080fd5b61004361003e366004610312565b610045565b005b6100d185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601c81527f47656c61746f52656c61792e73706f6e736f72656443616c6c56323a00000000602082015273ffffffffffffffffffffffffffffffffffffffff8b169392509050610103565b506040517f8e4f8b7f1299a63a6b46587ec357933d2006e5697cd46d99297e670cee1dbeb190600090a1505050505050565b606060008473ffffffffffffffffffffffffffffffffffffffff168460405161012c91906103eb565b6000604051808303816000865af19150503d8060008114610169576040519150601f19603f3d011682016040523d82523d6000602084013e61016e565b606091505b509250905080156102045781516000036101ff5773ffffffffffffffffffffffffffffffffffffffff85163b1515836040516020016101ad9190610407565b604051602081830303815290604052906101fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f49190610448565b60405180910390fd5b505b61020e565b61020e8284610216565b509392505050565b602082516102249190610499565b6004036103015760208201517fffffffff0000000000000000000000000000000000000000000000000000000081167f08c379a000000000000000000000000000000000000000000000000000000000036102f05760448301925081836040516020016102929291906104d4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526101f491600401610448565b816040516020016102929190610503565b806040516020016102929190610544565b60008060008060008060a0878903121561032b57600080fd5b863573ffffffffffffffffffffffffffffffffffffffff8116811461034f57600080fd5b9550602087013567ffffffffffffffff8082111561036c57600080fd5b818901915089601f83011261038057600080fd5b81358181111561038f57600080fd5b8a60208285010111156103a157600080fd5b979a60209290920199509697604081013597506060810135965060800135945092505050565b60005b838110156103e25781810151838201526020016103ca565b50506000910152565b600082516103fd8184602087016103c7565b9190910192915050565b600082516104198184602087016103c7565b7f43616c6c20746f206e6f6e20636f6e7472616374000000000000000000000000920191825250601401919050565b60208152600082518060208401526104678160408501602087016103c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000826104cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600083516104e68184602088016103c7565b8351908301906104fa8183602088016103c7565b01949350505050565b600082516105158184602087016103c7565b7f4e6f4572726f7253656c6563746f720000000000000000000000000000000000920191825250600f01919050565b600082516105568184602087016103c7565b7f556e657870656374656452657475726e6461746100000000000000000000000092019182525060140191905056fea2646970667358221220582610a37287a07756e82c4742887f464821fa0391645f7cf8c1a59deaf80aa564736f6c63430008140033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ad718d2a14610030575b600080fd5b61004361003e366004610312565b610045565b005b6100d185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601c81527f47656c61746f52656c61792e73706f6e736f72656443616c6c56323a00000000602082015273ffffffffffffffffffffffffffffffffffffffff8b169392509050610103565b506040517f8e4f8b7f1299a63a6b46587ec357933d2006e5697cd46d99297e670cee1dbeb190600090a1505050505050565b606060008473ffffffffffffffffffffffffffffffffffffffff168460405161012c91906103eb565b6000604051808303816000865af19150503d8060008114610169576040519150601f19603f3d011682016040523d82523d6000602084013e61016e565b606091505b509250905080156102045781516000036101ff5773ffffffffffffffffffffffffffffffffffffffff85163b1515836040516020016101ad9190610407565b604051602081830303815290604052906101fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f49190610448565b60405180910390fd5b505b61020e565b61020e8284610216565b509392505050565b602082516102249190610499565b6004036103015760208201517fffffffff0000000000000000000000000000000000000000000000000000000081167f08c379a000000000000000000000000000000000000000000000000000000000036102f05760448301925081836040516020016102929291906104d4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526101f491600401610448565b816040516020016102929190610503565b806040516020016102929190610544565b60008060008060008060a0878903121561032b57600080fd5b863573ffffffffffffffffffffffffffffffffffffffff8116811461034f57600080fd5b9550602087013567ffffffffffffffff8082111561036c57600080fd5b818901915089601f83011261038057600080fd5b81358181111561038f57600080fd5b8a60208285010111156103a157600080fd5b979a60209290920199509697604081013597506060810135965060800135945092505050565b60005b838110156103e25781810151838201526020016103ca565b50506000910152565b600082516103fd8184602087016103c7565b9190910192915050565b600082516104198184602087016103c7565b7f43616c6c20746f206e6f6e20636f6e7472616374000000000000000000000000920191825250601401919050565b60208152600082518060208401526104678160408501602087016103c7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000826104cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b600083516104e68184602088016103c7565b8351908301906104fa8183602088016103c7565b01949350505050565b600082516105158184602087016103c7565b7f4e6f4572726f7253656c6563746f720000000000000000000000000000000000920191825250600f01919050565b600082516105568184602087016103c7565b7f556e657870656374656452657475726e6461746100000000000000000000000092019182525060140191905056fea2646970667358221220582610a37287a07756e82c4742887f464821fa0391645f7cf8c1a59deaf80aa564736f6c63430008140033

Block Transaction Gas Used Reward
view all blocks validated

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.