Sepolia Testnet

Contract

0xbc4bcb24c7e4A15389D538059C7C3910d6c2b534

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Invoke Callbacks39646442023-07-26 0:06:36538 days ago1690329996IN
0xbc4bcb24...0d6c2b534
0 ETH0.000835653.00000002

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BonsaiRelay

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, Apache-2.0 license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 3 : BonsaiRelay.sol
// Copyright 2023 RISC Zero, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.17;

import {IBonsaiRelay, Callback, CallbackAuthorization} from "./IBonsaiRelay.sol";
import {IRiscZeroVerifier} from "./IRiscZeroVerifier.sol";

/// @notice Bonsai Relay contract supporting authenticated communication from zkVM guest programs.
contract BonsaiRelay is IBonsaiRelay {
    IRiscZeroVerifier internal immutable verifier;

    constructor(IRiscZeroVerifier verifier_) {
        verifier = verifier_;
    }

    /// @inheritdoc IBonsaiRelay
    function requestCallback(
        bytes32 imageId,
        bytes calldata input,
        address callbackContract,
        bytes4 functionSelector,
        uint64 gasLimit
    ) external {
        // Emit event
        emit CallbackRequest(msg.sender, imageId, input, callbackContract, functionSelector, gasLimit);
    }

    function parsePayload(bytes calldata payload) public pure returns (bytes32, bytes calldata) {
        bytes32 imageId = bytes32(payload[payload.length - 32:]);
        bytes calldata journal = payload[4:payload.length - 32];
        return (imageId, journal);
    }

    /// @inheritdoc IBonsaiRelay
    function callbackIsAuthorized(bytes32 imageId, bytes calldata journal, CallbackAuthorization calldata auth)
        public
        view
        returns (bool)
    {
        return verifier.verify(auth.seal, imageId, auth.postStateDigest, sha256(journal));
    }

    /// @inheritdoc IBonsaiRelay
    function invokeCallbacks(Callback[] calldata callbacks) external returns (bool[] memory invocationResults) {
        invocationResults = new bool[](callbacks.length);
        for (uint256 i = 0; i < callbacks.length; i++) {
            Callback calldata callback = callbacks[i];

            // Validate Callback authorization proof.
            (bytes32 imageId, bytes calldata journal) = parsePayload(callback.payload);
            require(callbackIsAuthorized(imageId, journal, callback.auth));

            // invoke callback
            (invocationResults[i],) = callback.callbackContract.call{gas: callback.gasLimit}(callback.payload);
        }
    }

    /// @inheritdoc IBonsaiRelay
    function invokeCallback(Callback calldata callback) external {
        // Validate Callback authorization proof.
        (bytes32 imageId, bytes calldata journal) = parsePayload(callback.payload);
        require(callbackIsAuthorized(imageId, journal, callback.auth));

        // invoke callback
        (bool success, bytes memory data) = callback.callbackContract.call{gas: callback.gasLimit}(callback.payload);
        if (!success) {
            assembly {
                revert(add(data, 32), mload(data))
            }
        }
    }
}

File 2 of 3 : IBonsaiRelay.sol
// Copyright 2023 RISC Zero, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.17;

/// @notice Data required to authorize a callback to be sent through the relay.
struct CallbackAuthorization {
    /// @notice SNARK proof acting as the cryptographic seal over the execution results.
    bytes seal;
    /// @notice Digest of the zkVM SystemState after execution.
    /// @dev The relay does not additionally check any property of this digest, but needs the
    /// digest in order to reconstruct the ReceiptMetadata hash to which the proof is linked.
    bytes32 postStateDigest;
}

/// @notice Callback data, provided by the Relay service.
struct Callback {
    CallbackAuthorization auth;
    /// @notice address of the contract to receive the callback.
    address callbackContract;
    /// @notice payload containing the callback function selector, journal bytes, and image ID.
    /// @dev payload is destructured and checked against the authorization data to ensure that
    ///     the journal is a valid execution result of the zkVM guest defined by the image ID.
    ///     The payload is then used directly as the calldata for the callback.
    bytes payload;
    /// @notice maximum amount of gas the callback function may use.
    uint64 gasLimit;
}

/// @notice The interface for the Bonsai relay contract
interface IBonsaiRelay {
    /// @notice Event emitted upon rceiving a callback request through requestCallback.
    event CallbackRequest(
        address account,
        bytes32 imageId,
        bytes input,
        address callbackContract,
        bytes4 functionSelector,
        uint64 gasLimit
    );

