Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Invoke Callbacks | 3964644 | 538 days ago | IN | 0 ETH | 0.00083565 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BonsaiRelay
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity Standard Json-Input format)
// 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)) } } } }
// 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; }
// 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); }
{ "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": {} }
[{"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"}]
Contract Creation Code
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
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.