Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 19659960 | 608 days ago | IN | 0 ETH | 0.00038777 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Verify | 20218128 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218128 | 530 days ago | 0 ETH | |||||
| Verify | 20218127 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218127 | 530 days ago | 0 ETH | |||||
| Verify | 20218125 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218125 | 530 days ago | 0 ETH | |||||
| Verify | 20218124 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218124 | 530 days ago | 0 ETH | |||||
| Verify | 20218123 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218123 | 530 days ago | 0 ETH | |||||
| Verify | 20218122 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218122 | 530 days ago | 0 ETH | |||||
| Verify | 20218121 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218121 | 530 days ago | 0 ETH | |||||
| Verify | 20218119 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218119 | 530 days ago | 0 ETH | |||||
| Verify | 20218118 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218118 | 530 days ago | 0 ETH | |||||
| Verify | 20218117 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218117 | 530 days ago | 0 ETH | |||||
| Verify | 20218116 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218116 | 530 days ago | 0 ETH | |||||
| Verify | 20218114 | 530 days ago | 0 ETH | |||||
| Verify Aggregate... | 20218114 | 530 days ago | 0 ETH | |||||
| Verify | 20218113 | 530 days ago | 0 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MultipleVersionRollupVerifier
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IScrollChain} from "./IScrollChain.sol";
import {IRollupVerifier} from "../../libraries/verifier/IRollupVerifier.sol";
import {IZkEvmVerifier} from "../../libraries/verifier/IZkEvmVerifier.sol";
/// @title MultipleVersionRollupVerifier
/// @notice Verifies aggregate zk proofs using the appropriate verifier.
contract MultipleVersionRollupVerifier is IRollupVerifier, Ownable {
/**********
* Events *
**********/
/// @notice Emitted when the address of verifier is updated.
/// @param version The version of the verifier.
/// @param startBatchIndex The start batch index when the verifier will be used.
/// @param verifier The address of new verifier.
event UpdateVerifier(uint256 version, uint256 startBatchIndex, address verifier);
/**********
* Errors *
**********/
/// @dev Thrown when the given address is `address(0)`.
error ErrorZeroAddress();
/// @dev Thrown when the given start batch index is finalized.
error ErrorStartBatchIndexFinalized();
/// @dev Thrown when the given start batch index is smaller than `latestVerifier.startBatchIndex`.
error ErrorStartBatchIndexTooSmall();
/*************
* Constants *
*************/
/// @notice The address of ScrollChain contract.
address public immutable scrollChain;
/***********
* Structs *
***********/
struct Verifier {
// The start batch index for the verifier.
uint64 startBatchIndex;
// The address of zkevm verifier.
address verifier;
}
/*************
* Variables *
*************/
/// @notice Mapping from verifier version to the list of legacy zkevm verifiers.
/// The verifiers are sorted by batchIndex in increasing order.
mapping(uint256 => Verifier[]) public legacyVerifiers;
/// @notice Mapping from verifier version to the latest used zkevm verifier.
mapping(uint256 => Verifier) public latestVerifier;
/***************
* Constructor *
***************/
constructor(
address _scrollChain,
uint256[] memory _versions,
address[] memory _verifiers
) {
if (_scrollChain == address(0)) revert ErrorZeroAddress();
scrollChain = _scrollChain;
for (uint256 i = 0; i < _versions.length; i++) {
if (_verifiers[i] == address(0)) revert ErrorZeroAddress();
latestVerifier[_versions[i]].verifier = _verifiers[i];
emit UpdateVerifier(_versions[i], 0, _verifiers[i]);
}
}
/*************************
* Public View Functions *
*************************/
/// @notice Return the number of legacy verifiers.
/// @param _version The version of legacy verifiers.
/// @return The number of legacy verifiers.
function legacyVerifiersLength(uint256 _version) external view returns (uint256) {
return legacyVerifiers[_version].length;
}
/// @notice Compute the verifier should be used for specific batch.
/// @param _version The version of verifier to query.
/// @param _batchIndex The batch index to query.
/// @return The address of verifier.
function getVerifier(uint256 _version, uint256 _batchIndex) public view returns (address) {
// Normally, we will use the latest verifier.
Verifier memory _verifier = latestVerifier[_version];
if (_verifier.startBatchIndex > _batchIndex) {
uint256 _length = legacyVerifiers[_version].length;
// In most case, only last few verifier will be used by `ScrollChain`.
// So, we use linear search instead of binary search.
unchecked {
for (uint256 i = _length; i > 0; --i) {
_verifier = legacyVerifiers[_version][i - 1];
if (_verifier.startBatchIndex <= _batchIndex) break;
}
}
}
return _verifier.verifier;
}
/*****************************
* Public Mutating Functions *
*****************************/
/// @inheritdoc IRollupVerifier
function verifyAggregateProof(
uint256 _batchIndex,
bytes calldata _aggrProof,
bytes32 _publicInputHash
) external view override {
address _verifier = getVerifier(0, _batchIndex);
IZkEvmVerifier(_verifier).verify(_aggrProof, _publicInputHash);
}
/// @inheritdoc IRollupVerifier
function verifyAggregateProof(
uint256 _version,
uint256 _batchIndex,
bytes calldata _aggrProof,
bytes32 _publicInputHash
) external view override {
address _verifier = getVerifier(_version, _batchIndex);
IZkEvmVerifier(_verifier).verify(_aggrProof, _publicInputHash);
}
/************************
* Restricted Functions *
************************/
/// @notice Update the address of zkevm verifier.
/// @param _version The version of the verifier.
/// @param _startBatchIndex The start batch index when the verifier will be used.
/// @param _verifier The address of new verifier.
function updateVerifier(
uint256 _version,
uint64 _startBatchIndex,
address _verifier
) external onlyOwner {
if (_startBatchIndex <= IScrollChain(scrollChain).lastFinalizedBatchIndex())
revert ErrorStartBatchIndexFinalized();
Verifier memory _latestVerifier = latestVerifier[_version];
if (_startBatchIndex < _latestVerifier.startBatchIndex) revert ErrorStartBatchIndexTooSmall();
if (_verifier == address(0)) revert ErrorZeroAddress();
if (_latestVerifier.startBatchIndex < _startBatchIndex) {
// don't push when it is the first update of the version.
if (_latestVerifier.verifier != address(0)) {
legacyVerifiers[_version].push(_latestVerifier);
}
_latestVerifier.startBatchIndex = _startBatchIndex;
}
_latestVerifier.verifier = _verifier;
latestVerifier[_version] = _latestVerifier;
emit UpdateVerifier(_version, _startBatchIndex, _verifier);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../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.
*
* By default, the owner account will be the one that deploys the contract. 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;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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 v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// @title IScrollChain
/// @notice The interface for ScrollChain.
interface IScrollChain {
/**********
* Events *
**********/
/// @notice Emitted when a new batch is committed.
/// @param batchIndex The index of the batch.
/// @param batchHash The hash of the batch.
event CommitBatch(uint256 indexed batchIndex, bytes32 indexed batchHash);
/// @notice revert a pending batch.
/// @param batchIndex The index of the batch.
/// @param batchHash The hash of the batch
event RevertBatch(uint256 indexed batchIndex, bytes32 indexed batchHash);
/// @notice Emitted when a batch is finalized.
/// @param batchIndex The index of the batch.
/// @param batchHash The hash of the batch
/// @param stateRoot The state root on layer 2 after this batch.
/// @param withdrawRoot The merkle root on layer2 after this batch.
event FinalizeBatch(uint256 indexed batchIndex, bytes32 indexed batchHash, bytes32 stateRoot, bytes32 withdrawRoot);
/// @notice Emitted when owner updates the status of sequencer.
/// @param account The address of account updated.
/// @param status The status of the account updated.
event UpdateSequencer(address indexed account, bool status);
/// @notice Emitted when owner updates the status of prover.
/// @param account The address of account updated.
/// @param status The status of the account updated.
event UpdateProver(address indexed account, bool status);
/// @notice Emitted when the value of `maxNumTxInChunk` is updated.
/// @param oldMaxNumTxInChunk The old value of `maxNumTxInChunk`.
/// @param newMaxNumTxInChunk The new value of `maxNumTxInChunk`.
event UpdateMaxNumTxInChunk(uint256 oldMaxNumTxInChunk, uint256 newMaxNumTxInChunk);
/*************************
* Public View Functions *
*************************/
/// @return The latest finalized batch index.
function lastFinalizedBatchIndex() external view returns (uint256);
/// @param batchIndex The index of the batch.
/// @return The batch hash of a committed batch.
function committedBatches(uint256 batchIndex) external view returns (bytes32);
/// @param batchIndex The index of the batch.
/// @return The state root of a committed batch.
function finalizedStateRoots(uint256 batchIndex) external view returns (bytes32);
/// @param batchIndex The index of the batch.
/// @return The message root of a committed batch.
function withdrawRoots(uint256 batchIndex) external view returns (bytes32);
/// @param batchIndex The index of the batch.
/// @return Whether the batch is finalized by batch index.
function isBatchFinalized(uint256 batchIndex) external view returns (bool);
/*****************************
* Public Mutating Functions *
*****************************/
/// @notice Commit a batch of transactions on layer 1.
///
/// @param version The version of current batch.
/// @param parentBatchHeader The header of parent batch, see the comments of `BatchHeaderV0Codec`.
/// @param chunks The list of encoded chunks, see the comments of `ChunkCodec`.
/// @param skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not.
function commitBatch(
uint8 version,
bytes calldata parentBatchHeader,
bytes[] memory chunks,
bytes calldata skippedL1MessageBitmap
) external;
/// @notice Revert a pending batch.
/// @dev one can only revert unfinalized batches.
/// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch`.
/// @param count The number of subsequent batches to revert, including current batch.
function revertBatch(bytes calldata batchHeader, uint256 count) external;
/// @notice Finalize a committed batch on layer 1.
/// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch.
/// @param prevStateRoot The state root of parent batch.
/// @param postStateRoot The state root of current batch.
/// @param withdrawRoot The withdraw trie root of current batch.
/// @param aggrProof The aggregation proof for current batch.
function finalizeBatchWithProof(
bytes calldata batchHeader,
bytes32 prevStateRoot,
bytes32 postStateRoot,
bytes32 withdrawRoot,
bytes calldata aggrProof
) external;
/// @notice Finalize a committed batch (with blob) on layer 1.
///
/// @dev Memory layout of `blobDataProof`:
/// | z | y | kzg_commitment | kzg_proof |
/// |---------|---------|----------------|-----------|
/// | bytes32 | bytes32 | bytes48 | bytes48 |
///
/// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch.
/// @param prevStateRoot The state root of parent batch.
/// @param postStateRoot The state root of current batch.
/// @param withdrawRoot The withdraw trie root of current batch.
/// @param blobDataProof The proof for blob data.
/// @param aggrProof The aggregation proof for current batch.
function finalizeBatchWithProof4844(
bytes calldata batchHeader,
bytes32 prevStateRoot,
bytes32 postStateRoot,
bytes32 withdrawRoot,
bytes calldata blobDataProof,
bytes calldata aggrProof
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// @title IRollupVerifier
/// @notice The interface for rollup verifier.
interface IRollupVerifier {
/// @notice Verify aggregate zk proof.
/// @param batchIndex The batch index to verify.
/// @param aggrProof The aggregated proof.
/// @param publicInputHash The public input hash.
function verifyAggregateProof(
uint256 batchIndex,
bytes calldata aggrProof,
bytes32 publicInputHash
) external view;
/// @notice Verify aggregate zk proof.
/// @param version The version of verifier to use.
/// @param batchIndex The batch index to verify.
/// @param aggrProof The aggregated proof.
/// @param publicInputHash The public input hash.
function verifyAggregateProof(
uint256 version,
uint256 batchIndex,
bytes calldata aggrProof,
bytes32 publicInputHash
) external view;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
interface IZkEvmVerifier {
/// @notice Verify aggregate zk proof.
/// @param aggrProof The aggregated proof.
/// @param publicInputHash The public input hash.
function verify(bytes calldata aggrProof, bytes32 publicInputHash) external view;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_scrollChain","type":"address"},{"internalType":"uint256[]","name":"_versions","type":"uint256[]"},{"internalType":"address[]","name":"_verifiers","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ErrorStartBatchIndexFinalized","type":"error"},{"inputs":[],"name":"ErrorStartBatchIndexTooSmall","type":"error"},{"inputs":[],"name":"ErrorZeroAddress","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":"uint256","name":"version","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startBatchIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"verifier","type":"address"}],"name":"UpdateVerifier","type":"event"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"uint256","name":"_batchIndex","type":"uint256"}],"name":"getVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"latestVerifier","outputs":[{"internalType":"uint64","name":"startBatchIndex","type":"uint64"},{"internalType":"address","name":"verifier","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"legacyVerifiers","outputs":[{"internalType":"uint64","name":"startBatchIndex","type":"uint64"},{"internalType":"address","name":"verifier","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"name":"legacyVerifiersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scrollChain","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"uint64","name":"_startBatchIndex","type":"uint64"},{"internalType":"address","name":"_verifier","type":"address"}],"name":"updateVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_version","type":"uint256"},{"internalType":"uint256","name":"_batchIndex","type":"uint256"},{"internalType":"bytes","name":"_aggrProof","type":"bytes"},{"internalType":"bytes32","name":"_publicInputHash","type":"bytes32"}],"name":"verifyAggregateProof","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchIndex","type":"uint256"},{"internalType":"bytes","name":"_aggrProof","type":"bytes"},{"internalType":"bytes32","name":"_publicInputHash","type":"bytes32"}],"name":"verifyAggregateProof","outputs":[],"stateMutability":"view","type":"function"}]Contract Creation Code
60a060405234801562000010575f80fd5b5060405162000e0d38038062000e0d833981016040819052620000339162000333565b6200003e33620001df565b6001600160a01b038316620000665760405163a7f9319d60e01b815260040160405180910390fd5b6001600160a01b0383166080525f5b8251811015620001d5575f6001600160a01b03168282815181106200009e576200009e62000407565b60200260200101516001600160a01b031603620000ce5760405163a7f9319d60e01b815260040160405180910390fd5b818181518110620000e357620000e362000407565b602002602001015160025f85848151811062000103576200010362000407565b602002602001015181526020019081526020015f205f0160086101000a8154816001600160a01b0302191690836001600160a01b031602179055507f7a98750a395b9ee50a2644ffda039e31f1d5d06de45510275f972bb20b229b3083828151811062000174576200017462000407565b60200260200101515f84848151811062000192576200019262000407565b6020026020010151604051620001c49392919092835260208301919091526001600160a01b0316604082015260600190565b60405180910390a160010162000075565b505050506200041b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811462000245575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156200028957620002896200024a565b604052919050565b5f6001600160401b03821115620002ac57620002ac6200024a565b5060051b60200190565b5f82601f830112620002c6575f80fd5b81516020620002df620002d98362000291565b6200025e565b8083825260208201915060208460051b87010193508684111562000301575f80fd5b602086015b8481101562000328576200031a816200022e565b835291830191830162000306565b509695505050505050565b5f805f6060848603121562000346575f80fd5b62000351846200022e565b602085810151919450906001600160401b038082111562000370575f80fd5b818701915087601f83011262000384575f80fd5b815162000395620002d98262000291565b81815260059190911b8301840190848101908a831115620003b4575f80fd5b938501935b82851015620003d457845182529385019390850190620003b9565b60408a01519097509450505080831115620003ed575f80fd5b5050620003fd86828701620002b6565b9150509250925092565b634e487b7160e01b5f52603260045260245ffd5b6080516109d26200043b5f395f8181610129015261037001526109d25ff3fe608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461014b578063955123061461015b578063bd98b2b01461016e578063c7065b6a146101a8578063cc780aa1146101e2578063f2fde38b146101f5575f80fd5b806328aee03f146100aa5780632c09a848146100da5780635027ad2e146100ef578063715018a61461011c578063897630dd14610124575b5f80fd5b6100bd6100b836600461079b565b610208565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ed6100e83660046107ff565b6102e1565b005b61010e6100fd366004610854565b5f9081526001602052604090205490565b6040519081526020016100d1565b6100ed610353565b6100bd7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b03166100bd565b6100ed610169366004610886565b610366565b61018161017c36600461079b565b6105bf565b604080516001600160401b0390931683526001600160a01b039091166020830152016100d1565b6101816101b6366004610854565b60026020525f90815260409020546001600160401b03811690600160401b90046001600160a01b031682565b6100ed6101f03660046108cc565b610604565b6100ed61020336600461091a565b610675565b5f8281526002602090815260408083208151808301909252546001600160401b038116808352600160401b9091046001600160a01b031692820192909252908310156102d6575f84815260016020526040902054805b80156102d3575f86815260016020526040902080545f1983019081106102865761028661093a565b5f918252602091829020604080518082019091529101546001600160401b038116808352600160401b9091046001600160a01b03169282019290925293508510156102d3575f190161025e565b50505b602001519392505050565b5f6102ec8686610208565b604051636b40634160e01b81529091506001600160a01b03821690636b4063419061031f9087908790879060040161094e565b5f6040518083038186803b158015610335575f80fd5b505afa158015610347573d5f803e3d5ffd5b50505050505050505050565b61035b6106f3565b6103645f61074c565b565b61036e6106f3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663059def616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ee9190610985565b826001600160401b03161161041657604051632693fc4160e21b815260040160405180910390fd5b5f838152600260209081526040918290208251808401909352546001600160401b03808216808552600160401b9092046001600160a01b031692840192909252908416101561047857604051632c3631c160e21b815260040160405180910390fd5b6001600160a01b03821661049f5760405163a7f9319d60e01b815260040160405180910390fd5b80516001600160401b038085169116101561052b5760208101516001600160a01b03161561051e575f848152600160208181526040832080549283018155835291829020835191018054928401516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790555b6001600160401b03831681525b6001600160a01b0382811660208381018281525f88815260028352604090819020865181549351909616600160401b026001600160e01b03199093166001600160401b0396871617929092179091558051888152938716918401919091528201527f7a98750a395b9ee50a2644ffda039e31f1d5d06de45510275f972bb20b229b309060600160405180910390a150505050565b6001602052815f5260405f2081815481106105d8575f80fd5b5f918252602090912001546001600160401b0381169250600160401b90046001600160a01b0316905082565b5f61060f5f86610208565b604051636b40634160e01b81529091506001600160a01b03821690636b406341906106429087908790879060040161094e565b5f6040518083038186803b158015610658575f80fd5b505afa15801561066a573d5f803e3d5ffd5b505050505050505050565b61067d6106f3565b6001600160a01b0381166106e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6106f08161074c565b50565b5f546001600160a01b031633146103645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106de565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f80604083850312156107ac575f80fd5b50508035926020909101359150565b5f8083601f8401126107cb575f80fd5b5081356001600160401b038111156107e1575f80fd5b6020830191508360208285010111156107f8575f80fd5b9250929050565b5f805f805f60808688031215610813575f80fd5b853594506020860135935060408601356001600160401b03811115610836575f80fd5b610842888289016107bb565b96999598509660600135949350505050565b5f60208284031215610864575f80fd5b5035919050565b80356001600160a01b0381168114610881575f80fd5b919050565b5f805f60608486031215610898575f80fd5b8335925060208401356001600160401b03811681146108b5575f80fd5b91506108c36040850161086b565b90509250925092565b5f805f80606085870312156108df575f80fd5b8435935060208501356001600160401b038111156108fb575f80fd5b610907878288016107bb565b9598909750949560400135949350505050565b5f6020828403121561092a575f80fd5b6109338261086b565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b60408152826040820152828460608301375f606084830101525f6060601f19601f8601168301019050826020830152949350505050565b5f60208284031215610995575f80fd5b505191905056fea264697066735822122064c0d129cada23b1959b7d0fe624c766fe0fa3700c3aac07510980b5924156f764736f6c63430008180033000000000000000000000000a13baf47339d63b743e7da8741db5456dac1e556000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000585dfad7bf4099e011d185e266907a8ab60dad2d0000000000000000000000004b289e4a5331bafbc6ccb2f10c39b8edcecdb247
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461014b578063955123061461015b578063bd98b2b01461016e578063c7065b6a146101a8578063cc780aa1146101e2578063f2fde38b146101f5575f80fd5b806328aee03f146100aa5780632c09a848146100da5780635027ad2e146100ef578063715018a61461011c578063897630dd14610124575b5f80fd5b6100bd6100b836600461079b565b610208565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ed6100e83660046107ff565b6102e1565b005b61010e6100fd366004610854565b5f9081526001602052604090205490565b6040519081526020016100d1565b6100ed610353565b6100bd7f000000000000000000000000a13baf47339d63b743e7da8741db5456dac1e55681565b5f546001600160a01b03166100bd565b6100ed610169366004610886565b610366565b61018161017c36600461079b565b6105bf565b604080516001600160401b0390931683526001600160a01b039091166020830152016100d1565b6101816101b6366004610854565b60026020525f90815260409020546001600160401b03811690600160401b90046001600160a01b031682565b6100ed6101f03660046108cc565b610604565b6100ed61020336600461091a565b610675565b5f8281526002602090815260408083208151808301909252546001600160401b038116808352600160401b9091046001600160a01b031692820192909252908310156102d6575f84815260016020526040902054805b80156102d3575f86815260016020526040902080545f1983019081106102865761028661093a565b5f918252602091829020604080518082019091529101546001600160401b038116808352600160401b9091046001600160a01b03169282019290925293508510156102d3575f190161025e565b50505b602001519392505050565b5f6102ec8686610208565b604051636b40634160e01b81529091506001600160a01b03821690636b4063419061031f9087908790879060040161094e565b5f6040518083038186803b158015610335575f80fd5b505afa158015610347573d5f803e3d5ffd5b50505050505050505050565b61035b6106f3565b6103645f61074c565b565b61036e6106f3565b7f000000000000000000000000a13baf47339d63b743e7da8741db5456dac1e5566001600160a01b031663059def616040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ee9190610985565b826001600160401b03161161041657604051632693fc4160e21b815260040160405180910390fd5b5f838152600260209081526040918290208251808401909352546001600160401b03808216808552600160401b9092046001600160a01b031692840192909252908416101561047857604051632c3631c160e21b815260040160405180910390fd5b6001600160a01b03821661049f5760405163a7f9319d60e01b815260040160405180910390fd5b80516001600160401b038085169116101561052b5760208101516001600160a01b03161561051e575f848152600160208181526040832080549283018155835291829020835191018054928401516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790555b6001600160401b03831681525b6001600160a01b0382811660208381018281525f88815260028352604090819020865181549351909616600160401b026001600160e01b03199093166001600160401b0396871617929092179091558051888152938716918401919091528201527f7a98750a395b9ee50a2644ffda039e31f1d5d06de45510275f972bb20b229b309060600160405180910390a150505050565b6001602052815f5260405f2081815481106105d8575f80fd5b5f918252602090912001546001600160401b0381169250600160401b90046001600160a01b0316905082565b5f61060f5f86610208565b604051636b40634160e01b81529091506001600160a01b03821690636b406341906106429087908790879060040161094e565b5f6040518083038186803b158015610658575f80fd5b505afa15801561066a573d5f803e3d5ffd5b505050505050505050565b61067d6106f3565b6001600160a01b0381166106e75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6106f08161074c565b50565b5f546001600160a01b031633146103645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106de565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f80604083850312156107ac575f80fd5b50508035926020909101359150565b5f8083601f8401126107cb575f80fd5b5081356001600160401b038111156107e1575f80fd5b6020830191508360208285010111156107f8575f80fd5b9250929050565b5f805f805f60808688031215610813575f80fd5b853594506020860135935060408601356001600160401b03811115610836575f80fd5b610842888289016107bb565b96999598509660600135949350505050565b5f60208284031215610864575f80fd5b5035919050565b80356001600160a01b0381168114610881575f80fd5b919050565b5f805f60608486031215610898575f80fd5b8335925060208401356001600160401b03811681146108b5575f80fd5b91506108c36040850161086b565b90509250925092565b5f805f80606085870312156108df575f80fd5b8435935060208501356001600160401b038111156108fb575f80fd5b610907878288016107bb565b9598909750949560400135949350505050565b5f6020828403121561092a575f80fd5b6109338261086b565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b60408152826040820152828460608301375f606084830101525f6060601f19601f8601168301019050826020830152949350505050565b5f60208284031215610995575f80fd5b505191905056fea264697066735822122064c0d129cada23b1959b7d0fe624c766fe0fa3700c3aac07510980b5924156f764736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a13baf47339d63b743e7da8741db5456dac1e556000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000585dfad7bf4099e011d185e266907a8ab60dad2d0000000000000000000000004b289e4a5331bafbc6ccb2f10c39b8edcecdb247
-----Decoded View---------------
Arg [0] : _scrollChain (address): 0xa13BAF47339d63B743e7Da8741db5456DAc1E556
Arg [1] : _versions (uint256[]): 0,1
Arg [2] : _verifiers (address[]): 0x585DfaD7bF4099E011D185E266907A8ab60DAD2D,0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000a13baf47339d63b743e7da8741db5456dac1e556
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 000000000000000000000000585dfad7bf4099e011d185e266907a8ab60dad2d
Arg [8] : 0000000000000000000000004b289e4a5331bafbc6ccb2f10c39b8edcecdb247
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.