    /// @notice Submit request to receive a callback.
    /// @dev This function will usually be called be the Bonsai user's application contract, and
    ///     will log an event that the Bonsai Relay will detect and respond to.
    function requestCallback(
        bytes32 imageId,
        bytes calldata input,
        address callbackContract,
        bytes4 functionSelector,
        uint64 gasLimit
    ) external;

    /// @notice Determines if the given athorization is valid for the image ID and journal.
    /// @dev A (imageId, jounral) pair should be valid, and the respective callback authorized, if
    ///     and only if the journal is the result of the correct execution of the zkVM guest.
    function callbackIsAuthorized(bytes32 imageId, bytes calldata journal, CallbackAuthorization calldata auth)
        external
        view
        returns (bool);

    /// @notice Submit a batch of callbacks, authorized by an attached SNARK proof.
    /// @dev This function is usually called by the Bonsai Relay. Note that this function does not
    ///     revert when one of the inner callbacks reverts.
    /// @return invocationResults a list of booleans indicated if the calldata succeeded or failed.
    function invokeCallbacks(Callback[] calldata callbacks) external returns (bool[] memory invocationResults);

    /// @notice Submit a single callback, authorized by an attached SNARK proof.
    /// @dev This function is usually called by the Bonsai Relay. This function reverts if the callback fails.
    function invokeCallback(Callback calldata callback) external;
}

File 3 of 3 : IRiscZeroVerifier.sol
// Copyright 2023 RISC Zero, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.9;

/// @notice Indicator for the overall system at the end of execution covered by this proof.
enum SystemExitCode {
    Halted,
    Paused,
    SystemSplit
}

/// @notice Combination of system and user exit codes.
/// @dev If system exit code is SystemSplit, the user exit code must be zero.
struct ExitCode {
    SystemExitCode system;
    uint8 user;
}

/// @notice Data associated with a receipt which is used for both input and
/// output of global state.
struct ReceiptMetadata {
    /// Digest of the SystemState of a segment just before execution has begun.
    bytes32 preStateDigest;
    /// Digest of the SystemState of a segment just after execution has completed.
    bytes32 postStateDigest;
    /// The exit code for a segment
    ExitCode exitCode;
    /// A digest of the input, from the viewpoint of the guest.
    bytes32 input;
    /// A digest of the journal, from the viewpoint of the guest.
    bytes32 output;
}

library ReceiptMetadataLib {
    bytes32 constant TAG_DIGEST = sha256("risc0.ReceiptMeta");

    function digest(ReceiptMetadata memory meta) internal pure returns (bytes32) {
        return sha256(
            abi.encodePacked(
                TAG_DIGEST,
                // down
                meta.input,
                meta.preStateDigest,
                meta.postStateDigest,
                meta.output,
                // data
                uint32(meta.exitCode.system) << 24,
                uint32(meta.exitCode.user) << 24,
                // down.length
                uint16(4) << 8
            )
        );
    }
}

struct Receipt {
    bytes seal;
    ReceiptMetadata meta;
}

interface IRiscZeroVerifier {
    /// @notice verify that the given receipt is a valid Groth16 RISC Zero recursion receipt.
    /// @return true if the receipt passes the verification checks.
    function verify(Receipt calldata receipt) external view returns (bool);

    /// @notice verifies that the given seal is a valid Groth16 RISC Zero proof of execution over the
    ///     given image ID, post-state digest, and journal. Asserts that the input hash
    //      is all-zeros (i.e. no committed input) and the exit code is (Halted, 0).
    /// @return true if the receipt passes the verification checks.
    function verify(bytes calldata seal, bytes32 imageId, bytes32 postStateDigest, bytes32 journalHash)
        external
        view
        returns (bool);
}

