Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
To
|
|||
|---|---|---|---|---|---|---|---|
| 0x60806040 | 22818451 | 136 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SP1VerifierGateway
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {ISP1Verifier, ISP1VerifierWithHash} from "./ISP1Verifier.sol";
import {ISP1VerifierGateway, VerifierRoute} from "./ISP1VerifierGateway.sol";
import {Ownable} from "../lib/openzeppelin-contracts/contracts/access/Ownable.sol";
/// @title SP1 Verifier Gateway
/// @author Succinct Labs
/// @notice This contract verifies proofs by routing to the correct verifier based on the verifier
/// selector contained in the first 4 bytes of the proof. It additionally checks that to see that
/// the verifier route is not frozen.
contract SP1VerifierGateway is ISP1VerifierGateway, Ownable {
/// @inheritdoc ISP1VerifierGateway
mapping(bytes4 => VerifierRoute) public routes;
constructor(address initialOwner) Ownable(initialOwner) {}
/// @inheritdoc ISP1Verifier
function verifyProof(
bytes32 programVKey,
bytes calldata publicValues,
bytes calldata proofBytes
) external view {
bytes4 selector = bytes4(proofBytes[:4]);
VerifierRoute memory route = routes[selector];
if (route.verifier == address(0)) {
revert RouteNotFound(selector);
} else if (route.frozen) {
revert RouteIsFrozen(selector);
}
ISP1Verifier(route.verifier).verifyProof(programVKey, publicValues, proofBytes);
}
/// @inheritdoc ISP1VerifierGateway
function addRoute(address verifier) external onlyOwner {
bytes4 selector = bytes4(ISP1VerifierWithHash(verifier).VERIFIER_HASH());
if (selector == bytes4(0)) {
revert SelectorCannotBeZero();
}
VerifierRoute storage route = routes[selector];
if (route.verifier != address(0)) {
revert RouteAlreadyExists(route.verifier);
}
route.verifier = verifier;
emit RouteAdded(selector, verifier);
}
/// @inheritdoc ISP1VerifierGateway
function freezeRoute(bytes4 selector) external onlyOwner {
VerifierRoute storage route = routes[selector];
if (route.verifier == address(0)) {
revert RouteNotFound(selector);
}
if (route.frozen) {
revert RouteIsFrozen(selector);
}
route.frozen = true;
emit RouteFrozen(selector, route.verifier);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/// @title SP1 Verifier Interface
/// @author Succinct Labs
/// @notice This contract is the interface for the SP1 Verifier.
interface ISP1Verifier {
/// @notice Verifies a proof with given public values and vkey.
/// @dev It is expected that the first 4 bytes of proofBytes must match the first 4 bytes of
/// target verifier's VERIFIER_HASH.
/// @param programVKey The verification key for the RISC-V program.
/// @param publicValues The public values encoded as bytes.
/// @param proofBytes The proof of the program execution the SP1 zkVM encoded as bytes.
function verifyProof(
bytes32 programVKey,
bytes calldata publicValues,
bytes calldata proofBytes
) external view;
}
interface ISP1VerifierWithHash is ISP1Verifier {
/// @notice Returns the hash of the verifier.
function VERIFIER_HASH() external pure returns (bytes32);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {ISP1Verifier} from "./ISP1Verifier.sol";
/// @dev A struct containing the address of a verifier and whether the verifier is frozen. A
/// frozen verifier cannot be routed to.
struct VerifierRoute {
address verifier;
bool frozen;
}
interface ISP1VerifierGatewayEvents {
/// @notice Emitted when a verifier route is added.
/// @param selector The verifier selector that was added.
/// @param verifier The address of the verifier contract.
event RouteAdded(bytes4 selector, address verifier);
/// @notice Emitted when a verifier route is frozen.
/// @param selector The verifier selector that was frozen.
/// @param verifier The address of the verifier contract.
event RouteFrozen(bytes4 selector, address verifier);
}
interface ISP1VerifierGatewayErrors {
/// @notice Thrown when the verifier route is not found.
/// @param selector The verifier selector that was specified.
error RouteNotFound(bytes4 selector);
/// @notice Thrown when the verifier route is found, but is frozen.
/// @param selector The verifier selector that was specified.
error RouteIsFrozen(bytes4 selector);
/// @notice Thrown when adding a verifier route and the selector already contains a route.
/// @param verifier The address of the verifier contract in the existing route.
error RouteAlreadyExists(address verifier);
/// @notice Thrown when adding a verifier route and the selector returned by the verifier is
/// zero.
error SelectorCannotBeZero();
}
/// @title SP1 Verifier Gateway Interface
/// @author Succinct Labs
/// @notice This contract is the interface for the SP1 Verifier Gateway.
interface ISP1VerifierGateway is
ISP1VerifierGatewayEvents,
ISP1VerifierGatewayErrors,
ISP1Verifier
{
/// @notice Mapping of 4-byte verifier selectors to verifier routes.
/// @dev Only one verifier route can be added for each selector.
/// @param selector The verifier selector, which is both the first 4 bytes of the VERIFIER_HASH
/// and the first 4 bytes of the proofs designed for that verifier.
/// @return verifier The address of the verifier contract.
/// @return frozen Whether the verifier is frozen.
function routes(bytes4 selector) external view returns (address verifier, bool frozen);
/// @notice Adds a verifier route. This enable proofs to be routed to this verifier.
/// @dev Only callable by the owner. The owner is responsible for ensuring that the specified
/// verifier is correct with a valid VERIFIER_HASH. Once a route to a verifier is added, it
/// cannot be removed.
/// @param verifier The address of the verifier contract. This verifier MUST implement the
/// ISP1VerifierWithHash interface.
function addRoute(address verifier) external;
/// @notice Freezes a verifier route. This prevents proofs from being routed to this verifier.
/// @dev Only callable by the owner. Once a route to a verifier is frozen, it cannot be
/// unfrozen.
/// @param selector The verifier selector to freeze.
function freezeRoute(bytes4 selector) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"RouteAlreadyExists","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"RouteIsFrozen","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"RouteNotFound","type":"error"},{"inputs":[],"name":"SelectorCannotBeZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"address","name":"verifier","type":"address"}],"name":"RouteAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"selector","type":"bytes4"},{"indexed":false,"internalType":"address","name":"verifier","type":"address"}],"name":"RouteFrozen","type":"event"},{"inputs":[{"internalType":"address","name":"verifier","type":"address"}],"name":"addRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"freezeRoute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"routes","outputs":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"bool","name":"frozen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"programVKey","type":"bytes32"},{"internalType":"bytes","name":"publicValues","type":"bytes"},{"internalType":"bytes","name":"proofBytes","type":"bytes"}],"name":"verifyProof","outputs":[],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801562000010575f80fd5b5060405162001108380380620011088339818101604052810190620000369190620001e9565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000aa575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a191906200022a565b60405180910390fd5b620000bb81620000c360201b60201c565b505062000245565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001b38262000188565b9050919050565b620001c581620001a7565b8114620001d0575f80fd5b50565b5f81519050620001e381620001ba565b92915050565b5f6020828403121562000201576200020062000184565b5b5f6200021084828501620001d3565b91505092915050565b6200022481620001a7565b82525050565b5f6020820190506200023f5f83018462000219565b92915050565b610eb580620002535f395ff3fe608060405234801561000f575f80fd5b506004361061007b575f3560e01c8063814856f411610059578063814856f4146100d65780638c95ff1e146100f25780638da5cb5b1461010e578063f2fde38b1461012c5761007b565b806341493c601461007f57806351c7094f1461009b578063715018a6146100cc575b5f80fd5b61009960048036038101906100949190610a8c565b610148565b005b6100b560048036038101906100b09190610b72565b610367565b6040516100c3929190610bf6565b60405180910390f35b6100d46103b2565b005b6100f060048036038101906100eb9190610b72565b6103c5565b005b61010c60048036038101906101079190610c47565b61057f565b005b6101166107f6565b6040516101239190610c72565b60405180910390f35b61014660048036038101906101419190610c47565b61081d565b005b5f82825f9060049261015c93929190610c93565b906101679190610ce3565b90505f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900460ff16151515158152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff16036102a757816040517ff208777e00000000000000000000000000000000000000000000000000000000815260040161029e9190610d50565b60405180910390fd5b8060200151156102ee57816040517febf108230000000000000000000000000000000000000000000000000000000081526004016102e59190610d50565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff166341493c6088888888886040518663ffffffff1660e01b8152600401610332959493929190610dd2565b5f6040518083038186803b158015610348575f80fd5b505afa15801561035a573d5f803e3d5ffd5b5050505050505050505050565b6001602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff16905082565b6103ba6108a1565b6103c35f610928565b565b6103cd6108a1565b5f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104b157816040517ff208777e0000000000000000000000000000000000000000000000000000000081526004016104a89190610d50565b60405180910390fd5b805f0160149054906101000a900460ff161561050457816040517febf108230000000000000000000000000000000000000000000000000000000081526004016104fb9190610d50565b60405180910390fd5b6001815f0160146101000a81548160ff0219169083151502179055507f63ad2363b183cb8bb562b9590c5b4428e2a566260df053db156576d3d171438d82825f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610573929190610e19565b60405180910390a15050565b6105876108a1565b5f8173ffffffffffffffffffffffffffffffffffffffff16632a5104366040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f59190610e54565b90505f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610671576040517f20acd28b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461077757805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f2b87e79700000000000000000000000000000000000000000000000000000000815260040161076e9190610c72565b60405180910390fd5b82815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcb5cc54fa0fda41744197b286ab4135aec7c322cace32c4f55da723d2eb8eee682846040516107e9929190610e19565b60405180910390a1505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108256108a1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610895575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161088c9190610c72565b60405180910390fd5b61089e81610928565b50565b6108a96109e9565b73ffffffffffffffffffffffffffffffffffffffff166108c76107f6565b73ffffffffffffffffffffffffffffffffffffffff1614610926576108ea6109e9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161091d9190610c72565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f80fd5b5f819050919050565b610a0a816109f8565b8114610a14575f80fd5b50565b5f81359050610a2581610a01565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610a4c57610a4b610a2b565b5b8235905067ffffffffffffffff811115610a6957610a68610a2f565b5b602083019150836001820283011115610a8557610a84610a33565b5b9250929050565b5f805f805f60608688031215610aa557610aa46109f0565b5b5f610ab288828901610a17565b955050602086013567ffffffffffffffff811115610ad357610ad26109f4565b5b610adf88828901610a37565b9450945050604086013567ffffffffffffffff811115610b0257610b016109f4565b5b610b0e88828901610a37565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610b5181610b1d565b8114610b5b575f80fd5b50565b5f81359050610b6c81610b48565b92915050565b5f60208284031215610b8757610b866109f0565b5b5f610b9484828501610b5e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc682610b9d565b9050919050565b610bd681610bbc565b82525050565b5f8115159050919050565b610bf081610bdc565b82525050565b5f604082019050610c095f830185610bcd565b610c166020830184610be7565b9392505050565b610c2681610bbc565b8114610c30575f80fd5b50565b5f81359050610c4181610c1d565b92915050565b5f60208284031215610c5c57610c5b6109f0565b5b5f610c6984828501610c33565b91505092915050565b5f602082019050610c855f830184610bcd565b92915050565b5f80fd5b5f80fd5b5f8085851115610ca657610ca5610c8b565b5b83861115610cb757610cb6610c8f565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f610cee8383610ccd565b82610cf98135610b1d565b92506004821015610d3957610d347fffffffff0000000000000000000000000000000000000000000000000000000083600403600802610cd7565b831692505b505092915050565b610d4a81610b1d565b82525050565b5f602082019050610d635f830184610d41565b92915050565b610d72816109f8565b82525050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f610db18385610d78565b9350610dbe838584610d88565b610dc783610d96565b840190509392505050565b5f606082019050610de55f830188610d69565b8181036020830152610df8818688610da6565b90508181036040830152610e0d818486610da6565b90509695505050505050565b5f604082019050610e2c5f830185610d41565b610e396020830184610bcd565b9392505050565b5f81519050610e4e81610a01565b92915050565b5f60208284031215610e6957610e686109f0565b5b5f610e7684828501610e40565b9150509291505056fea2646970667358221220c87d819049504544e9410b86685bcdebf6cf59a034b69ec6e0eb0f64cb1b914b64736f6c6343000814003300000000000000000000000023b0caa3782b5ce6be7a54655a5dd2791335eafc
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061007b575f3560e01c8063814856f411610059578063814856f4146100d65780638c95ff1e146100f25780638da5cb5b1461010e578063f2fde38b1461012c5761007b565b806341493c601461007f57806351c7094f1461009b578063715018a6146100cc575b5f80fd5b61009960048036038101906100949190610a8c565b610148565b005b6100b560048036038101906100b09190610b72565b610367565b6040516100c3929190610bf6565b60405180910390f35b6100d46103b2565b005b6100f060048036038101906100eb9190610b72565b6103c5565b005b61010c60048036038101906101079190610c47565b61057f565b005b6101166107f6565b6040516101239190610c72565b60405180910390f35b61014660048036038101906101419190610c47565b61081d565b005b5f82825f9060049261015c93929190610c93565b906101679190610ce3565b90505f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f206040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900460ff16151515158152505090505f73ffffffffffffffffffffffffffffffffffffffff16815f015173ffffffffffffffffffffffffffffffffffffffff16036102a757816040517ff208777e00000000000000000000000000000000000000000000000000000000815260040161029e9190610d50565b60405180910390fd5b8060200151156102ee57816040517febf108230000000000000000000000000000000000000000000000000000000081526004016102e59190610d50565b60405180910390fd5b805f015173ffffffffffffffffffffffffffffffffffffffff166341493c6088888888886040518663ffffffff1660e01b8152600401610332959493929190610dd2565b5f6040518083038186803b158015610348575f80fd5b505afa15801561035a573d5f803e3d5ffd5b5050505050505050505050565b6001602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff16905082565b6103ba6108a1565b6103c35f610928565b565b6103cd6108a1565b5f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104b157816040517ff208777e0000000000000000000000000000000000000000000000000000000081526004016104a89190610d50565b60405180910390fd5b805f0160149054906101000a900460ff161561050457816040517febf108230000000000000000000000000000000000000000000000000000000081526004016104fb9190610d50565b60405180910390fd5b6001815f0160146101000a81548160ff0219169083151502179055507f63ad2363b183cb8bb562b9590c5b4428e2a566260df053db156576d3d171438d82825f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610573929190610e19565b60405180910390a15050565b6105876108a1565b5f8173ffffffffffffffffffffffffffffffffffffffff16632a5104366040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f59190610e54565b90505f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610671576040517f20acd28b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020015f2090505f73ffffffffffffffffffffffffffffffffffffffff16815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461077757805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040517f2b87e79700000000000000000000000000000000000000000000000000000000815260040161076e9190610c72565b60405180910390fd5b82815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcb5cc54fa0fda41744197b286ab4135aec7c322cace32c4f55da723d2eb8eee682846040516107e9929190610e19565b60405180910390a1505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108256108a1565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610895575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161088c9190610c72565b60405180910390fd5b61089e81610928565b50565b6108a96109e9565b73ffffffffffffffffffffffffffffffffffffffff166108c76107f6565b73ffffffffffffffffffffffffffffffffffffffff1614610926576108ea6109e9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161091d9190610c72565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f80fd5b5f819050919050565b610a0a816109f8565b8114610a14575f80fd5b50565b5f81359050610a2581610a01565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610a4c57610a4b610a2b565b5b8235905067ffffffffffffffff811115610a6957610a68610a2f565b5b602083019150836001820283011115610a8557610a84610a33565b5b9250929050565b5f805f805f60608688031215610aa557610aa46109f0565b5b5f610ab288828901610a17565b955050602086013567ffffffffffffffff811115610ad357610ad26109f4565b5b610adf88828901610a37565b9450945050604086013567ffffffffffffffff811115610b0257610b016109f4565b5b610b0e88828901610a37565b92509250509295509295909350565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610b5181610b1d565b8114610b5b575f80fd5b50565b5f81359050610b6c81610b48565b92915050565b5f60208284031215610b8757610b866109f0565b5b5f610b9484828501610b5e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610bc682610b9d565b9050919050565b610bd681610bbc565b82525050565b5f8115159050919050565b610bf081610bdc565b82525050565b5f604082019050610c095f830185610bcd565b610c166020830184610be7565b9392505050565b610c2681610bbc565b8114610c30575f80fd5b50565b5f81359050610c4181610c1d565b92915050565b5f60208284031215610c5c57610c5b6109f0565b5b5f610c6984828501610c33565b91505092915050565b5f602082019050610c855f830184610bcd565b92915050565b5f80fd5b5f80fd5b5f8085851115610ca657610ca5610c8b565b5b83861115610cb757610cb6610c8f565b5b6001850283019150848603905094509492505050565b5f82905092915050565b5f82821b905092915050565b5f610cee8383610ccd565b82610cf98135610b1d565b92506004821015610d3957610d347fffffffff0000000000000000000000000000000000000000000000000000000083600403600802610cd7565b831692505b505092915050565b610d4a81610b1d565b82525050565b5f602082019050610d635f830184610d41565b92915050565b610d72816109f8565b82525050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f610db18385610d78565b9350610dbe838584610d88565b610dc783610d96565b840190509392505050565b5f606082019050610de55f830188610d69565b8181036020830152610df8818688610da6565b90508181036040830152610e0d818486610da6565b90509695505050505050565b5f604082019050610e2c5f830185610d41565b610e396020830184610bcd565b9392505050565b5f81519050610e4e81610a01565b92915050565b5f60208284031215610e6957610e686109f0565b5b5f610e7684828501610e40565b9150509291505056fea2646970667358221220c87d819049504544e9410b86685bcdebf6cf59a034b69ec6e0eb0f64cb1b914b64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023b0caa3782b5ce6be7a54655a5dd2791335eafc
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x23B0caA3782b5CE6Be7A54655A5DD2791335EAFC
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000023b0caa3782b5ce6be7a54655a5dd2791335eafc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.