Overview
GLMR Balance
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
OracleMaster
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma abicoder v2; import "Pausable.sol"; import "Clones.sol"; import "IOracle.sol"; import "ILido.sol"; import "ILedger.sol"; import "IAuthManager.sol"; import "LedgerUtils.sol"; contract OracleMaster is Pausable { using Clones for address; using LedgerUtils for Types.OracleData; event MemberAdded(address member); event MemberRemoved(address member); event QuorumChanged(uint8 QUORUM); // current era id uint64 public eraId; // Oracle members address[] public members; // ledger -> oracle pairing mapping(address => address) private oracleForLedger; // address of oracle clone template contract address public ORACLE_CLONE; // Lido smart contract address public LIDO; // Quorum threshold uint8 public QUORUM; // Relay era id on updating uint64 public ANCHOR_ERA_ID; // Relay timestamp on updating uint64 public ANCHOR_TIMESTAMP; // Relay seconds per era uint64 public SECONDS_PER_ERA; /// Maximum number of oracle committee members uint256 public constant MAX_MEMBERS = 255; // Missing member index uint256 internal constant MEMBER_NOT_FOUND = type(uint256).max; // Spec manager role bytes32 internal constant ROLE_SPEC_MANAGER = keccak256("ROLE_SPEC_MANAGER"); // General oracle manager role bytes32 internal constant ROLE_PAUSE_MANAGER = keccak256("ROLE_PAUSE_MANAGER"); // Oracle members manager role bytes32 internal constant ROLE_ORACLE_MEMBERS_MANAGER = keccak256("ROLE_ORACLE_MEMBERS_MANAGER"); // Oracle members manager role bytes32 internal constant ROLE_ORACLE_QUORUM_MANAGER = keccak256("ROLE_ORACLE_QUORUM_MANAGER"); // Allows function calls only from member with specific role modifier auth(bytes32 role) { require(IAuthManager(ILido(LIDO).AUTH_MANAGER()).has(role, msg.sender), "OM: UNAUTHOROZED"); _; } // Allows function calls only from LIDO modifier onlyLido() { require(msg.sender == LIDO, "OM: CALLER_NOT_LIDO"); _; } /** * @notice Initialize oracle master contract, allowed to call only once * @param _oracleClone oracle clone contract address * @param _quorum inital quorum threshold */ function initialize( address _oracleClone, uint8 _quorum ) external { require(ORACLE_CLONE == address(0), "OM: ALREADY_INITIALIZED"); require(_oracleClone != address(0), "OM: INCORRECT_CLONE_ADDRESS"); require(_quorum > 0 && _quorum < MAX_MEMBERS, "OM: INCORRECT_QUORUM"); ORACLE_CLONE = _oracleClone; QUORUM = _quorum; } /** * @notice Set lido contract address, allowed to only once * @param _lido lido contract address */ function setLido(address _lido) external { require(LIDO == address(0), "OM: LIDO_ALREADY_DEFINED"); require(_lido != address(0), "OM: INCORRECT_LIDO_ADDRESS"); LIDO = _lido; } /** * @notice Set the number of exactly the same reports needed to finalize the era allowed to call only by ROLE_ORACLE_QUORUM_MANAGER * @param _quorum new value of quorum threshold */ function setQuorum(uint8 _quorum) external auth(ROLE_ORACLE_QUORUM_MANAGER) { require(_quorum > 0 && _quorum < MAX_MEMBERS, "OM: QUORUM_WONT_BE_MADE"); uint8 oldQuorum = QUORUM; QUORUM = _quorum; // If the QUORUM value lowered, check existing reports whether it is time to push if (oldQuorum > _quorum) { address[] memory ledgers = ILido(LIDO).getLedgerAddresses(); uint256 _length = ledgers.length; for (uint256 i = 0; i < _length; ++i) { address oracle = oracleForLedger[ledgers[i]]; if (oracle != address(0)) { IOracle(oracle).softenQuorum(_quorum, eraId); } } } emit QuorumChanged(_quorum); } /** * @notice Return oracle contract for the given ledger * @param _ledger ledger contract address * @return linked oracle address */ function getOracle(address _ledger) external view returns (address) { return oracleForLedger[_ledger]; } /** * @notice Return current Era according to relay chain spec * @return current era id */ function getCurrentEraId() public view returns (uint64) { return _getCurrentEraId(); } /** * @notice Return relay chain stash account addresses. This function used in oracle service * @return Array of bytes32 relaychain stash accounts */ function getStashAccounts() external view returns (bytes32[] memory) { return ILido(LIDO).getStashAccounts(); } /** * @notice Return last reported era and oracle is already reported indicator * @param _oracleMember - oracle member address * @param _stash - stash account id * @return lastEra - last reported era * @return isReported - true if oracle member already reported for given stash, else false */ function isReportedLastEra(address _oracleMember, bytes32 _stash) external view returns ( uint64 lastEra, bool isReported ) { uint64 lastEra = eraId; uint256 memberIdx = _getMemberId(_oracleMember); if (memberIdx == MEMBER_NOT_FOUND) { return (lastEra, false); } address ledger = ILido(LIDO).findLedger(_stash); if (ledger == address(0)) { return (lastEra, false); } return (lastEra, IOracle(oracleForLedger[ledger]).isReported(memberIdx)); } /** * @notice Stop pool routine operations (reportRelay), allowed to call only by ROLE_PAUSE_MANAGER */ function pause() external auth(ROLE_PAUSE_MANAGER) { _pause(); } /** * @notice Resume pool routine operations (reportRelay), allowed to call only by ROLE_PAUSE_MANAGER */ function resume() external auth(ROLE_PAUSE_MANAGER) { _unpause(); } /** * @notice Add new member to the oracle member committee list, allowed to call only by ROLE_ORACLE_MEMBERS_MANAGER * @param _member proposed member address */ function addOracleMember(address _member) external auth(ROLE_ORACLE_MEMBERS_MANAGER) { require(_member != address(0), "OM: BAD_ARGUMENT"); require(_getMemberId(_member) == MEMBER_NOT_FOUND, "OM: MEMBER_EXISTS"); require(members.length < MAX_MEMBERS - 1, "OM: MEMBERS_TOO_MANY"); members.push(_member); emit MemberAdded(_member); } /** * @notice Remove `_member` from the oracle member committee list, allowed to call only by ROLE_ORACLE_MEMBERS_MANAGER */ function removeOracleMember(address _member) external auth(ROLE_ORACLE_MEMBERS_MANAGER) { uint256 index = _getMemberId(_member); require(index != MEMBER_NOT_FOUND, "OM: MEMBER_NOT_FOUND"); uint256 last = members.length - 1; if (index != last) members[index] = members[last]; members.pop(); emit MemberRemoved(_member); // delete the data for the last eraId, let remained oracles report it again _clearReporting(); } /** * @notice Add ledger to oracle set, allowed to call only by lido contract * @param _ledger Ledger contract */ function addLedger(address _ledger) external onlyLido { require(ORACLE_CLONE != address(0), "OM: ORACLE_CLONE_UNINITIALIZED"); IOracle newOracle = IOracle(ORACLE_CLONE.cloneDeterministic(bytes32(uint256(uint160(_ledger)) << 96))); newOracle.initialize(address(this), _ledger); oracleForLedger[_ledger] = address(newOracle); } /** * @notice Remove ledger from oracle set, allowed to call only by lido contract * @param _ledger ledger contract */ function removeLedger(address _ledger) external onlyLido { oracleForLedger[_ledger] = address(0); } /** * @notice Accept oracle committee member reports from the relay side * @param _eraId relaychain era * @param _report relaychain data report */ function reportRelay(uint64 _eraId, Types.OracleData calldata _report) external whenNotPaused { require(_report.isConsistent(), "OM: INCORRECT_REPORT"); uint256 memberIndex = _getMemberId(msg.sender); require(memberIndex != MEMBER_NOT_FOUND, "OM: MEMBER_NOT_FOUND"); address ledger = ILido(LIDO).findLedger(_report.stashAccount); address oracle = oracleForLedger[ledger]; require(oracle != address(0), "OM: ORACLE_FOR_LEDGER_NOT_FOUND"); require(_eraId >= eraId, "OM: ERA_TOO_OLD"); // new era if (_eraId > eraId) { require(_eraId <= _getCurrentEraId(), "OM: UNEXPECTED_NEW_ERA"); eraId = _eraId; _clearReporting(); ILido(LIDO).flushStakes(); } IOracle(oracle).reportRelay(memberIndex, QUORUM, _eraId, _report); } /** * @notice Set parameters from relay chain for accurately calculation of current era id * @param _anchorEraId - current relay chain era id * @param _anchorTimestamp - current relay chain timestamp * @param _secondsPerEra - current relay chain era duration in seconds */ function setAnchorEra(uint64 _anchorEraId, uint64 _anchorTimestamp, uint64 _secondsPerEra) external auth(ROLE_SPEC_MANAGER) { require(_secondsPerEra > 0, "OM: BAD_SECONDS_PER_ERA"); require(uint64(block.timestamp) >= _anchorTimestamp, "OM: BAD_TIMESTAMP"); uint64 newEra = _anchorEraId + (uint64(block.timestamp) - _anchorTimestamp) / _secondsPerEra; require(newEra >= eraId, "OM: ERA_COLLISION"); ANCHOR_ERA_ID = _anchorEraId; ANCHOR_TIMESTAMP = _anchorTimestamp; SECONDS_PER_ERA = _secondsPerEra; } /** * @notice Return oracle instance index in the member array * @param _member member address * @return member index */ function _getMemberId(address _member) internal view returns (uint256) { uint256 length = members.length; for (uint256 i = 0; i < length; ++i) { if (members[i] == _member) { return i; } } return MEMBER_NOT_FOUND; } /** * @notice Calculate current expected era id * @dev Calculation based on relaychain genesis timestamp and era duratation * @return current era id */ function _getCurrentEraId() internal view returns (uint64) { return ANCHOR_ERA_ID + (uint64(block.timestamp) - ANCHOR_TIMESTAMP) / SECONDS_PER_ERA; } /** * @notice Delete interim data for current Era, free storage memory for each oracle */ function _clearReporting() internal { address[] memory ledgers = ILido(LIDO).getLedgerAddresses(); uint256 _length = ledgers.length; for (uint256 i = 0; i < _length; ++i) { address oracle = oracleForLedger[ledgers[i]]; if (oracle != address(0)) { IOracle(oracle).clearReporting(); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt, address deployer) internal pure returns (address predicted) { // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Types.sol"; interface IOracle { function initialize(address oracleMaster, address ledger) external; function reportRelay(uint256 index, uint256 quorum, uint64 eraId, Types.OracleData calldata staking) external; function softenQuorum(uint8 quorum, uint64 _eraId) external; function clearReporting() external; function isReported(uint256 index) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface Types { struct Fee{ uint16 total; uint16 operators; uint16 developers; uint16 treasury; } struct Stash { bytes32 stashAccount; uint64 eraId; } enum LedgerStatus { // bonded but not participate in staking Idle, // participate as nominator Nominator, // participate as validator Validator, // not bonded not participate in staking None } struct UnlockingChunk { uint128 balance; uint64 era; } struct OracleData { bytes32 stashAccount; bytes32 controllerAccount; LedgerStatus stakeStatus; // active part of stash balance uint128 activeBalance; // locked for stake stash balance. uint128 totalBalance; // totalBalance = activeBalance + sum(unlocked.balance) UnlockingChunk[] unlocking; uint32[] claimedRewards; // stash account balance. It includes locked (totalBalance) balance assigned // to a controller. uint128 stashBalance; // slashing spans for ledger uint32 slashingSpans; } struct RelaySpec { uint16 maxValidatorsPerLedger; uint128 minNominatorBalance; uint128 ledgerMinimumActiveBalance; uint256 maxUnlockingChunks; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Types.sol"; interface ILido { function MAX_ALLOWABLE_DIFFERENCE() external view returns(uint128); function deposit(uint256 amount) external returns (uint256); function distributeRewards(uint256 totalRewards, uint256 ledgerBalance) external; function distributeLosses(uint256 totalLosses, uint256 ledgerBalance) external; function getStashAccounts() external view returns (bytes32[] memory); function getLedgerAddresses() external view returns (address[] memory); function ledgerStake(address ledger) external view returns (uint256); function transferFromLedger(uint256 amount, uint256 excess) external; function transferFromLedger(uint256 amount) external; function transferToLedger(uint256 amount) external; function flushStakes() external; function findLedger(bytes32 stash) external view returns (address); function AUTH_MANAGER() external returns(address); function ORACLE_MASTER() external view returns (address); function decimals() external view returns (uint8); function getPooledKSMByShares(uint256 sharesAmount) external view returns (uint256); function getSharesByPooledKSM(uint256 amount) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Types.sol"; interface ILedger { function initialize( bytes32 _stashAccount, bytes32 controllerAccount, address vKSM, address controller, uint128 minNominatorBalance, address lido, uint128 _minimumBalance, uint256 _maxUnlockingChunks ) external; function pushData(uint64 eraId, Types.OracleData calldata staking) external; function nominate(bytes32[] calldata validators) external; function status() external view returns (Types.LedgerStatus); function isEmpty() external view returns (bool); function stashAccount() external view returns (bytes32); function totalBalance() external view returns (uint128); function setRelaySpecs(uint128 minNominatorBalance, uint128 minimumBalance, uint256 _maxUnlockingChunks) external; function cachedTotalBalance() external view returns (uint128); function transferDownwardBalance() external view returns (uint128); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IAuthManager { function has(bytes32 role, address member) external view returns (bool); function add(bytes32 role, address member) external; function remove(bytes32 role, address member) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Types.sol"; library LedgerUtils { /// @notice Return unlocking and withdrawable balances function getTotalUnlocking(Types.OracleData memory report, uint64 _eraId) internal pure returns (uint128, uint128) { uint128 _total = 0; uint128 _withdrawble = 0; for (uint i = 0; i < report.unlocking.length; i++) { _total += report.unlocking[i].balance; if (report.unlocking[i].era <= _eraId) { _withdrawble += report.unlocking[i].balance; } } return (_total, _withdrawble); } /// @notice Return stash balance that can be freely transfer or allocated for stake function getFreeBalance(Types.OracleData memory report) internal pure returns (uint128) { return report.stashBalance - report.totalBalance; } /// @notice Return true if report is consistent function isConsistent(Types.OracleData memory report) internal pure returns (bool) { (uint128 _total,) = getTotalUnlocking(report, 0); return report.unlocking.length < type(uint8).max && report.totalBalance == (report.activeBalance + _total) && report.stashBalance >= report.totalBalance; } }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 10 }, "libraries": { "OracleMaster.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"QUORUM","type":"uint8"}],"name":"QuorumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"ANCHOR_ERA_ID","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ANCHOR_TIMESTAMP","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIDO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MEMBERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE_CLONE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUORUM","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_PER_ERA","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ledger","type":"address"}],"name":"addLedger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"addOracleMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"eraId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEraId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ledger","type":"address"}],"name":"getOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStashAccounts","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oracleClone","type":"address"},{"internalType":"uint8","name":"_quorum","type":"uint8"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracleMember","type":"address"},{"internalType":"bytes32","name":"_stash","type":"bytes32"}],"name":"isReportedLastEra","outputs":[{"internalType":"uint64","name":"lastEra","type":"uint64"},{"internalType":"bool","name":"isReported","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"members","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ledger","type":"address"}],"name":"removeLedger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"removeOracleMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_eraId","type":"uint64"},{"components":[{"internalType":"bytes32","name":"stashAccount","type":"bytes32"},{"internalType":"bytes32","name":"controllerAccount","type":"bytes32"},{"internalType":"enum Types.LedgerStatus","name":"stakeStatus","type":"uint8"},{"internalType":"uint128","name":"activeBalance","type":"uint128"},{"internalType":"uint128","name":"totalBalance","type":"uint128"},{"components":[{"internalType":"uint128","name":"balance","type":"uint128"},{"internalType":"uint64","name":"era","type":"uint64"}],"internalType":"struct Types.UnlockingChunk[]","name":"unlocking","type":"tuple[]"},{"internalType":"uint32[]","name":"claimedRewards","type":"uint32[]"},{"internalType":"uint128","name":"stashBalance","type":"uint128"},{"internalType":"uint32","name":"slashingSpans","type":"uint32"}],"internalType":"struct Types.OracleData","name":"_report","type":"tuple"}],"name":"reportRelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_anchorEraId","type":"uint64"},{"internalType":"uint64","name":"_anchorTimestamp","type":"uint64"},{"internalType":"uint64","name":"_secondsPerEra","type":"uint64"}],"name":"setAnchorEra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lido","type":"address"}],"name":"setLido","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quorum","type":"uint8"}],"name":"setQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506000805460ff191690556128e38061002a6000396000f3fe608060405234801561001057600080fd5b50600436106101335760003560e01c8063046f7da21461013857806310d3d22e146101425780631d55fde41461018457806329d009f2146101995780632e80d9b6146101b957806333bc7090146101df5780633f109d23146101f2578063559ccc551461020a5780635c975abb1461021d5780635daf08ca146102335780635e6f8df3146102465780636dcab78f14610278578063792922351461028b5780637d4a3d431461029e5780637d774e31146102b85780638456cb59146102cb5780638b21f170146102d3578063943b24b2146102e65780639f04e9ac146102f9578063ae2df7c01461030c578063b164e43714610326578063cbe48ee814610339578063d381787a1461034c578063ea0e35b11461035f578063f98fae8114610375575b600080fd5b610140610388565b005b61016e610150366004611e32565b6001600160a01b039081166000908152600260205260409020541690565b60405161017b9190611e4f565b60405180910390f35b61018c6104ae565b60405161017b9190611e63565b6101a1610530565b6040516001600160401b03909116815260200161017b565b6004546101cd90600160a01b900460ff1681565b60405160ff909116815260200161017b565b60035461016e906001600160a01b031681565b6000546101a19061010090046001600160401b031681565b6005546101a1906001600160401b031681565b60005460ff16604051901515815260200161017b565b61016e610241366004611ea7565b61053a565b610259610254366004611ec0565b610564565b604080516001600160401b03909316835290151560208301520161017b565b610140610286366004611f02565b6106b8565b610140610299366004611f34565b6109fb565b6005546101a190600160401b90046001600160401b031681565b6101406102c6366004611e32565b610d53565b610140610e1c565b60045461016e906001600160a01b031681565b6101406102f4366004611f89565b610f36565b610140610307366004611e32565b611078565b6004546101a190600160a81b90046001600160401b031681565b610140610334366004611e32565b6111b4565b610140610347366004611fbe565b611435565b61014061035a366004611e32565b6116cd565b61036760ff81565b60405190815260200161017b565b610140610383366004611e32565b61171e565b60008051602061288e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af11580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161043d92919061201e565b602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190612035565b6104a35760405162461bcd60e51b815260040161049a90612057565b60405180910390fd5b6104ab61195f565b50565b6060600460009054906101000a90046001600160a01b03166001600160a01b0316631d55fde46040518163ffffffff1660e01b8152600401600060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261052b9190810190612135565b905090565b600061052b6119ec565b6001818154811061054a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008054819061010090046001600160401b03168161058286611a36565b905060001981141561059a57509150600090506106b1565b60048054604051630900d66f60e21b81529182018790526000916001600160a01b039091169063240359bc90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190612001565b90506001600160a01b03811661062957826000945094505050506106b1565b6001600160a01b03818116600090815260026020526040908190205490516389b8036160e01b815260048101859052859291909116906389b8036190602401602060405180830381865afa158015610685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a99190612035565b945094505050505b9250929050565b7f8ac38a2a3c56dddd46cb8bc53ef71a94590a3862aefd3143ed3126454af63731600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af115801561072e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107529190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161077f92919061201e565b602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190612035565b6107dc5760405162461bcd60e51b815260040161049a90612057565b60008260ff161180156107f2575060ff8260ff16105b6108385760405162461bcd60e51b81526020600482015260176024820152764f4d3a2051554f52554d5f574f4e545f42455f4d41444560481b604482015260640161049a565b6004805460ff848116600160a01b81810260ff60a01b198516179094559290910416908111156109c0576000600460009054906101000a90046001600160a01b03166001600160a01b031663df1979566040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108df91908101906121ca565b805190915060005b818110156109bc5760006002600085848151811061090757610907612258565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416905080156109ab5760005460405163cb35cf3160e01b815260ff891660048201526101009091046001600160401b031660248201526001600160a01b0382169063cb35cf3190604401600060405180830381600087803b15801561099257600080fd5b505af11580156109a6573d6000803e3d6000fd5b505050505b506109b581612284565b90506108e7565b5050505b60405160ff841681527fd6ecd940f5784ceceeeb048268900f819851986dbe41c49f6e754b988868df879060200160405180910390a1505050565b60005460ff1615610a1e5760405162461bcd60e51b815260040161049a9061229f565b610a2f610a2a826123fd565b611aa0565b610a725760405162461bcd60e51b815260206004820152601460248201527313d34e88125390d3d4949150d517d4915413d49560621b604482015260640161049a565b6000610a7d33611a36565b9050600019811415610aa15760405162461bcd60e51b815260040161049a906124d4565b60048054604051630900d66f60e21b81526000926001600160a01b039092169163240359bc91610ad8918735910190815260200190565b602060405180830381865afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b199190612001565b6001600160a01b038082166000908152600260205260409020549192501680610b845760405162461bcd60e51b815260206004820152601f60248201527f4f4d3a204f5241434c455f464f525f4c45444745525f4e4f545f464f554e4400604482015260640161049a565b6000546001600160401b0361010090910481169086161015610bda5760405162461bcd60e51b815260206004820152600f60248201526e13d34e8811549057d513d3d7d3d311608a1b604482015260640161049a565b6000546001600160401b0361010090910481169086161115610cdc57610bfe6119ec565b6001600160401b0316856001600160401b03161115610c585760405162461bcd60e51b81526020600482015260166024820152754f4d3a20554e45585045435445445f4e45575f45524160501b604482015260640161049a565b60008054610100600160481b0319166101006001600160401b03881602179055610c80611b19565b600480546040805163fa597e0760e01b815290516001600160a01b039092169263fa597e0792828201926000929082900301818387803b158015610cc357600080fd5b505af1158015610cd7573d6000803e3d6000fd5b505050505b600480546040516314541bb560e21b81526001600160a01b038416926351506ed492610d1a928892600160a01b90920460ff16918b918b910161265c565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050505050505050565b6004546001600160a01b031615610da75760405162461bcd60e51b815260206004820152601860248201527713d34e8813125113d7d053149150511657d111519253915160421b604482015260640161049a565b6001600160a01b038116610dfa5760405162461bcd60e51b815260206004820152601a6024820152794f4d3a20494e434f52524543545f4c49444f5f4144445245535360301b604482015260640161049a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061288e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b8152600401610ed192919061201e565b602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f129190612035565b610f2e5760405162461bcd60e51b815260040161049a90612057565b6104ab611c58565b6003546001600160a01b031615610f895760405162461bcd60e51b815260206004820152601760248201527613d34e881053149150511657d253925512505312569151604a1b604482015260640161049a565b6001600160a01b038216610fdd5760405162461bcd60e51b815260206004820152601b60248201527a4f4d3a20494e434f52524543545f434c4f4e455f4144445245535360281b604482015260640161049a565b60008160ff16118015610ff3575060ff8160ff16105b6110365760405162461bcd60e51b81526020600482015260146024820152734f4d3a20494e434f52524543545f51554f52554d60601b604482015260640161049a565b600380546001600160a01b039093166001600160a01b0319909316929092179091556004805460ff909216600160a01b0260ff60a01b19909216919091179055565b6004546001600160a01b031633146110a25760405162461bcd60e51b815260040161049a9061276a565b6003546001600160a01b03166110fa5760405162461bcd60e51b815260206004820152601e60248201527f4f4d3a204f5241434c455f434c4f4e455f554e494e495449414c495a45440000604482015260640161049a565b600354600090611121906001600160a01b03166001600160601b0319606085901b16611cb0565b60405163485cc95560e01b81523060048201526001600160a01b0384811660248301529192509082169063485cc95590604401600060405180830381600087803b15801561116e57600080fd5b505af1158015611182573d6000803e3d6000fd5b505050506001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b60008051602061286e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161126992919061201e565b602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612035565b6112c65760405162461bcd60e51b815260040161049a90612057565b6001600160a01b03821661130f5760405162461bcd60e51b815260206004820152601060248201526f13d34e8810905117d05491d55351539560821b604482015260640161049a565b60001961131b83611a36565b1461135c5760405162461bcd60e51b81526020600482015260116024820152704f4d3a204d454d4245525f45584953545360781b604482015260640161049a565b611368600160ff612797565b600154106113af5760405162461bcd60e51b81526020600482015260146024820152734f4d3a204d454d424552535f544f4f5f4d414e5960601b604482015260640161049a565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790556040517fb251eb052afc73ffd02ffe85ad79990a8b3fed60d76dbc2fa2fdd7123dffd91490611429908490611e4f565b60405180910390a15050565b7f2c204f3ef59cc164f843cf6919920470e37721ba425db7893d02e60cfd0bafdc600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b81526004016114fc92919061201e565b602060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d9190612035565b6115595760405162461bcd60e51b815260040161049a90612057565b6000826001600160401b0316116115ac5760405162461bcd60e51b81526020600482015260176024820152764f4d3a204241445f5345434f4e44535f5045525f45524160481b604482015260640161049a565b826001600160401b0316426001600160401b031610156116025760405162461bcd60e51b815260206004820152601160248201527004f4d3a204241445f54494d455354414d5607c1b604482015260640161049a565b60008261160f85426127ae565b61161991906127d6565b611623908661280a565b6000549091506001600160401b036101009091048116908216101561167e5760405162461bcd60e51b815260206004820152601160248201527027a69d1022a920afa1a7a62624a9a4a7a760791b604482015260640161049a565b5050600480546001600160401b03948516600160a81b02600160a81b600160e81b031990911617905560058054918416600160401b026001600160801b03199092169290931691909117179055565b6004546001600160a01b031633146116f75760405162461bcd60e51b815260040161049a9061276a565b6001600160a01b0316600090815260026020526040902080546001600160a01b0319169055565b60008051602061286e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a69190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b81526004016117d392919061201e565b602060405180830381865afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190612035565b6118305760405162461bcd60e51b815260040161049a90612057565b600061183b83611a36565b905060001981141561185f5760405162461bcd60e51b815260040161049a906124d4565b6001805460009161186f91612797565b90508082146118e6576001818154811061188b5761188b612258565b600091825260209091200154600180546001600160a01b0390921691849081106118b7576118b7612258565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60018054806118f7576118f7612835565b600082815260209020810160001990810180546001600160a01b03191690550190556040517f6e76fb4c77256006d9c38ec7d82b45a8c8f3c27b1d6766fffc42dfb8de68449290611949908690611e4f565b60405180910390a1611959611b19565b50505050565b60005460ff166119a85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161049a565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516119e29190611e4f565b60405180910390a1565b6005546000906001600160401b03600160401b8204811691611a0f9116426127ae565b611a1991906127d6565b60045461052b9190600160a81b90046001600160401b031661280a565b600154600090815b81811015611a9557836001600160a01b031660018281548110611a6357611a63612258565b6000918252602090912001546001600160a01b03161415611a85579392505050565b611a8e81612284565b9050611a3e565b506000199392505050565b600080611aae836000611d50565b50905060ff80168360a0015151108015611aec5750808360600151611ad3919061284b565b6001600160801b031683608001516001600160801b0316145b8015611b12575082608001516001600160801b03168360e001516001600160801b031610155b9392505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663df1979566040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9691908101906121ca565b805190915060005b81811015611c5357600060026000858481518110611bbe57611bbe612258565b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541690508015611c4257806001600160a01b031663b75b518c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b505050505b50611c4c81612284565b9050611b9e565b505050565b60005460ff1615611c7b5760405162461bcd60e51b815260040161049a9061229f565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119d53390565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b038116611d4a5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b604482015260640161049a565b92915050565b60008060008060005b8660a0015151811015611e11578660a001518181518110611d7c57611d7c612258565b60200260200101516000015183611d93919061284b565b9250856001600160401b03168760a001518281518110611db557611db5612258565b6020026020010151602001516001600160401b031611611dff578660a001518181518110611de557611de5612258565b60200260200101516000015182611dfc919061284b565b91505b80611e0981612284565b915050611d59565b50909590945092505050565b6001600160a01b03811681146104ab57600080fd5b600060208284031215611e4457600080fd5b8135611b1281611e1d565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611e9b57835183529284019291840191600101611e7f565b50909695505050505050565b600060208284031215611eb957600080fd5b5035919050565b60008060408385031215611ed357600080fd5b8235611ede81611e1d565b946020939093013593505050565b803560ff81168114611efd57600080fd5b919050565b600060208284031215611f1457600080fd5b611b1282611eec565b80356001600160401b0381168114611efd57600080fd5b60008060408385031215611f4757600080fd5b611f5083611f1d565b915060208301356001600160401b03811115611f6b57600080fd5b83016101208186031215611f7e57600080fd5b809150509250929050565b60008060408385031215611f9c57600080fd5b8235611fa781611e1d565b9150611fb560208401611eec565b90509250929050565b600080600060608486031215611fd357600080fd5b611fdc84611f1d565b9250611fea60208501611f1d565b9150611ff860408501611f1d565b90509250925092565b60006020828403121561201357600080fd5b8151611b1281611e1d565b9182526001600160a01b0316602082015260400190565b60006020828403121561204757600080fd5b81518015158114611b1257600080fd5b60208082526010908201526f13d34e8815539055551213d493d6915160821b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156120b9576120b9612081565b60405290565b60405161012081016001600160401b03811182821017156120b9576120b9612081565b604051601f8201601f191681016001600160401b038111828210171561210a5761210a612081565b604052919050565b60006001600160401b0382111561212b5761212b612081565b5060051b60200190565b6000602080838503121561214857600080fd5b82516001600160401b0381111561215e57600080fd5b8301601f8101851361216f57600080fd5b805161218261217d82612112565b6120e2565b81815260059190911b820183019083810190878311156121a157600080fd5b928401925b828410156121bf578351825292840192908401906121a6565b979650505050505050565b600060208083850312156121dd57600080fd5b82516001600160401b038111156121f357600080fd5b8301601f8101851361220457600080fd5b805161221261217d82612112565b81815260059190911b8201830190838101908783111561223157600080fd5b928401925b828410156121bf57835161224981611e1d565b82529284019290840190612236565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122985761229861226e565b5060010190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b803560048110611efd57600080fd5b80356001600160801b0381168114611efd57600080fd5b600082601f83011261230057600080fd5b8135602061231061217d83612112565b82815260069290921b8401810191818101908684111561232f57600080fd5b8286015b8481101561237c576040818903121561234c5760008081fd5b612354612097565b61235d826122d8565b815261236a858301611f1d565b81860152835291830191604001612333565b509695505050505050565b803563ffffffff81168114611efd57600080fd5b600082601f8301126123ac57600080fd5b813560206123bc61217d83612112565b82815260059290921b840181019181810190868411156123db57600080fd5b8286015b8481101561237c576123f081612387565b83529183019183016123df565b6000610120823603121561241057600080fd5b6124186120bf565b8235815260208301356020820152612432604084016122c9565b6040820152612443606084016122d8565b6060820152612454608084016122d8565b608082015260a08301356001600160401b038082111561247357600080fd5b61247f368387016122ef565b60a084015260c085013591508082111561249857600080fd5b506124a53682860161239b565b60c0830152506124b760e084016122d8565b60e08201526101006124ca818501612387565b9082015292915050565b60208082526014908201527313d34e8813515350915497d393d517d193d5539160621b604082015260600190565b6004811061252057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160801b03169052565b6000808335601e1984360301811261254857600080fd5b83016020810192503590506001600160401b0381111561256757600080fd5b8060061b36038313156106b157600080fd5b8183526000602080850194508260005b858110156125d0576001600160801b036125a2836122d8565b1687526001600160401b036125b8838501611f1d565b16878401526040968701969190910190600101612589565b509495945050505050565b6000808335601e198436030181126125f257600080fd5b83016020810192503590506001600160401b0381111561261157600080fd5b8060051b36038313156106b157600080fd5b8183526000602080850194508260005b858110156125d05763ffffffff61264983612387565b1687529582019590820190600101612633565b84815260ff8416602082015260018060401b03831660408201526080606082015281356080820152602082013560a0820152600061269c604084016122c9565b6126a960c0840182612502565b506126b6606084016122d8565b6126c360e0840182612524565b506126d0608084016122d8565b6101006126df81850183612524565b6126ec60a0860186612531565b6101208681015292506127046101a086018483612579565b92505061271460c08601866125db565b858403607f190161014087015261272c848284612623565b9350505061273c60e086016122d8565b61274a610160860182612524565b50612756818601612387565b63ffffffff8116610180860152905061237c565b6020808252601390820152724f4d3a2043414c4c45525f4e4f545f4c49444f60681b604082015260600190565b6000828210156127a9576127a961226e565b500390565b60006001600160401b03838116908316818110156127ce576127ce61226e565b039392505050565b60006001600160401b03838116806127fe57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160401b0382811684821680830382111561282c5761282c61226e565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b60006001600160801b0382811684821680830382111561282c5761282c61226e56fe390fb325ad2241104ec9502c1fe8ca89f34a50b811d77948772f75454c563cebd76e3374742c17bd14ffaf46cd349ec292baf7d8425512fa8fe132557a4c967ba264697066735822122077de2a385c4f88d12f0df1731cb42b678ffb4fc9df479b0dd40e08585de7917c64736f6c634300080a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101335760003560e01c8063046f7da21461013857806310d3d22e146101425780631d55fde41461018457806329d009f2146101995780632e80d9b6146101b957806333bc7090146101df5780633f109d23146101f2578063559ccc551461020a5780635c975abb1461021d5780635daf08ca146102335780635e6f8df3146102465780636dcab78f14610278578063792922351461028b5780637d4a3d431461029e5780637d774e31146102b85780638456cb59146102cb5780638b21f170146102d3578063943b24b2146102e65780639f04e9ac146102f9578063ae2df7c01461030c578063b164e43714610326578063cbe48ee814610339578063d381787a1461034c578063ea0e35b11461035f578063f98fae8114610375575b600080fd5b610140610388565b005b61016e610150366004611e32565b6001600160a01b039081166000908152600260205260409020541690565b60405161017b9190611e4f565b60405180910390f35b61018c6104ae565b60405161017b9190611e63565b6101a1610530565b6040516001600160401b03909116815260200161017b565b6004546101cd90600160a01b900460ff1681565b60405160ff909116815260200161017b565b60035461016e906001600160a01b031681565b6000546101a19061010090046001600160401b031681565b6005546101a1906001600160401b031681565b60005460ff16604051901515815260200161017b565b61016e610241366004611ea7565b61053a565b610259610254366004611ec0565b610564565b604080516001600160401b03909316835290151560208301520161017b565b610140610286366004611f02565b6106b8565b610140610299366004611f34565b6109fb565b6005546101a190600160401b90046001600160401b031681565b6101406102c6366004611e32565b610d53565b610140610e1c565b60045461016e906001600160a01b031681565b6101406102f4366004611f89565b610f36565b610140610307366004611e32565b611078565b6004546101a190600160a81b90046001600160401b031681565b610140610334366004611e32565b6111b4565b610140610347366004611fbe565b611435565b61014061035a366004611e32565b6116cd565b61036760ff81565b60405190815260200161017b565b610140610383366004611e32565b61171e565b60008051602061288e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af11580156103ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104109190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161043d92919061201e565b602060405180830381865afa15801561045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047e9190612035565b6104a35760405162461bcd60e51b815260040161049a90612057565b60405180910390fd5b6104ab61195f565b50565b6060600460009054906101000a90046001600160a01b03166001600160a01b0316631d55fde46040518163ffffffff1660e01b8152600401600060405180830381865afa158015610503573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261052b9190810190612135565b905090565b600061052b6119ec565b6001818154811061054a57600080fd5b6000918252602090912001546001600160a01b0316905081565b60008054819061010090046001600160401b03168161058286611a36565b905060001981141561059a57509150600090506106b1565b60048054604051630900d66f60e21b81529182018790526000916001600160a01b039091169063240359bc90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190612001565b90506001600160a01b03811661062957826000945094505050506106b1565b6001600160a01b03818116600090815260026020526040908190205490516389b8036160e01b815260048101859052859291909116906389b8036190602401602060405180830381865afa158015610685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a99190612035565b945094505050505b9250929050565b7f8ac38a2a3c56dddd46cb8bc53ef71a94590a3862aefd3143ed3126454af63731600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af115801561072e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107529190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161077f92919061201e565b602060405180830381865afa15801561079c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c09190612035565b6107dc5760405162461bcd60e51b815260040161049a90612057565b60008260ff161180156107f2575060ff8260ff16105b6108385760405162461bcd60e51b81526020600482015260176024820152764f4d3a2051554f52554d5f574f4e545f42455f4d41444560481b604482015260640161049a565b6004805460ff848116600160a01b81810260ff60a01b198516179094559290910416908111156109c0576000600460009054906101000a90046001600160a01b03166001600160a01b031663df1979566040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108df91908101906121ca565b805190915060005b818110156109bc5760006002600085848151811061090757610907612258565b6020908102919091018101516001600160a01b039081168352908201929092526040016000205416905080156109ab5760005460405163cb35cf3160e01b815260ff891660048201526101009091046001600160401b031660248201526001600160a01b0382169063cb35cf3190604401600060405180830381600087803b15801561099257600080fd5b505af11580156109a6573d6000803e3d6000fd5b505050505b506109b581612284565b90506108e7565b5050505b60405160ff841681527fd6ecd940f5784ceceeeb048268900f819851986dbe41c49f6e754b988868df879060200160405180910390a1505050565b60005460ff1615610a1e5760405162461bcd60e51b815260040161049a9061229f565b610a2f610a2a826123fd565b611aa0565b610a725760405162461bcd60e51b815260206004820152601460248201527313d34e88125390d3d4949150d517d4915413d49560621b604482015260640161049a565b6000610a7d33611a36565b9050600019811415610aa15760405162461bcd60e51b815260040161049a906124d4565b60048054604051630900d66f60e21b81526000926001600160a01b039092169163240359bc91610ad8918735910190815260200190565b602060405180830381865afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b199190612001565b6001600160a01b038082166000908152600260205260409020549192501680610b845760405162461bcd60e51b815260206004820152601f60248201527f4f4d3a204f5241434c455f464f525f4c45444745525f4e4f545f464f554e4400604482015260640161049a565b6000546001600160401b0361010090910481169086161015610bda5760405162461bcd60e51b815260206004820152600f60248201526e13d34e8811549057d513d3d7d3d311608a1b604482015260640161049a565b6000546001600160401b0361010090910481169086161115610cdc57610bfe6119ec565b6001600160401b0316856001600160401b03161115610c585760405162461bcd60e51b81526020600482015260166024820152754f4d3a20554e45585045435445445f4e45575f45524160501b604482015260640161049a565b60008054610100600160481b0319166101006001600160401b03881602179055610c80611b19565b600480546040805163fa597e0760e01b815290516001600160a01b039092169263fa597e0792828201926000929082900301818387803b158015610cc357600080fd5b505af1158015610cd7573d6000803e3d6000fd5b505050505b600480546040516314541bb560e21b81526001600160a01b038416926351506ed492610d1a928892600160a01b90920460ff16918b918b910161265c565b600060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050505050505050565b6004546001600160a01b031615610da75760405162461bcd60e51b815260206004820152601860248201527713d34e8813125113d7d053149150511657d111519253915160421b604482015260640161049a565b6001600160a01b038116610dfa5760405162461bcd60e51b815260206004820152601a6024820152794f4d3a20494e434f52524543545f4c49444f5f4144445245535360301b604482015260640161049a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008051602061288e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b8152600401610ed192919061201e565b602060405180830381865afa158015610eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f129190612035565b610f2e5760405162461bcd60e51b815260040161049a90612057565b6104ab611c58565b6003546001600160a01b031615610f895760405162461bcd60e51b815260206004820152601760248201527613d34e881053149150511657d253925512505312569151604a1b604482015260640161049a565b6001600160a01b038216610fdd5760405162461bcd60e51b815260206004820152601b60248201527a4f4d3a20494e434f52524543545f434c4f4e455f4144445245535360281b604482015260640161049a565b60008160ff16118015610ff3575060ff8160ff16105b6110365760405162461bcd60e51b81526020600482015260146024820152734f4d3a20494e434f52524543545f51554f52554d60601b604482015260640161049a565b600380546001600160a01b039093166001600160a01b0319909316929092179091556004805460ff909216600160a01b0260ff60a01b19909216919091179055565b6004546001600160a01b031633146110a25760405162461bcd60e51b815260040161049a9061276a565b6003546001600160a01b03166110fa5760405162461bcd60e51b815260206004820152601e60248201527f4f4d3a204f5241434c455f434c4f4e455f554e494e495449414c495a45440000604482015260640161049a565b600354600090611121906001600160a01b03166001600160601b0319606085901b16611cb0565b60405163485cc95560e01b81523060048201526001600160a01b0384811660248301529192509082169063485cc95590604401600060405180830381600087803b15801561116e57600080fd5b505af1158015611182573d6000803e3d6000fd5b505050506001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b60008051602061286e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b815260040161126992919061201e565b602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612035565b6112c65760405162461bcd60e51b815260040161049a90612057565b6001600160a01b03821661130f5760405162461bcd60e51b815260206004820152601060248201526f13d34e8810905117d05491d55351539560821b604482015260640161049a565b60001961131b83611a36565b1461135c5760405162461bcd60e51b81526020600482015260116024820152704f4d3a204d454d4245525f45584953545360781b604482015260640161049a565b611368600160ff612797565b600154106113af5760405162461bcd60e51b81526020600482015260146024820152734f4d3a204d454d424552535f544f4f5f4d414e5960601b604482015260640161049a565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0384161790556040517fb251eb052afc73ffd02ffe85ad79990a8b3fed60d76dbc2fa2fdd7123dffd91490611429908490611e4f565b60405180910390a15050565b7f2c204f3ef59cc164f843cf6919920470e37721ba425db7893d02e60cfd0bafdc600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b81526004016114fc92919061201e565b602060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d9190612035565b6115595760405162461bcd60e51b815260040161049a90612057565b6000826001600160401b0316116115ac5760405162461bcd60e51b81526020600482015260176024820152764f4d3a204241445f5345434f4e44535f5045525f45524160481b604482015260640161049a565b826001600160401b0316426001600160401b031610156116025760405162461bcd60e51b815260206004820152601160248201527004f4d3a204241445f54494d455354414d5607c1b604482015260640161049a565b60008261160f85426127ae565b61161991906127d6565b611623908661280a565b6000549091506001600160401b036101009091048116908216101561167e5760405162461bcd60e51b815260206004820152601160248201527027a69d1022a920afa1a7a62624a9a4a7a760791b604482015260640161049a565b5050600480546001600160401b03948516600160a81b02600160a81b600160e81b031990911617905560058054918416600160401b026001600160801b03199092169290931691909117179055565b6004546001600160a01b031633146116f75760405162461bcd60e51b815260040161049a9061276a565b6001600160a01b0316600090815260026020526040902080546001600160a01b0319169055565b60008051602061286e833981519152600460009054906101000a90046001600160a01b03166001600160a01b031663a1e206c76040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a69190612001565b6001600160a01b031663eff11b2c82336040518363ffffffff1660e01b81526004016117d392919061201e565b602060405180830381865afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190612035565b6118305760405162461bcd60e51b815260040161049a90612057565b600061183b83611a36565b905060001981141561185f5760405162461bcd60e51b815260040161049a906124d4565b6001805460009161186f91612797565b90508082146118e6576001818154811061188b5761188b612258565b600091825260209091200154600180546001600160a01b0390921691849081106118b7576118b7612258565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60018054806118f7576118f7612835565b600082815260209020810160001990810180546001600160a01b03191690550190556040517f6e76fb4c77256006d9c38ec7d82b45a8c8f3c27b1d6766fffc42dfb8de68449290611949908690611e4f565b60405180910390a1611959611b19565b50505050565b60005460ff166119a85760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161049a565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516119e29190611e4f565b60405180910390a1565b6005546000906001600160401b03600160401b8204811691611a0f9116426127ae565b611a1991906127d6565b60045461052b9190600160a81b90046001600160401b031661280a565b600154600090815b81811015611a9557836001600160a01b031660018281548110611a6357611a63612258565b6000918252602090912001546001600160a01b03161415611a85579392505050565b611a8e81612284565b9050611a3e565b506000199392505050565b600080611aae836000611d50565b50905060ff80168360a0015151108015611aec5750808360600151611ad3919061284b565b6001600160801b031683608001516001600160801b0316145b8015611b12575082608001516001600160801b03168360e001516001600160801b031610155b9392505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b031663df1979566040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b9691908101906121ca565b805190915060005b81811015611c5357600060026000858481518110611bbe57611bbe612258565b6020908102919091018101516001600160a01b03908116835290820192909252604001600020541690508015611c4257806001600160a01b031663b75b518c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c2957600080fd5b505af1158015611c3d573d6000803e3d6000fd5b505050505b50611c4c81612284565b9050611b9e565b505050565b60005460ff1615611c7b5760405162461bcd60e51b815260040161049a9061229f565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119d53390565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b038116611d4a5760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b604482015260640161049a565b92915050565b60008060008060005b8660a0015151811015611e11578660a001518181518110611d7c57611d7c612258565b60200260200101516000015183611d93919061284b565b9250856001600160401b03168760a001518281518110611db557611db5612258565b6020026020010151602001516001600160401b031611611dff578660a001518181518110611de557611de5612258565b60200260200101516000015182611dfc919061284b565b91505b80611e0981612284565b915050611d59565b50909590945092505050565b6001600160a01b03811681146104ab57600080fd5b600060208284031215611e4457600080fd5b8135611b1281611e1d565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015611e9b57835183529284019291840191600101611e7f565b50909695505050505050565b600060208284031215611eb957600080fd5b5035919050565b60008060408385031215611ed357600080fd5b8235611ede81611e1d565b946020939093013593505050565b803560ff81168114611efd57600080fd5b919050565b600060208284031215611f1457600080fd5b611b1282611eec565b80356001600160401b0381168114611efd57600080fd5b60008060408385031215611f4757600080fd5b611f5083611f1d565b915060208301356001600160401b03811115611f6b57600080fd5b83016101208186031215611f7e57600080fd5b809150509250929050565b60008060408385031215611f9c57600080fd5b8235611fa781611e1d565b9150611fb560208401611eec565b90509250929050565b600080600060608486031215611fd357600080fd5b611fdc84611f1d565b9250611fea60208501611f1d565b9150611ff860408501611f1d565b90509250925092565b60006020828403121561201357600080fd5b8151611b1281611e1d565b9182526001600160a01b0316602082015260400190565b60006020828403121561204757600080fd5b81518015158114611b1257600080fd5b60208082526010908201526f13d34e8815539055551213d493d6915160821b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156120b9576120b9612081565b60405290565b60405161012081016001600160401b03811182821017156120b9576120b9612081565b604051601f8201601f191681016001600160401b038111828210171561210a5761210a612081565b604052919050565b60006001600160401b0382111561212b5761212b612081565b5060051b60200190565b6000602080838503121561214857600080fd5b82516001600160401b0381111561215e57600080fd5b8301601f8101851361216f57600080fd5b805161218261217d82612112565b6120e2565b81815260059190911b820183019083810190878311156121a157600080fd5b928401925b828410156121bf578351825292840192908401906121a6565b979650505050505050565b600060208083850312156121dd57600080fd5b82516001600160401b038111156121f357600080fd5b8301601f8101851361220457600080fd5b805161221261217d82612112565b81815260059190911b8201830190838101908783111561223157600080fd5b928401925b828410156121bf57835161224981611e1d565b82529284019290840190612236565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156122985761229861226e565b5060010190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b803560048110611efd57600080fd5b80356001600160801b0381168114611efd57600080fd5b600082601f83011261230057600080fd5b8135602061231061217d83612112565b82815260069290921b8401810191818101908684111561232f57600080fd5b8286015b8481101561237c576040818903121561234c5760008081fd5b612354612097565b61235d826122d8565b815261236a858301611f1d565b81860152835291830191604001612333565b509695505050505050565b803563ffffffff81168114611efd57600080fd5b600082601f8301126123ac57600080fd5b813560206123bc61217d83612112565b82815260059290921b840181019181810190868411156123db57600080fd5b8286015b8481101561237c576123f081612387565b83529183019183016123df565b6000610120823603121561241057600080fd5b6124186120bf565b8235815260208301356020820152612432604084016122c9565b6040820152612443606084016122d8565b6060820152612454608084016122d8565b608082015260a08301356001600160401b038082111561247357600080fd5b61247f368387016122ef565b60a084015260c085013591508082111561249857600080fd5b506124a53682860161239b565b60c0830152506124b760e084016122d8565b60e08201526101006124ca818501612387565b9082015292915050565b60208082526014908201527313d34e8813515350915497d393d517d193d5539160621b604082015260600190565b6004811061252057634e487b7160e01b600052602160045260246000fd5b9052565b6001600160801b03169052565b6000808335601e1984360301811261254857600080fd5b83016020810192503590506001600160401b0381111561256757600080fd5b8060061b36038313156106b157600080fd5b8183526000602080850194508260005b858110156125d0576001600160801b036125a2836122d8565b1687526001600160401b036125b8838501611f1d565b16878401526040968701969190910190600101612589565b509495945050505050565b6000808335601e198436030181126125f257600080fd5b83016020810192503590506001600160401b0381111561261157600080fd5b8060051b36038313156106b157600080fd5b8183526000602080850194508260005b858110156125d05763ffffffff61264983612387565b1687529582019590820190600101612633565b84815260ff8416602082015260018060401b03831660408201526080606082015281356080820152602082013560a0820152600061269c604084016122c9565b6126a960c0840182612502565b506126b6606084016122d8565b6126c360e0840182612524565b506126d0608084016122d8565b6101006126df81850183612524565b6126ec60a0860186612531565b6101208681015292506127046101a086018483612579565b92505061271460c08601866125db565b858403607f190161014087015261272c848284612623565b9350505061273c60e086016122d8565b61274a610160860182612524565b50612756818601612387565b63ffffffff8116610180860152905061237c565b6020808252601390820152724f4d3a2043414c4c45525f4e4f545f4c49444f60681b604082015260600190565b6000828210156127a9576127a961226e565b500390565b60006001600160401b03838116908316818110156127ce576127ce61226e565b039392505050565b60006001600160401b03838116806127fe57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160401b0382811684821680830382111561282c5761282c61226e565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b60006001600160801b0382811684821680830382111561282c5761282c61226e56fe390fb325ad2241104ec9502c1fe8ca89f34a50b811d77948772f75454c563cebd76e3374742c17bd14ffaf46cd349ec292baf7d8425512fa8fe132557a4c967ba264697066735822122077de2a385c4f88d12f0df1731cb42b678ffb4fc9df479b0dd40e08585de7917c64736f6c634300080a0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.