Settings
{
  "remappings": [
    "bonsai/=lib/risc0/bonsai/ethereum/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "murky/=lib/murky/src/",
    "murky_differential_testing/=lib/murky/differential_testing/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/",
    "risc0/=lib/risc0/",
    "solidity-bytes-utils/=lib/solidity-bytes-utils/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"contract IRiscZeroVerifier","name":"verifier_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bytes32","name":"imageId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"input","type":"bytes"},{"indexed":false,"internalType":"address","name":"callbackContract","type":"address"},{"indexed":false,"internalType":"bytes4","name":"functionSelector","type":"bytes4"},{"indexed":false,"internalType":"uint64","name":"gasLimit","type":"uint64"}],"name":"CallbackRequest","type":"event"},{"inputs":[{"internalType":"bytes32","name":"imageId","type":"bytes32"},{"internalType":"bytes","name":"journal","type":"bytes"},{"components":[{"internalType":"bytes","name":"seal","type":"bytes"},{"internalType":"bytes32","name":"postStateDigest","type":"bytes32"}],"internalType":"struct CallbackAuthorization","name":"auth","type":"tuple"}],"name":"callbackIsAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"seal","type":"bytes"},{"internalType":"bytes32","name":"postStateDigest","type":"bytes32"}],"internalType":"struct CallbackAuthorization","name":"auth","type":"tuple"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint64","name":"gasLimit","type":"uint64"}],"internalType":"struct Callback","name":"callback","type":"tuple"}],"name":"invokeCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"seal","type":"bytes"},{"internalType":"bytes32","name":"postStateDigest","type":"bytes32"}],"internalType":"struct CallbackAuthorization","name":"auth","type":"tuple"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"uint64","name":"gasLimit","type":"uint64"}],"internalType":"struct Callback[]","name":"callbacks","type":"tuple[]"}],"name":"invokeCallbacks","outputs":[{"internalType":"bool[]","name":"invocationResults","type":"bool[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"parsePayload","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"imageId","type":"bytes32"},{"internalType":"bytes","name":"input","type":"bytes"},{"internalType":"address","name":"callbackContract","type":"address"},{"internalType":"bytes4","name":"functionSelector","type":"bytes4"},{"internalType":"uint64","name":"gasLimit","type":"uint64"}],"name":"requestCallback","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610aff380380610aff83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610a7461008b600039600061027e0152610a746000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806313ef14121461005c57806359611e671461008557806383a19d39146100a8578063df055cf1146100bd578063e80802a2146100df575b600080fd5b61006f61006a3660046104f4565b6100f2565b60405161007c9190610569565b60405180910390f35b6100986100933660046105f8565b610272565b604051901515815260200161007c565b6100bb6100b6366004610670565b61036f565b005b6100d06100cb3660046106b2565b610451565b60405161007c9392919061071d565b6100bb6100ed36600461076b565b6104a9565b60608167ffffffffffffffff81111561010d5761010d6107f8565b604051908082528060200260200182016040528015610136578160200160208202803683370190505b50905060005b8281101561026b57368484838181106101575761015761080e565b90506020028101906101699190610824565b90506000368161017f6100cb6040860186610844565b91945092509050610196838383610093888061088b565b61019f57600080fd5b6101af60408501602086016108a1565b6001600160a01b03166101c860808601606087016108bc565b67ffffffffffffffff166101df6040870187610844565b6040516101ed9291906108d7565b60006040518083038160008787f1925050503d806000811461022b576040519150601f19603f3d011682016040523d82523d6000602084013e610230565b606091505b50508686815181106102445761024461080e565b60200260200101811515151581525050505050508080610263906108fd565b91505061013c565b5092915050565b60006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016636efef0096102ad8480610844565b88866020013560028a8a6040516102c59291906108d7565b602060405180830381855afa1580156102e2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906103059190610916565b6040518663ffffffff1660e01b815260040161032595949392919061092f565b602060405180830381865afa158015610342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103669190610960565b95945050505050565b600036816103836100cb6040860186610844565b9194509250905061039a838383610093888061088b565b6103a357600080fd5b6000806103b660408701602088016108a1565b6001600160a01b03166103cf60808801606089016108bc565b67ffffffffffffffff166103e66040890189610844565b6040516103f49291906108d7565b60006040518083038160008787f1925050503d8060008114610432576040519150601f19603f3d011682016040523d82523d6000602084013e610437565b606091505b50915091508161044957805160208201fd5b505050505050565b60003681808585610463602082610982565b61046e92829061099b565b610477916109c5565b90503660008760048861048b602082610982565b926104989392919061099b565b939650945091925050509250925092565b7f105b7c9dbbc865638cd7873341700bcf4c62dfc9a4f221425b56fde3408f6a85338787878787876040516104e497969594939291906109e3565b60405180910390a1505050505050565b6000806020838503121561050757600080fd5b823567ffffffffffffffff8082111561051f57600080fd5b818501915085601f83011261053357600080fd5b81358181111561054257600080fd5b8660208260051b850101111561055757600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156105a3578351151583529284019291840191600101610585565b50909695505050505050565b60008083601f8401126105c157600080fd5b50813567ffffffffffffffff8111156105d957600080fd5b6020830191508360208285010111156105f157600080fd5b9250929050565b6000806000806060858703121561060e57600080fd5b84359350602085013567ffffffffffffffff8082111561062d57600080fd5b610639888389016105af565b9095509350604087013591508082111561065257600080fd5b5085016040818803121561066557600080fd5b939692955090935050565b60006020828403121561068257600080fd5b813567ffffffffffffffff81111561069957600080fd5b8201608081850312156106ab57600080fd5b9392505050565b600080602083850312156106c557600080fd5b823567ffffffffffffffff8111156106dc57600080fd5b6106e8858286016105af565b90969095509350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006103666040830184866106f4565b80356001600160a01b038116811461074e57600080fd5b919050565b803567ffffffffffffffff8116811461074e57600080fd5b60008060008060008060a0878903121561078457600080fd5b86359550602087013567ffffffffffffffff8111156107a257600080fd5b6107ae89828a016105af565b90965094506107c1905060408801610737565b925060608701356001600160e01b0319811681146107de57600080fd5b91506107ec60808801610753565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261083a57600080fd5b9190910192915050565b6000808335601e1984360301811261085b57600080fd5b83018035915067ffffffffffffffff82111561087657600080fd5b6020019150368190038213156105f157600080fd5b60008235603e1983360301811261083a57600080fd5b6000602082840312156108b357600080fd5b6106ab82610737565b6000602082840312156108ce57600080fd5b6106ab82610753565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161090f5761090f6108e7565b5060010190565b60006020828403121561092857600080fd5b5051919050565b6080815260006109436080830187896106f4565b602083019590955250604081019290925260609091015292915050565b60006020828403121561097257600080fd5b815180151581146106ab57600080fd5b81810381811115610995576109956108e7565b92915050565b600080858511156109ab57600080fd5b838611156109b857600080fd5b5050820193919092039150565b8035602083101561099557600019602084900360031b1b1692915050565b600060018060a01b03808a16835288602084015260c06040840152610a0c60c08401888a6106f4565b95166060830152506001600160e01b031992909216608083015267ffffffffffffffff1660a09091015294935050505056fea264697066735822122003ac9c6dd9bea5437e7b2b9490caa35c3076bc4bfeb7213bf71dae865c97d41264736f6c634300081400330000000000000000000000009e60edb688cc78dd4fe2f0a838dcfe8b52b69a1d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c806313ef14121461005c57806359611e671461008557806383a19d39146100a8578063df055cf1146100bd578063e80802a2146100df575b600080fd5b61006f61006a3660046104f4565b6100f2565b60405161007c9190610569565b60405180910390f35b6100986100933660046105f8565b610272565b604051901515815260200161007c565b6100bb6100b6366004610670565b61036f565b005b6100d06100cb3660046106b2565b610451565b60405161007c9392919061071d565b6100bb6100ed36600461076b565b6104a9565b60608167ffffffffffffffff81111561010d5761010d6107f8565b604051908082528060200260200182016040528015610136578160200160208202803683370190505b50905060005b8281101561026b57368484838181106101575761015761080e565b90506020028101906101699190610824565b90506000368161017f6100cb6040860186610844565b91945092509050610196838383610093888061088b565b61019f57600080fd5b6101af60408501602086016108a1565b6001600160a01b03166101c860808601606087016108bc565b67ffffffffffffffff166101df6040870187610844565b6040516101ed9291906108d7565b60006040518083038160008787f1925050503d806000811461022b576040519150601f19603f3d011682016040523d82523d6000602084013e610230565b606091505b50508686815181106102445761024461080e565b60200260200101811515151581525050505050508080610263906108fd565b91505061013c565b5092915050565b60006001600160a01b037f0000000000000000000000009e60edb688cc78dd4fe2f0a838dcfe8b52b69a1d16636efef0096102ad8480610844565b88866020013560028a8a6040516102c59291906108d7565b602060405180830381855afa1580156102e2573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906103059190610916565b6040518663ffffffff1660e01b815260040161032595949392919061092f565b602060405180830381865afa158015610342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103669190610960565b95945050505050565b600036816103836100cb6040860186610844565b9194509250905061039a838383610093888061088b565b6103a357600080fd5b6000806103b660408701602088016108a1565b6001600160a01b03166103cf60808801606089016108bc565b67ffffffffffffffff166103e66040890189610844565b6040516103f49291906108d7565b60006040518083038160008787f1925050503d8060008114610432576040519150601f19603f3d011682016040523d82523d6000602084013e610437565b606091505b50915091508161044957805160208201fd5b505050505050565b60003681808585610463602082610982565b61046e92829061099b565b610477916109c5565b90503660008760048861048b602082610982565b926104989392919061099b565b939650945091925050509250925092565b7f105b7c9dbbc865638cd7873341700bcf4c62dfc9a4f221425b56fde3408f6a85338787878787876040516104e497969594939291906109e3565b60405180910390a1505050505050565b6000806020838503121561050757600080fd5b823567ffffffffffffffff8082111561051f57600080fd5b818501915085601f83011261053357600080fd5b81358181111561054257600080fd5b8660208260051b850101111561055757600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156105a3578351151583529284019291840191600101610585565b50909695505050505050565b60008083601f8401126105c157600080fd5b50813567ffffffffffffffff8111156105d957600080fd5b6020830191508360208285010111156105f157600080fd5b9250929050565b6000806000806060858703121561060e57600080fd5b84359350602085013567ffffffffffffffff8082111561062d57600080fd5b610639888389016105af565b9095509350604087013591508082111561065257600080fd5b5085016040818803121561066557600080fd5b939692955090935050565b60006020828403121561068257600080fd5b813567ffffffffffffffff81111561069957600080fd5b8201608081850312156106ab57600080fd5b9392505050565b600080602083850312156106c557600080fd5b823567ffffffffffffffff8111156106dc57600080fd5b6106e8858286016105af565b90969095509350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8381526040602082015260006103666040830184866106f4565b80356001600160a01b038116811461074e57600080fd5b919050565b803567ffffffffffffffff8116811461074e57600080fd5b60008060008060008060a0878903121561078457600080fd5b86359550602087013567ffffffffffffffff8111156107a257600080fd5b6107ae89828a016105af565b90965094506107c1905060408801610737565b925060608701356001600160e01b0319811681146107de57600080fd5b91506107ec60808801610753565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008235607e1983360301811261083a57600080fd5b9190910192915050565b6000808335601e1984360301811261085b57600080fd5b83018035915067ffffffffffffffff82111561087657600080fd5b6020019150368190038213156105f157600080fd5b60008235603e1983360301811261083a57600080fd5b6000602082840312156108b357600080fd5b6106ab82610737565b6000602082840312156108ce57600080fd5b6106ab82610753565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161090f5761090f6108e7565b5060010190565b60006020828403121561092857600080fd5b5051919050565b6080815260006109436080830187896106f4565b602083019590955250604081019290925260609091015292915050565b60006020828403121561097257600080fd5b815180151581146106ab57600080fd5b81810381811115610995576109956108e7565b92915050565b600080858511156109ab57600080fd5b838611156109b857600080fd5b5050820193919092039150565b8035602083101561099557600019602084900360031b1b1692915050565b600060018060a01b03808a16835288602084015260c06040840152610a0c60c08401888a6106f4565b95166060830152506001600160e01b031992909216608083015267ffffffffffffffff1660a09091015294935050505056fea264697066735822122003ac9c6dd9bea5437e7b2b9490caa35c3076bc4bfeb7213bf71dae865c97d41264736f6c63430008140033

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

0000000000000000000000009e60edb688cc78dd4fe2f0a838dcfe8b52b69a1d

-----Decoded View---------------
Arg [0] : verifier_ (address): 0x9e60EDB688CC78dd4Fe2F0a838dCFe8B52b69A1D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009e60edb688cc78dd4fe2f0a838dcfe8b52b69a1d


Deployed Bytecode Sourcemap

902:2382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2044:657;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1744:261;;;;;;:::i;:::-;;:::i;:::-;;;2605:14:3;;2598:22;2580:41;;2568:2;2553:18;1744:261:0;2440:187:3;2740:542:0;;;;;;:::i;:::-;;:::i;:::-;;1440:265;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1114:320::-;;;;;;:::i;:::-;;:::i;2044:657::-;2118:31;2192:9;2181:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2181:28:0;;2161:48;;2224:9;2219:476;2239:20;;;2219:476;;;2280:26;2309:9;;2319:1;2309:12;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2280:41;-1:-1:-1;2391:15:0;2408:22;2391:15;2434:30;2447:16;;;;2280:41;2447:16;:::i;2434:30::-;2390:74;;-1:-1:-1;2390:74:0;-1:-1:-1;2390:74:0;-1:-1:-1;2486:53:0;2390:74;;;2525:13;:8;;:13;:::i;2486:53::-;2478:62;;;;;;2612:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2612:30:0;2648:17;;;;;;;;:::i;:::-;2612:72;;2667:16;;;;:8;:16;:::i;:::-;2612:72;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2586:98;2587:17;2605:1;2587:20;;;;;;;;:::i;:::-;;;;;;2586:98;;;;;;;;;2266:429;;;;2261:3;;;;;:::i;:::-;;;;2219:476;;;;2044:657;;;;:::o;1744:261::-;1897:4;-1:-1:-1;;;;;1924:8:0;:15;;1940:9;:4;;:9;:::i;:::-;1951:7;1960:4;:20;;;1982:15;1989:7;;1982:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1924:74;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1917:81;1744:261;-1:-1:-1;;;;;1744:261:0:o;2740:542::-;2862:15;2879:22;2862:15;2905:30;2918:16;;;;:8;:16;:::i;2905:30::-;2861:74;;-1:-1:-1;2861:74:0;-1:-1:-1;2861:74:0;-1:-1:-1;2953:53:0;2861:74;;;2992:13;:8;;:13;:::i;2953:53::-;2945:62;;;;;;3046:12;;3081:25;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3081:30:0;3117:17;;;;;;;;:::i;:::-;3081:72;;3136:16;;;;:8;:16;:::i;:::-;3081:72;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:108;;;;3168:7;3163:113;;3246:4;3240:11;3235:2;3229:4;3225:13;3218:34;3163:113;2801:481;;;;;2740:542;:::o;1440:265::-;1507:7;1516:14;1507:7;;1568;;1576:19;1593:2;1568:7;1576:19;:::i;:::-;1568:29;;;;;:::i;:::-;1560:38;;;:::i;:::-;1542:56;-1:-1:-1;1608:22:0;;1633:7;1641:1;1633:7;1643:19;1660:2;1633:7;1643:19;:::i;:::-;1633:30;;;;;;;:::i;:::-;1681:7;;-1:-1:-1;1608:55:0;-1:-1:-1;1608:55:0;;-1:-1:-1;;;1440:265:0;;;;;:::o;1114:320::-;1338:89;1354:10;1366:7;1375:5;;1382:16;1400;1418:8;1338:89;;;;;;;;;;;;:::i;:::-;;;;;;;;1114:320;;;;;;:::o;14:642:3:-;127:6;135;188:2;176:9;167:7;163:23;159:32;156:52;;;204:1;201;194:12;156:52;244:9;231:23;273:18;314:2;306:6;303:14;300:34;;;330:1;327;320:12;300:34;368:6;357:9;353:22;343:32;;413:7;406:4;402:2;398:13;394:27;384:55;;435:1;432;425:12;384:55;475:2;462:16;501:2;493:6;490:14;487:34;;;517:1;514;507:12;487:34;570:7;565:2;555:6;552:1;548:14;544:2;540:23;536:32;533:45;530:65;;;591:1;588;581:12;530:65;622:2;614:11;;;;;644:6;;-1:-1:-1;14:642:3;;-1:-1:-1;;;;14:642:3:o;661:::-;826:2;878:21;;;948:13;;851:18;;;970:22;;;797:4;;826:2;1049:15;;;;1023:2;1008:18;;;797:4;1092:185;1106:6;1103:1;1100:13;1092:185;;;1181:13;;1174:21;1167:29;1155:42;;1252:15;;;;1217:12;;;;1128:1;1121:9;1092:185;;;-1:-1:-1;1294:3:3;;661:642;-1:-1:-1;;;;;;661:642:3:o;1308:347::-;1359:8;1369:6;1423:3;1416:4;1408:6;1404:17;1400:27;1390:55;;1441:1;1438;1431:12;1390:55;-1:-1:-1;1464:20:3;;1507:18;1496:30;;1493:50;;;1539:1;1536;1529:12;1493:50;1576:4;1568:6;1564:17;1552:29;;1628:3;1621:4;1612:6;1604;1600:19;1596:30;1593:39;1590:59;;;1645:1;1642;1635:12;1590:59;1308:347;;;;;:::o;1660:775::-;1788:6;1796;1804;1812;1865:2;1853:9;1844:7;1840:23;1836:32;1833:52;;;1881:1;1878;1871:12;1833:52;1917:9;1904:23;1894:33;;1978:2;1967:9;1963:18;1950:32;2001:18;2042:2;2034:6;2031:14;2028:34;;;2058:1;2055;2048:12;2028:34;2097:58;2147:7;2138:6;2127:9;2123:22;2097:58;:::i;:::-;2174:8;;-1:-1:-1;2071:84:3;-1:-1:-1;2262:2:3;2247:18;;2234:32;;-1:-1:-1;2278:16:3;;;2275:36;;;2307:1;2304;2297:12;2275:36;-1:-1:-1;2330:24:3;;2388:2;2370:16;;;2366:25;2363:45;;;2404:1;2401;2394:12;2363:45;1660:775;;;;-1:-1:-1;1660:775:3;;-1:-1:-1;;1660:775:3:o;2632:387::-;2718:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:52;;;2787:1;2784;2777:12;2739:52;2827:9;2814:23;2860:18;2852:6;2849:30;2846:50;;;2892:1;2889;2882:12;2846:50;2915:22;;2971:3;2953:16;;;2949:26;2946:46;;;2988:1;2985;2978:12;2946:46;3011:2;2632:387;-1:-1:-1;;;2632:387:3:o;3024:409::-;3094:6;3102;3155:2;3143:9;3134:7;3130:23;3126:32;3123:52;;;3171:1;3168;3161:12;3123:52;3211:9;3198:23;3244:18;3236:6;3233:30;3230:50;;;3276:1;3273;3266:12;3230:50;3315:58;3365:7;3356:6;3345:9;3341:22;3315:58;:::i;:::-;3392:8;;3289:84;;-1:-1:-1;3024:409:3;-1:-1:-1;;;;3024:409:3:o;3438:266::-;3526:6;3521:3;3514:19;3578:6;3571:5;3564:4;3559:3;3555:14;3542:43;-1:-1:-1;3630:1:3;3605:16;;;3623:4;3601:27;;;3594:38;;;;3686:2;3665:15;;;-1:-1:-1;;3661:29:3;3652:39;;;3648:50;;3438:266::o;3709:315::-;3894:6;3883:9;3876:25;3937:2;3932;3921:9;3917:18;3910:30;3857:4;3957:61;4014:2;4003:9;3999:18;3991:6;3983;3957:61;:::i;4029:173::-;4097:20;;-1:-1:-1;;;;;4146:31:3;;4136:42;;4126:70;;4192:1;4189;4182:12;4126:70;4029:173;;;:::o;4207:171::-;4274:20;;4334:18;4323:30;;4313:41;;4303:69;;4368:1;4365;4358:12;4383:799;4487:6;4495;4503;4511;4519;4527;4580:3;4568:9;4559:7;4555:23;4551:33;4548:53;;;4597:1;4594;4587:12;4548:53;4633:9;4620:23;4610:33;;4694:2;4683:9;4679:18;4666:32;4721:18;4713:6;4710:30;4707:50;;;4753:1;4750;4743:12;4707:50;4792:58;4842:7;4833:6;4822:9;4818:22;4792:58;:::i;:::-;4869:8;;-1:-1:-1;4766:84:3;-1:-1:-1;4923:38:3;;-1:-1:-1;4957:2:3;4942:18;;4923:38;:::i;:::-;4913:48;-1:-1:-1;5011:2:3;4996:18;;4983:32;-1:-1:-1;;;;;;5044:32:3;;5034:43;;5024:71;;5091:1;5088;5081:12;5024:71;5114:5;-1:-1:-1;5138:38:3;5171:3;5156:19;;5138:38;:::i;:::-;5128:48;;4383:799;;;;;;;;:::o;5187:127::-;5248:10;5243:3;5239:20;5236:1;5229:31;5279:4;5276:1;5269:15;5303:4;5300:1;5293:15;5319:127;5380:10;5375:3;5371:20;5368:1;5361:31;5411:4;5408:1;5401:15;5435:4;5432:1;5425:15;5451:325;5544:4;5602:11;5589:25;5696:3;5692:8;5681;5665:14;5661:29;5657:44;5637:18;5633:69;5623:97;;5716:1;5713;5706:12;5623:97;5737:33;;;;;5451:325;-1:-1:-1;;5451:325:3:o;5781:521::-;5858:4;5864:6;5924:11;5911:25;6018:2;6014:7;6003:8;5987:14;5983:29;5979:43;5959:18;5955:68;5945:96;;6037:1;6034;6027:12;5945:96;6064:33;;6116:20;;;-1:-1:-1;6159:18:3;6148:30;;6145:50;;;6191:1;6188;6181:12;6145:50;6224:4;6212:17;;-1:-1:-1;6255:14:3;6251:27;;;6241:38;;6238:58;;;6292:1;6289;6282:12;6307:337;6413:4;6471:11;6458:25;6565:2;6561:7;6550:8;6534:14;6530:29;6526:43;6506:18;6502:68;6492:96;;6584:1;6581;6574:12;6649:186;6708:6;6761:2;6749:9;6740:7;6736:23;6732:32;6729:52;;;6777:1;6774;6767:12;6729:52;6800:29;6819:9;6800:29;:::i;6840:184::-;6898:6;6951:2;6939:9;6930:7;6926:23;6922:32;6919:52;;;6967:1;6964;6957:12;6919:52;6990:28;7008:9;6990:28;:::i;7029:271::-;7212:6;7204;7199:3;7186:33;7168:3;7238:16;;7263:13;;;7238:16;7029:271;-1:-1:-1;7029:271:3:o;7305:127::-;7366:10;7361:3;7357:20;7354:1;7347:31;7397:4;7394:1;7387:15;7421:4;7418:1;7411:15;7437:135;7476:3;7497:17;;;7494:43;;7517:18;;:::i;:::-;-1:-1:-1;7564:1:3;7553:13;;7437:135::o;7577:184::-;7647:6;7700:2;7688:9;7679:7;7675:23;7671:32;7668:52;;;7716:1;7713;7706:12;7668:52;-1:-1:-1;7739:16:3;;7577:184;-1:-1:-1;7577:184:3:o;7766:459::-;8007:3;7996:9;7989:22;7970:4;8028:62;8085:3;8074:9;8070:19;8062:6;8054;8028:62;:::i;:::-;8121:2;8106:18;;8099:34;;;;-1:-1:-1;8164:2:3;8149:18;;8142:34;;;;8207:2;8192:18;;;8185:34;8020:70;7766:459;-1:-1:-1;;7766:459:3:o;8230:277::-;8297:6;8350:2;8338:9;8329:7;8325:23;8321:32;8318:52;;;8366:1;8363;8356:12;8318:52;8398:9;8392:16;8451:5;8444:13;8437:21;8430:5;8427:32;8417:60;;8473:1;8470;8463:12;8512:128;8579:9;;;8600:11;;;8597:37;;;8614:18;;:::i;:::-;8512:128;;;;:::o;8645:331::-;8750:9;8761;8803:8;8791:10;8788:24;8785:44;;;8825:1;8822;8815:12;8785:44;8854:6;8844:8;8841:20;8838:40;;;8874:1;8871;8864:12;8838:40;-1:-1:-1;;8900:23:3;;;8945:25;;;;;-1:-1:-1;8645:331:3:o;8981:255::-;9101:19;;9140:2;9132:11;;9129:101;;;-1:-1:-1;;9201:2:3;9197:12;;;9194:1;9190:20;9186:33;9175:45;8981:255;;;;:::o;9241:707::-;9497:4;9543:1;9539;9534:3;9530:11;9526:19;9584:2;9576:6;9572:15;9561:9;9554:34;9624:6;9619:2;9608:9;9604:18;9597:34;9667:3;9662:2;9651:9;9647:18;9640:31;9688:62;9745:3;9734:9;9730:19;9722:6;9714;9688:62;:::i;:::-;9786:15;;9781:2;9766:18;;9759:43;-1:-1:-1;;;;;;;9839:33:3;;;;9833:3;9818:19;;9811:62;9922:18;9910:31;9904:3;9889:19;;;9882:60;9680:70;9241:707;-1:-1:-1;;;;9241:707:3:o

Swarm Source

ipfs://03ac9c6dd9bea5437e7b2b9490caa35c3076bc4bfeb7213bf71dae865c97d412

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.