Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 394 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update | 21464440 | 33 hrs ago | IN | 0 ETH | 0.00090411 | ||||
Update | 21455911 | 2 days ago | IN | 0 ETH | 0.00076261 | ||||
Update | 21447063 | 3 days ago | IN | 0 ETH | 0.00131224 | ||||
Update | 21444856 | 4 days ago | IN | 0 ETH | 0.00494212 | ||||
Update | 21444789 | 4 days ago | IN | 0 ETH | 0.00488286 | ||||
Update | 21444724 | 4 days ago | IN | 0 ETH | 0.00509552 | ||||
Update | 21444665 | 4 days ago | IN | 0 ETH | 0.00571522 | ||||
Update | 21444612 | 4 days ago | IN | 0 ETH | 0.00635144 | ||||
Update | 21444562 | 4 days ago | IN | 0 ETH | 0.00625362 | ||||
Update | 21444511 | 4 days ago | IN | 0 ETH | 0.00533805 | ||||
Update | 21444454 | 4 days ago | IN | 0 ETH | 0.00411577 | ||||
Update | 21444404 | 4 days ago | IN | 0 ETH | 0.00451185 | ||||
Update | 21444361 | 4 days ago | IN | 0 ETH | 0.00524241 | ||||
Update | 21444313 | 4 days ago | IN | 0 ETH | 0.00423765 | ||||
Update | 21444267 | 4 days ago | IN | 0 ETH | 0.00345095 | ||||
Update | 21444217 | 4 days ago | IN | 0 ETH | 0.00449693 | ||||
Update | 21444170 | 4 days ago | IN | 0 ETH | 0.005166 | ||||
Update | 21444115 | 4 days ago | IN | 0 ETH | 0.00581987 | ||||
Update | 21444058 | 4 days ago | IN | 0 ETH | 0.00424184 | ||||
Update | 21444008 | 4 days ago | IN | 0 ETH | 0.00370569 | ||||
Update | 21443961 | 4 days ago | IN | 0 ETH | 0.00407827 | ||||
Update | 21443911 | 4 days ago | IN | 0 ETH | 0.00468066 | ||||
Update | 21443866 | 4 days ago | IN | 0 ETH | 0.00566364 | ||||
Update | 21443827 | 4 days ago | IN | 0 ETH | 0.00531052 | ||||
Update | 21443786 | 4 days ago | IN | 0 ETH | 0.00590646 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21439381 | 4 days ago | 0.006 ETH | ||||
21430120 | 6 days ago | 0.006 ETH | ||||
21429540 | 6 days ago | 0.006 ETH | ||||
21429480 | 6 days ago | 0.006 ETH | ||||
21428856 | 6 days ago | 0.006 ETH | ||||
21428776 | 6 days ago | 0.006 ETH | ||||
21428575 | 6 days ago | 0.006 ETH | ||||
21425713 | 6 days ago | 0.006 ETH | ||||
21425034 | 6 days ago | 0.006 ETH | ||||
21384762 | 12 days ago | 0.006 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
UpdateManager
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.27; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {IStateOracle} from "./interfaces/IStateOracle.sol"; import {IUpdateVerifier} from "./interfaces/IUpdateVerifier.sol"; import {IProvingContract} from "./interfaces/IProvingContract.sol"; import {IActivityMonitor} from "./interfaces/IActivityMonitor.sol"; /// Update manager controls updating the bridge contracts, especially the state oracle. /// A state update needs to be verified by the update verifier, which checks validators signatures. /// @custom:security-contact [email protected] contract UpdateManager is AccessControl { IStateOracle public immutable stateOracle; IUpdateVerifier public updateVerifier; IProvingContract public immutable provingContract; IActivityMonitor public activityMonitor; uint256 public heartbeat; // update period as a number of blocks uint256 public fastLanePadding; uint256 public fastLaneFee; bool public fastLaneInUse; bytes32 public constant HEARTBEAT_ROLE = keccak256("HEARTBEAT_ROLE"); bytes32 public constant MONITOR_SETTER_ROLE = keccak256("MONITOR_SETTER_ROLE"); bytes32 public constant FEE_SETTER_ROLE = keccak256("FEE_SETTER_ROLE"); event FastLaneRequest(uint256 blockNum); event HeartbeatSet(uint256 heartbeat); event FastLanePaddingSet(uint256 padding); event FastLaneFeeSet(uint256 fee); event ActivityMonitorSet(IActivityMonitor activityMonitor); event UpdateVerifierSet(IUpdateVerifier updateVerifier); constructor(IStateOracle _stateOracle, IUpdateVerifier _updateVerifier, IProvingContract _provingContract, address admin, uint256 _heartbeat) { require(address(_stateOracle) != address(0), "StateOracle not set"); require(address(_updateVerifier) != address(0), "UpdateVerifier not set"); require(address(_provingContract) != address(0), "ProvingContract not set"); require(admin != address(0), "Admin not set"); require(_heartbeat >= 1, "Heartbeat must be positive"); stateOracle = _stateOracle; updateVerifier = _updateVerifier; provingContract = _provingContract; heartbeat = _heartbeat; _grantRole(DEFAULT_ADMIN_ROLE, admin); // can grant roles } /// Update the state oracle and related stuff. Requires signatures of the bridge validators. function update(uint256 blockNum, bytes32 stateRoot, bytes calldata newValidators, address _proofVerifier, address _updateVerifier, address _exitAdmin, bytes[] calldata signatures) external { // verify update validity uint256 _chainId = stateOracle.chainId(); uint256[] memory validators = updateVerifier.verifyUpdate(blockNum, stateRoot, _chainId, newValidators, _proofVerifier, _updateVerifier, _exitAdmin, signatures); // update stateOracle.update(blockNum, stateRoot); if (_proofVerifier != address(0)) { provingContract.setProofVerifier(_proofVerifier); } if (_exitAdmin != address(0)) { provingContract.setExitAdministrator(_exitAdmin); } if (_updateVerifier != address(0)) { // must be updated before the setValidators call updateVerifier = IUpdateVerifier(_updateVerifier); emit UpdateVerifierSet(IUpdateVerifier(_updateVerifier)); } if (newValidators.length != 0) { updateVerifier.setValidators(newValidators); } if (newValidators.length != 0) { updateVerifier.setValidators(newValidators); } if (address(activityMonitor) != address(0)) { activityMonitor.markActivity(validators); } if (fastLaneInUse) { fastLaneInUse = false; (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Failed to transfer update reward"); } } /// Request faster state oracle update, new state root should include result of txs done in blockNum of the watched chain. /// Request needs to have fastLaneFee value attached to be accepted. It will cover additional oracle update gas fee. function payFastLane(uint256 blockNum) external payable { require(!fastLaneInUse, "Fast lane busy"); require(msg.value >= fastLaneFee, "Insufficient fee value"); uint256 lastStateUpdate = stateOracle.lastBlockNum(); // get next periodic state update block number (ignore the fast lane updates) uint256 nextStateUpdate = lastStateUpdate - (lastStateUpdate % heartbeat) + heartbeat; require(blockNum > lastStateUpdate + fastLanePadding, "Block number too low"); require(blockNum < nextStateUpdate - fastLanePadding, "Block number too high"); fastLaneInUse = true; emit FastLaneRequest(blockNum); } /// Set period of regular state oracle updates in the number of watched chain blocks. function setHeartbeat(uint256 _heartbeat) onlyRole(HEARTBEAT_ROLE) external { require(_heartbeat >= 1, "Heartbeat must be positive"); require(fastLanePadding < _heartbeat, "Heartbeat must be greater than fast lane padding"); heartbeat = _heartbeat; emit HeartbeatSet(_heartbeat); } /// Set minimal spacing between two consequent state oracle update in the number of watched chain blocks. /// This restrict possibility of fast-lane update. function setFastLanePadding(uint256 _padding) onlyRole(HEARTBEAT_ROLE) external { require(_padding < heartbeat, "Padding must be less than heartbeat"); fastLanePadding = _padding; emit FastLanePaddingSet(_padding); } /// Set fee for a single usage of fast lane. Should cover gas fees of the oracle update. function setFastLaneFee(uint256 _fee) onlyRole(FEE_SETTER_ROLE) external { fastLaneFee = _fee; emit FastLaneFeeSet(_fee); } /// Set a contract responsible for validators activity monitoring. /// The monitor contract will be notified everytime when a validator contribute to an update. function setActivityMonitor(IActivityMonitor _monitor) onlyRole(MONITOR_SETTER_ROLE) external { activityMonitor = _monitor; emit ActivityMonitorSet(_monitor); } /// Get chain id of the watched chain function chainId() external view returns(uint256) { return stateOracle.chainId(); } /// Get last update block number function lastBlockNum() external view returns(uint256) { return stateOracle.lastBlockNum(); } /// Get proof verifier of the bridge contract function proofVerifier() external view returns(address) { return provingContract.proofVerifier(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.27; /// Activity monitor collects info about the bridge participation by individual validators. interface IActivityMonitor { // mark validators as active (to be called by UpdateVerifier) function markActivity(uint256[] calldata validators) external; // get validator last activity block height function validatorLastActivity(uint256 validatorId) external returns(uint256); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.27; /// Proving contract represents a contract which use the proof verifier. /// Used for updating the proof verifier address. interface IProvingContract { function proofVerifier() external view returns(address); function setProofVerifier(address proofVerifier) external; function setExitAdministrator(address exitAdministrator) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.27; /// State oracle provides the hash of a different chain state. interface IStateOracle { function lastState() external view returns (bytes32); function lastBlockNum() external view returns (uint256); function lastUpdateTime() external view returns (uint256); function chainId() external view returns (uint256); function update(uint256 blockNum, bytes32 stateRoot) external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.27; /// Update verifier provides a way to verify validators signatures on an update. /// It provides access to the validators registry for the purpose of inter-chain synchronization. interface IUpdateVerifier { struct Validator { uint256 id; address addr; uint256 weight; } /// Verify the state oracle update signatures function verifyUpdate(uint256 blockNum, bytes32 stateRoot, uint256 chainId, bytes calldata newValidators, address proofVerifier, address updateVerifier, address exitAdmin, bytes[] calldata signatures) external view returns (uint256[] memory); /// Write into the validators registry - reverts if the registry is readonly. function setValidators(bytes calldata newValidators) external; /// Get the highest validator id for purpose of iterating function lastValidatorId() external view returns(uint256); /// Get validator pubkey address by validator id function validatorAddress(uint256 index) external view returns(address); /// Get validator weight by validator address function validatorWeight(address addr) external view returns(uint256); /// Get validator id by validator pubkey address function validatorId(address addr) external view returns(uint256); /// Get weight of all registered validators function totalWeight() external view returns(uint256); /// Get weight necessary to update the state oracle function getQuorum() external view returns (uint256); }
{ "evmVersion": "cancun", "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IStateOracle","name":"_stateOracle","type":"address"},{"internalType":"contract IUpdateVerifier","name":"_updateVerifier","type":"address"},{"internalType":"contract IProvingContract","name":"_provingContract","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"uint256","name":"_heartbeat","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IActivityMonitor","name":"activityMonitor","type":"address"}],"name":"ActivityMonitorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FastLaneFeeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"padding","type":"uint256"}],"name":"FastLanePaddingSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"}],"name":"FastLaneRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"heartbeat","type":"uint256"}],"name":"HeartbeatSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract IUpdateVerifier","name":"updateVerifier","type":"address"}],"name":"UpdateVerifierSet","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_SETTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEARTBEAT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MONITOR_SETTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activityMonitor","outputs":[{"internalType":"contract IActivityMonitor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastLaneFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastLaneInUse","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fastLanePadding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"heartbeat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBlockNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"}],"name":"payFastLane","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"proofVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provingContract","outputs":[{"internalType":"contract IProvingContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IActivityMonitor","name":"_monitor","type":"address"}],"name":"setActivityMonitor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFastLaneFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_padding","type":"uint256"}],"name":"setFastLanePadding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_heartbeat","type":"uint256"}],"name":"setHeartbeat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stateOracle","outputs":[{"internalType":"contract IStateOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"bytes32","name":"stateRoot","type":"bytes32"},{"internalType":"bytes","name":"newValidators","type":"bytes"},{"internalType":"address","name":"_proofVerifier","type":"address"},{"internalType":"address","name":"_updateVerifier","type":"address"},{"internalType":"address","name":"_exitAdmin","type":"address"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateVerifier","outputs":[{"internalType":"contract IUpdateVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561000f575f5ffd5b50604051611b04380380611b0483398101604081905261002e916102cd565b6001600160a01b0385166100895760405162461bcd60e51b815260206004820152601360248201527f53746174654f7261636c65206e6f74207365740000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0384166100df5760405162461bcd60e51b815260206004820152601660248201527f5570646174655665726966696572206e6f7420736574000000000000000000006044820152606401610080565b6001600160a01b0383166101355760405162461bcd60e51b815260206004820152601760248201527f50726f76696e67436f6e7472616374206e6f74207365740000000000000000006044820152606401610080565b6001600160a01b03821661017b5760405162461bcd60e51b815260206004820152600d60248201526c10591b5a5b881b9bdd081cd95d609a1b6044820152606401610080565b60018110156101cc5760405162461bcd60e51b815260206004820152601a60248201527f486561727462656174206d75737420626520706f7369746976650000000000006044820152606401610080565b6001600160a01b03858116608052600180546001600160a01b031916868316179055831660a05260038190556102025f8361020d565b505050505050610334565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166102ad575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102653390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102b0565b505f5b92915050565b6001600160a01b03811681146102ca575f5ffd5b50565b5f5f5f5f5f60a086880312156102e1575f5ffd5b85516102ec816102b6565b60208701519095506102fd816102b6565b604087015190945061030e816102b6565b606087015190935061031f816102b6565b80925050608086015190509295509295909350565b60805160a05161177761038d5f395f81816102650152818161071b01528181610e130152610e9901525f81816101de015281816105cc015281816107c401528181610a6601528181610c600152610d8601526117775ff3fe608060405260043610610195575f3560e01c80637fa417b3116100e7578063d29dba9111610087578063e934768311610062578063e9347683146104ab578063ed0197a2146104de578063f9ef8c2d146104f3578063fab13a3014610512575f5ffd5b8063d29dba911461045a578063d547741f14610479578063dce0624714610498575f5ffd5b80639a8a0592116100c25780639a8a0592146103e1578063a217fddf146103f5578063ac0e5bf014610408578063bcd48d461461043b575f5ffd5b80637fa417b31461038f57806391d14854146103a357806398887caa146103c2575f5ffd5b806336899042116101525780636416d38e1161012d5780636416d38e14610305578063678fbeb5146103245780636cdb0dc5146103435780636ff2d47b14610376575f5ffd5b806336899042146102c75780633defb962146102db57806353c5143f146102f0575f5ffd5b806301ffc9a714610199578063076d27f5146101cd578063248a9ca3146102185780632a04f51b146102545780632f2ff15d1461028757806336568abe146102a8575b5f5ffd5b3480156101a4575f5ffd5b506101b86101b3366004611288565b610531565b60405190151581526020015b60405180910390f35b3480156101d8575f5ffd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c4565b348015610223575f5ffd5b506102466102323660046112b6565b5f9081526020819052604090206001015490565b6040519081526020016101c4565b34801561025f575f5ffd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b348015610292575f5ffd5b506102a66102a13660046112f1565b610567565b005b3480156102b3575f5ffd5b506102a66102c23660046112f1565b610591565b3480156102d2575f5ffd5b506102466105c9565b3480156102e6575f5ffd5b5061024660035481565b3480156102fb575f5ffd5b5061024660045481565b348015610310575f5ffd5b50600254610200906001600160a01b031681565b34801561032f575f5ffd5b506102a661033e3660046112b6565b61064f565b34801561034e575f5ffd5b506102467fa6ff0d617d2470b6d2096e183aa717d0ec41683b3ff292b2c29f38eecfd14c5c81565b348015610381575f5ffd5b506006546101b89060ff1681565b34801561039a575f5ffd5b50610200610718565b3480156103ae575f5ffd5b506101b86103bd3660046112f1565b610799565b3480156103cd575f5ffd5b50600154610200906001600160a01b031681565b3480156103ec575f5ffd5b506102466107c1565b348015610400575f5ffd5b506102465f81565b348015610413575f5ffd5b506102467f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae9697681565b348015610446575f5ffd5b506102a661045536600461131f565b61081e565b348015610465575f5ffd5b506102a66104743660046112b6565b610896565b348015610484575f5ffd5b506102a66104933660046112f1565b6109b0565b6102a66104a63660046112b6565b6109d4565b3480156104b6575f5ffd5b506102467fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f8818206081565b3480156104e9575f5ffd5b5061024660055481565b3480156104fe575f5ffd5b506102a661050d3660046112b6565b610bfe565b34801561051d575f5ffd5b506102a661052c366004611382565b610c5d565b5f6001600160e01b03198216637965db0b60e01b148061056157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461058181611146565b61058b8383611153565b50505050565b6001600160a01b03811633146105ba5760405163334bd91960e11b815260040160405180910390fd5b6105c482826111e2565b505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663368990426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610626573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064a9190611465565b905090565b7f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae9697661067981611146565b60035482106106db5760405162461bcd60e51b815260206004820152602360248201527f50616464696e67206d757374206265206c657373207468616e2068656172746260448201526219585d60ea1b60648201526084015b60405180910390fd5b60048290556040518281527f228e05022eead7a67ea981af6e6eb70275d285f12175d1d22e7f3f6d0cf541b4906020015b60405180910390a15050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637fa417b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610775573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064a919061147c565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610626573d5f5f3e3d5ffd5b7fa6ff0d617d2470b6d2096e183aa717d0ec41683b3ff292b2c29f38eecfd14c5c61084881611146565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527fbd3113fff4c6ab98447abddfdabfc15458ce7016a2b45ee08306e4c728ff7b529060200161070c565b7f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae969766108c081611146565b60018210156109115760405162461bcd60e51b815260206004820152601a60248201527f486561727462656174206d75737420626520706f73697469766500000000000060448201526064016106d2565b816004541061097b5760405162461bcd60e51b815260206004820152603060248201527f486561727462656174206d7573742062652067726561746572207468616e206660448201526f617374206c616e652070616464696e6760801b60648201526084016106d2565b60038290556040518281527fb28aba9038268da82e167f5387f1c36b2887f0c6b444f73315ca8487d44469e59060200161070c565b5f828152602081905260409020600101546109ca81611146565b61058b83836111e2565b60065460ff1615610a185760405162461bcd60e51b815260206004820152600e60248201526d46617374206c616e65206275737960901b60448201526064016106d2565b600554341015610a635760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206665652076616c756560501b60448201526064016106d2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663368990426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae49190611465565b6003549091505f90610af68184611497565b610b0090846114ca565b610b0a91906114dd565b905060045482610b1a91906114dd565b8311610b5f5760405162461bcd60e51b8152602060048201526014602482015273426c6f636b206e756d62657220746f6f206c6f7760601b60448201526064016106d2565b600454610b6c90826114ca565b8310610bb25760405162461bcd60e51b8152602060048201526015602482015274084d8dec6d640dceadac4cae440e8dede40d0d2ced605b1b60448201526064016106d2565b6006805460ff191660011790556040517f2d9e035ef73517f3087cb0bd849dd378526cc603a21418aeace6df97b5e8074a90610bf19085815260200190565b60405180910390a1505050565b7fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060610c2881611146565b60058290556040518281527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda9060200161070c565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cde9190611465565b6001546040516313634f6360e21b81529192505f916001600160a01b0390911690634d8d3d8c90610d25908e908e9087908f908f908f908f908f908f908f90600401611518565b5f60405180830381865afa158015610d3f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d66919081019061161c565b6040516334edd5db60e21b8152600481018d9052602481018c90529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d3b7576c906044015f604051808303815f87803b158015610dcf575f5ffd5b505af1158015610de1573d5f5f3e3d5ffd5b505050506001600160a01b03871615610e6b5760405163df6244db60e01b81526001600160a01b0388811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063df6244db906024015f604051808303815f87803b158015610e54575f5ffd5b505af1158015610e66573d5f5f3e3d5ffd5b505050505b6001600160a01b03851615610ef157604051636951588b60e01b81526001600160a01b0386811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636951588b906024015f604051808303815f87803b158015610eda575f5ffd5b505af1158015610eec573d5f5f3e3d5ffd5b505050505b6001600160a01b03861615610f5257600180546001600160a01b0319166001600160a01b0388169081179091556040519081527fb9c57855d7738304c0750c0f1340f9176c508487cc0822bd64daa8a5483e9ffb9060200160405180910390a15b8715610fb8576001546040516387bdb56d60e01b81526001600160a01b03909116906387bdb56d90610f8a908c908c906004016116e4565b5f604051808303815f87803b158015610fa1575f5ffd5b505af1158015610fb3573d5f5f3e3d5ffd5b505050505b871561101e576001546040516387bdb56d60e01b81526001600160a01b03909116906387bdb56d90610ff0908c908c906004016116e4565b5f604051808303815f87803b158015611007575f5ffd5b505af1158015611019573d5f5f3e3d5ffd5b505050505b6002546001600160a01b03161561108d576002546040516382960bc560e01b81526001600160a01b03909116906382960bc59061105f9084906004016116ff565b5f604051808303815f87803b158015611076575f5ffd5b505af1158015611088573d5f5f3e3d5ffd5b505050505b60065460ff1615611139576006805460ff191690556040515f90339047908381818185875af1925050503d805f81146110e1576040519150601f19603f3d011682016040523d82523d5f602084013e6110e6565b606091505b50509050806111375760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f207472616e73666572207570646174652072657761726460448201526064016106d2565b505b5050505050505050505050565b611150813361124b565b50565b5f61115e8383610799565b6111db575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111933390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610561565b505f610561565b5f6111ed8383610799565b156111db575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610561565b6112558282610799565b6112845760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106d2565b5050565b5f60208284031215611298575f5ffd5b81356001600160e01b0319811681146112af575f5ffd5b9392505050565b5f602082840312156112c6575f5ffd5b5035919050565b6001600160a01b0381168114611150575f5ffd5b80356112ec816112cd565b919050565b5f5f60408385031215611302575f5ffd5b823591506020830135611314816112cd565b809150509250929050565b5f6020828403121561132f575f5ffd5b81356112af816112cd565b5f5f83601f84011261134a575f5ffd5b50813567ffffffffffffffff811115611361575f5ffd5b6020830191508360208260051b850101111561137b575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c03121561139a575f5ffd5b8935985060208a0135975060408a013567ffffffffffffffff8111156113be575f5ffd5b8a01601f81018c136113ce575f5ffd5b803567ffffffffffffffff8111156113e4575f5ffd5b8c60208284010111156113f5575f5ffd5b6020919091019750955061140b60608b016112e1565b945061141960808b016112e1565b935061142760a08b016112e1565b925060c08a013567ffffffffffffffff811115611442575f5ffd5b61144e8c828d0161133a565b915080935050809150509295985092959850929598565b5f60208284031215611475575f5ffd5b5051919050565b5f6020828403121561148c575f5ffd5b81516112af816112cd565b5f826114b157634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610561576105616114b6565b80820180821115610561576105616114b6565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8a815289602082015288604082015261010060608201525f61153f6101008301898b6114f0565b6001600160a01b03888116608085015287811660a0850152861660c084015282810360e0840152838152602080820190600586901b830101865f36829003601e19015b888210156115f057858403601f1901855282358181126115a0575f5ffd5b8a0160208101903567ffffffffffffffff8111156115bc575f5ffd5b8036038213156115ca575f5ffd5b6115d58682846114f0565b95505050602083019250602085019450600182019150611582565b5050508093505050509b9a5050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561162c575f5ffd5b815167ffffffffffffffff811115611642575f5ffd5b8201601f81018413611652575f5ffd5b805167ffffffffffffffff81111561166c5761166c611608565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561169957611699611608565b6040529182526020818401810192908101878411156116b6575f5ffd5b6020850194505b838510156116d9578451808252602095860195909350016116bd565b509695505050505050565b602081525f6116f76020830184866114f0565b949350505050565b602080825282518282018190525f918401906040840190835b81811015611736578351835260209384019390920191600101611718565b50909594505050505056fea264697066735822122050509df591faf1605712ecef3d0df829dbff97ee361bbd2a52e72b13ab745f9664736f6c634300081b0033000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df9000000000000000000000000bcba1f21ca212f63f71536128d9e574dc3ae28d9000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e233363870000000000000000000000009fe65a5418850015a9d8ad3ca50d6a0b9769fbe00000000000000000000000000000000000000000000000000000000000001388
Deployed Bytecode
0x608060405260043610610195575f3560e01c80637fa417b3116100e7578063d29dba9111610087578063e934768311610062578063e9347683146104ab578063ed0197a2146104de578063f9ef8c2d146104f3578063fab13a3014610512575f5ffd5b8063d29dba911461045a578063d547741f14610479578063dce0624714610498575f5ffd5b80639a8a0592116100c25780639a8a0592146103e1578063a217fddf146103f5578063ac0e5bf014610408578063bcd48d461461043b575f5ffd5b80637fa417b31461038f57806391d14854146103a357806398887caa146103c2575f5ffd5b806336899042116101525780636416d38e1161012d5780636416d38e14610305578063678fbeb5146103245780636cdb0dc5146103435780636ff2d47b14610376575f5ffd5b806336899042146102c75780633defb962146102db57806353c5143f146102f0575f5ffd5b806301ffc9a714610199578063076d27f5146101cd578063248a9ca3146102185780632a04f51b146102545780632f2ff15d1461028757806336568abe146102a8575b5f5ffd5b3480156101a4575f5ffd5b506101b86101b3366004611288565b610531565b60405190151581526020015b60405180910390f35b3480156101d8575f5ffd5b506102007f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df981565b6040516001600160a01b0390911681526020016101c4565b348015610223575f5ffd5b506102466102323660046112b6565b5f9081526020819052604090206001015490565b6040519081526020016101c4565b34801561025f575f5ffd5b506102007f000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e2333638781565b348015610292575f5ffd5b506102a66102a13660046112f1565b610567565b005b3480156102b3575f5ffd5b506102a66102c23660046112f1565b610591565b3480156102d2575f5ffd5b506102466105c9565b3480156102e6575f5ffd5b5061024660035481565b3480156102fb575f5ffd5b5061024660045481565b348015610310575f5ffd5b50600254610200906001600160a01b031681565b34801561032f575f5ffd5b506102a661033e3660046112b6565b61064f565b34801561034e575f5ffd5b506102467fa6ff0d617d2470b6d2096e183aa717d0ec41683b3ff292b2c29f38eecfd14c5c81565b348015610381575f5ffd5b506006546101b89060ff1681565b34801561039a575f5ffd5b50610200610718565b3480156103ae575f5ffd5b506101b86103bd3660046112f1565b610799565b3480156103cd575f5ffd5b50600154610200906001600160a01b031681565b3480156103ec575f5ffd5b506102466107c1565b348015610400575f5ffd5b506102465f81565b348015610413575f5ffd5b506102467f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae9697681565b348015610446575f5ffd5b506102a661045536600461131f565b61081e565b348015610465575f5ffd5b506102a66104743660046112b6565b610896565b348015610484575f5ffd5b506102a66104933660046112f1565b6109b0565b6102a66104a63660046112b6565b6109d4565b3480156104b6575f5ffd5b506102467fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f8818206081565b3480156104e9575f5ffd5b5061024660055481565b3480156104fe575f5ffd5b506102a661050d3660046112b6565b610bfe565b34801561051d575f5ffd5b506102a661052c366004611382565b610c5d565b5f6001600160e01b03198216637965db0b60e01b148061056157506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461058181611146565b61058b8383611153565b50505050565b6001600160a01b03811633146105ba5760405163334bd91960e11b815260040160405180910390fd5b6105c482826111e2565b505050565b5f7f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df96001600160a01b031663368990426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610626573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064a9190611465565b905090565b7f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae9697661067981611146565b60035482106106db5760405162461bcd60e51b815260206004820152602360248201527f50616464696e67206d757374206265206c657373207468616e2068656172746260448201526219585d60ea1b60648201526084015b60405180910390fd5b60048290556040518281527f228e05022eead7a67ea981af6e6eb70275d285f12175d1d22e7f3f6d0cf541b4906020015b60405180910390a15050565b5f7f000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e233363876001600160a01b0316637fa417b36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610775573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064a919061147c565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f7f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df96001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610626573d5f5f3e3d5ffd5b7fa6ff0d617d2470b6d2096e183aa717d0ec41683b3ff292b2c29f38eecfd14c5c61084881611146565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527fbd3113fff4c6ab98447abddfdabfc15458ce7016a2b45ee08306e4c728ff7b529060200161070c565b7f263f662867aed1ef0af950501cca3a06ac1a44f50df3b69605c41b638ae969766108c081611146565b60018210156109115760405162461bcd60e51b815260206004820152601a60248201527f486561727462656174206d75737420626520706f73697469766500000000000060448201526064016106d2565b816004541061097b5760405162461bcd60e51b815260206004820152603060248201527f486561727462656174206d7573742062652067726561746572207468616e206660448201526f617374206c616e652070616464696e6760801b60648201526084016106d2565b60038290556040518281527fb28aba9038268da82e167f5387f1c36b2887f0c6b444f73315ca8487d44469e59060200161070c565b5f828152602081905260409020600101546109ca81611146565b61058b83836111e2565b60065460ff1615610a185760405162461bcd60e51b815260206004820152600e60248201526d46617374206c616e65206275737960901b60448201526064016106d2565b600554341015610a635760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206665652076616c756560501b60448201526064016106d2565b5f7f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df96001600160a01b031663368990426040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae49190611465565b6003549091505f90610af68184611497565b610b0090846114ca565b610b0a91906114dd565b905060045482610b1a91906114dd565b8311610b5f5760405162461bcd60e51b8152602060048201526014602482015273426c6f636b206e756d62657220746f6f206c6f7760601b60448201526064016106d2565b600454610b6c90826114ca565b8310610bb25760405162461bcd60e51b8152602060048201526015602482015274084d8dec6d640dceadac4cae440e8dede40d0d2ced605b1b60448201526064016106d2565b6006805460ff191660011790556040517f2d9e035ef73517f3087cb0bd849dd378526cc603a21418aeace6df97b5e8074a90610bf19085815260200190565b60405180910390a1505050565b7fe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060610c2881611146565b60058290556040518281527f255767031a43658bbf15754941bf3df717e6cba25bfa597280be2f3378bedcda9060200161070c565b5f7f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df96001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cde9190611465565b6001546040516313634f6360e21b81529192505f916001600160a01b0390911690634d8d3d8c90610d25908e908e9087908f908f908f908f908f908f908f90600401611518565b5f60405180830381865afa158015610d3f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d66919081019061161c565b6040516334edd5db60e21b8152600481018d9052602481018c90529091507f000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df96001600160a01b03169063d3b7576c906044015f604051808303815f87803b158015610dcf575f5ffd5b505af1158015610de1573d5f5f3e3d5ffd5b505050506001600160a01b03871615610e6b5760405163df6244db60e01b81526001600160a01b0388811660048301527f000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e23336387169063df6244db906024015f604051808303815f87803b158015610e54575f5ffd5b505af1158015610e66573d5f5f3e3d5ffd5b505050505b6001600160a01b03851615610ef157604051636951588b60e01b81526001600160a01b0386811660048301527f000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e233363871690636951588b906024015f604051808303815f87803b158015610eda575f5ffd5b505af1158015610eec573d5f5f3e3d5ffd5b505050505b6001600160a01b03861615610f5257600180546001600160a01b0319166001600160a01b0388169081179091556040519081527fb9c57855d7738304c0750c0f1340f9176c508487cc0822bd64daa8a5483e9ffb9060200160405180910390a15b8715610fb8576001546040516387bdb56d60e01b81526001600160a01b03909116906387bdb56d90610f8a908c908c906004016116e4565b5f604051808303815f87803b158015610fa1575f5ffd5b505af1158015610fb3573d5f5f3e3d5ffd5b505050505b871561101e576001546040516387bdb56d60e01b81526001600160a01b03909116906387bdb56d90610ff0908c908c906004016116e4565b5f604051808303815f87803b158015611007575f5ffd5b505af1158015611019573d5f5f3e3d5ffd5b505050505b6002546001600160a01b03161561108d576002546040516382960bc560e01b81526001600160a01b03909116906382960bc59061105f9084906004016116ff565b5f604051808303815f87803b158015611076575f5ffd5b505af1158015611088573d5f5f3e3d5ffd5b505050505b60065460ff1615611139576006805460ff191690556040515f90339047908381818185875af1925050503d805f81146110e1576040519150601f19603f3d011682016040523d82523d5f602084013e6110e6565b606091505b50509050806111375760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f207472616e73666572207570646174652072657761726460448201526064016106d2565b505b5050505050505050505050565b611150813361124b565b50565b5f61115e8383610799565b6111db575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556111933390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610561565b505f610561565b5f6111ed8383610799565b156111db575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610561565b6112558282610799565b6112845760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106d2565b5050565b5f60208284031215611298575f5ffd5b81356001600160e01b0319811681146112af575f5ffd5b9392505050565b5f602082840312156112c6575f5ffd5b5035919050565b6001600160a01b0381168114611150575f5ffd5b80356112ec816112cd565b919050565b5f5f60408385031215611302575f5ffd5b823591506020830135611314816112cd565b809150509250929050565b5f6020828403121561132f575f5ffd5b81356112af816112cd565b5f5f83601f84011261134a575f5ffd5b50813567ffffffffffffffff811115611361575f5ffd5b6020830191508360208260051b850101111561137b575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c03121561139a575f5ffd5b8935985060208a0135975060408a013567ffffffffffffffff8111156113be575f5ffd5b8a01601f81018c136113ce575f5ffd5b803567ffffffffffffffff8111156113e4575f5ffd5b8c60208284010111156113f5575f5ffd5b6020919091019750955061140b60608b016112e1565b945061141960808b016112e1565b935061142760a08b016112e1565b925060c08a013567ffffffffffffffff811115611442575f5ffd5b61144e8c828d0161133a565b915080935050809150509295985092959850929598565b5f60208284031215611475575f5ffd5b5051919050565b5f6020828403121561148c575f5ffd5b81516112af816112cd565b5f826114b157634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610561576105616114b6565b80820180821115610561576105616114b6565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8a815289602082015288604082015261010060608201525f61153f6101008301898b6114f0565b6001600160a01b03888116608085015287811660a0850152861660c084015282810360e0840152838152602080820190600586901b830101865f36829003601e19015b888210156115f057858403601f1901855282358181126115a0575f5ffd5b8a0160208101903567ffffffffffffffff8111156115bc575f5ffd5b8036038213156115ca575f5ffd5b6115d58682846114f0565b95505050602083019250602085019450600182019150611582565b5050508093505050509b9a5050505050505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561162c575f5ffd5b815167ffffffffffffffff811115611642575f5ffd5b8201601f81018413611652575f5ffd5b805167ffffffffffffffff81111561166c5761166c611608565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561169957611699611608565b6040529182526020818401810192908101878411156116b6575f5ffd5b6020850194505b838510156116d9578451808252602095860195909350016116bd565b509695505050505050565b602081525f6116f76020830184866114f0565b949350505050565b602080825282518282018190525f918401906040840190835b81811015611736578351835260209384019390920191600101611718565b50909594505050505056fea264697066735822122050509df591faf1605712ecef3d0df829dbff97ee361bbd2a52e72b13ab745f9664736f6c634300081b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df9000000000000000000000000bcba1f21ca212f63f71536128d9e574dc3ae28d9000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e233363870000000000000000000000009fe65a5418850015a9d8ad3ca50d6a0b9769fbe00000000000000000000000000000000000000000000000000000000000001388
-----Decoded View---------------
Arg [0] : _stateOracle (address): 0xb1703AD070241C862be4053dd9C8440E689C5df9
Arg [1] : _updateVerifier (address): 0xBCBA1f21ca212F63f71536128d9e574DC3AE28d9
Arg [2] : _provingContract (address): 0xb903716B3DD10b0115E93eb29D8Eb99e23336387
Arg [3] : admin (address): 0x9Fe65a5418850015a9D8ad3Ca50d6a0B9769FbE0
Arg [4] : _heartbeat (uint256): 5000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b1703ad070241c862be4053dd9c8440e689c5df9
Arg [1] : 000000000000000000000000bcba1f21ca212f63f71536128d9e574dc3ae28d9
Arg [2] : 000000000000000000000000b903716b3dd10b0115e93eb29d8eb99e23336387
Arg [3] : 0000000000000000000000009fe65a5418850015a9d8ad3ca50d6a0b9769fbe0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001388
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.