Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,323 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Submit | 17331882 | 621 days ago | IN | 0 ETH | 0.00192928 | ||||
Submit | 17326486 | 622 days ago | IN | 0 ETH | 0.00287089 | ||||
Submit | 17321090 | 622 days ago | IN | 0 ETH | 0.00236203 | ||||
Submit | 17315702 | 623 days ago | IN | 0 ETH | 0.00415209 | ||||
Submit | 17310303 | 624 days ago | IN | 0 ETH | 0.00239579 | ||||
Submit | 17304923 | 625 days ago | IN | 0 ETH | 0.00160249 | ||||
Submit | 17299524 | 625 days ago | IN | 0 ETH | 0.00194137 | ||||
Submit | 17294137 | 626 days ago | IN | 0 ETH | 0.00380564 | ||||
Submit | 17288751 | 627 days ago | IN | 0 ETH | 0.00309897 | ||||
Submit | 17283355 | 628 days ago | IN | 0 ETH | 0.00245748 | ||||
Submit | 17277996 | 628 days ago | IN | 0 ETH | 0.00232923 | ||||
Submit | 17272607 | 629 days ago | IN | 0 ETH | 0.00377377 | ||||
Submit | 17267240 | 630 days ago | IN | 0 ETH | 0.00480652 | ||||
Submit | 17261859 | 631 days ago | IN | 0 ETH | 0.00217219 | ||||
Submit | 17256503 | 631 days ago | IN | 0 ETH | 0.00207407 | ||||
Submit | 17251144 | 632 days ago | IN | 0 ETH | 0.00236145 | ||||
Submit | 17245787 | 633 days ago | IN | 0 ETH | 0.00532188 | ||||
Submit | 17240569 | 634 days ago | IN | 0 ETH | 0.00478131 | ||||
Submit | 17235234 | 634 days ago | IN | 0 ETH | 0.00458309 | ||||
Submit | 17229843 | 635 days ago | IN | 0 ETH | 0.00375196 | ||||
Submit | 17224438 | 636 days ago | IN | 0 ETH | 0.0073433 | ||||
Submit | 17219050 | 637 days ago | IN | 0 ETH | 0.00496166 | ||||
Submit | 17213634 | 638 days ago | IN | 0 ETH | 0.00452346 | ||||
Submit | 17208236 | 638 days ago | IN | 0 ETH | 0.00504724 | ||||
Submit | 17202844 | 639 days ago | IN | 0 ETH | 0.00871769 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ForeignChain
Compiler Version
v0.6.8+commit.0bbfe453
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.8; pragma experimental ABIEncoderV2; import "./Registry.sol"; import "./BaseChain.sol"; contract ForeignChain is BaseChain { // we will not be changing replicator that often, so we can make it immutable, it saves 200gas address public immutable replicator; uint32 public lastBlockId; bool public deprecated; // ========== EVENTS ========== // event LogBlockReplication(address indexed minter, uint32 blockId); event LogDeprecation(address indexed deprecator); // ========== CONSTRUCTOR ========== // constructor( address _contractRegistry, uint16 _padding, uint16 _requiredSignatures, address _replicator ) public BaseChain(_contractRegistry, _padding, _requiredSignatures) { replicator = _replicator; } modifier onlyReplicator() { require(msg.sender == replicator, "onlyReplicator"); _; } // ========== MUTATIVE FUNCTIONS ========== // function register() override external { require(msg.sender == address(contractRegistry), "only contractRegistry can register"); ForeignChain oldChain = ForeignChain(contractRegistry.getAddress("Chain")); require(address(oldChain) != address(this), "registration must be done before address in registry is replaced"); if (address(oldChain) != address(0x0)) { lastBlockId = oldChain.lastBlockId(); // we cloning last block time, because we will need reference point for next submissions // TODO remove this after first redeployment will be done // we need two deployment to switch from blocks -> squashedRoots because previous version and this one // are not compatible in a sense of registering/unregistering // on release we will deploy contract with step1) then we can delete step1) completely // later deployment can be done normally, using step2 // step 1) first update uint32 lastBlockTime = oldChain.blocks(lastBlockId).dataTimestamp; bytes32 lastRootTime; // solhint-disable-next-line no-inline-assembly assembly { lastRootTime := or(0x0, lastBlockTime) } squashedRoots[lastBlockId] = lastRootTime; // step 2) next updates (we can remove step1) // squashedRoots[lastBlockId] = oldChain.squashedRoots(lastBlockId); } } function unregister() override external { require(msg.sender == address(contractRegistry), "only contractRegistry can unregister"); require(!deprecated, "contract is already deprecated"); ForeignChain newChain = ForeignChain(contractRegistry.getAddress("Chain")); require(address(newChain) != address(this), "unregistering must be done after address in registry is replaced"); require(newChain.isForeign(), "can not be replaced with chain of different type"); deprecated = true; emit LogDeprecation(msg.sender); } function submit( uint32 _dataTimestamp, bytes32 _root, bytes32[] calldata _keys, uint256[] calldata _values, uint32 _blockId ) external onlyReplicator { require(!deprecated, "contract is deprecated"); uint lastDataTimestamp = squashedRoots[lastBlockId].extractTimestamp(); require(squashedRoots[_blockId].extractTimestamp() == 0, "blockId already taken"); require(lastDataTimestamp < _dataTimestamp, "can NOT submit older data"); require(lastDataTimestamp + padding < block.timestamp, "do not spam"); require(_keys.length == _values.length, "numbers of keys and values not the same"); for (uint256 i = 0; i < _keys.length; i++) { require(uint224(_values[i]) == _values[i], "FCD overflow"); fcds[_keys[i]] = FirstClassData(uint224(_values[i]), _dataTimestamp); } squashedRoots[_blockId] = MerkleProof.makeSquashedRoot(_root, _dataTimestamp); lastBlockId = _blockId; emit LogBlockReplication(msg.sender, _blockId); } // ========== VIEWS ========== // function isForeign() override external pure returns (bool) { return true; } function getName() override external pure returns (bytes32) { return "Chain"; } function getStatus() external view returns( uint256 blockNumber, uint16 timePadding, uint32 lastDataTimestamp, uint32 lastId, uint32 nextBlockId ) { blockNumber = block.number; timePadding = padding; lastId = lastBlockId; lastDataTimestamp = squashedRoots[lastId].extractTimestamp(); nextBlockId = getBlockIdAtTimestamp(block.timestamp + 1); } // this function does not works for past timestamps function getBlockIdAtTimestamp(uint256 _timestamp) override public view returns (uint32) { uint32 lastId = lastBlockId; uint32 dataTimestamp = squashedRoots[lastId].extractTimestamp(); if (dataTimestamp == 0) { return 0; } if (dataTimestamp + padding < _timestamp) { return lastId + 1; } return lastId; } function getLatestBlockId() override public view returns (uint32) { return lastBlockId; } }
//SPDX-License-Identifier: MIT pragma solidity 0.6.8; // Inheritance import "@openzeppelin/contracts/access/Ownable.sol"; import "./extensions/Registrable.sol"; contract Registry is Ownable { mapping(bytes32 => address) public registry; // ========== EVENTS ========== // event LogRegistered(address indexed destination, bytes32 name); // ========== MUTATIVE FUNCTIONS ========== // function importAddresses(bytes32[] calldata _names, address[] calldata _destinations) external onlyOwner { require(_names.length == _destinations.length, "Input lengths must match"); for (uint i = 0; i < _names.length; i++) { registry[_names[i]] = _destinations[i]; emit LogRegistered(_destinations[i], _names[i]); } } function importContracts(address[] calldata _destinations) external onlyOwner { for (uint i = 0; i < _destinations.length; i++) { bytes32 name = Registrable(_destinations[i]).getName(); registry[name] = _destinations[i]; emit LogRegistered(_destinations[i], name); } } function atomicUpdate(address _newContract) external onlyOwner { Registrable(_newContract).register(); bytes32 name = Registrable(_newContract).getName(); address oldContract = registry[name]; registry[name] = _newContract; Registrable(oldContract).unregister(); emit LogRegistered(_newContract, name); } // ========== VIEWS ========== // function requireAndGetAddress(bytes32 name) external view returns (address) { address _foundAddress = registry[name]; require(_foundAddress != address(0), string(abi.encodePacked("Name not registered: ", name))); return _foundAddress; } function getAddress(bytes32 _bytes) external view returns (address) { return registry[_bytes]; } function getAddressByString(string memory _name) public view returns (address) { return registry[stringToBytes32(_name)]; } function stringToBytes32(string memory _string) public pure returns (bytes32 result) { bytes memory tempEmptyStringTest = bytes(_string); if (tempEmptyStringTest.length == 0) { return 0x0; } // solhint-disable-next-line no-inline-assembly assembly { result := mload(add(_string, 32)) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.8; pragma experimental ABIEncoderV2; import "./lib/MerkleProof.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@umb-network/toolbox/dist/contracts/lib/ValueDecoder.sol"; import "./interfaces/IStakingBank.sol"; import "./extensions/Registrable.sol"; import "./Registry.sol"; abstract contract BaseChain is Registrable, Ownable { using ValueDecoder for bytes; using MerkleProof for bytes32; // ========== STATE VARIABLES ========== // bytes constant public ETH_PREFIX = "\x19Ethereum Signed Message:\n32"; struct Block { bytes32 root; uint32 dataTimestamp; } struct FirstClassData { uint224 value; uint32 dataTimestamp; } mapping(uint256 => bytes32) public squashedRoots; mapping(bytes32 => FirstClassData) public fcds; uint32 public blocksCount; uint32 public immutable blocksCountOffset; uint16 public padding; uint16 public immutable requiredSignatures; // ========== CONSTRUCTOR ========== // constructor( address _contractRegistry, uint16 _padding, uint16 _requiredSignatures // we have a plan to use signatures also in foreign Chains so lets keep it in base ) public Registrable(_contractRegistry) { padding = _padding; requiredSignatures = _requiredSignatures; BaseChain oldChain = BaseChain(Registry(_contractRegistry).getAddress("Chain")); blocksCountOffset = address(oldChain) != address(0x0) // +1 because it might be situation when tx is already in progress in old contract ? oldChain.blocksCount() + oldChain.blocksCountOffset() + 1 : 0; } // ========== MUTATIVE FUNCTIONS ========== // function setPadding(uint16 _padding) external onlyOwner { padding = _padding; emit LogPadding(msg.sender, _padding); } // ========== VIEWS ========== // function isForeign() virtual external pure returns (bool); function recoverSigner(bytes32 _affidavit, uint8 _v, bytes32 _r, bytes32 _s) public pure returns (address) { bytes32 hash = keccak256(abi.encodePacked(ETH_PREFIX, _affidavit)); return ecrecover(hash, _v, _r, _s); } function blocks(uint256 _blockId) external view returns (Block memory) { bytes32 root = squashedRoots[_blockId]; return Block(root, root.extractTimestamp()); } function getBlockId() public view returns (uint32) { return getBlockIdAtTimestamp(block.timestamp); } // this function does not works for past timestamps function getBlockIdAtTimestamp(uint256 _timestamp) virtual public view returns (uint32) { uint32 _blocksCount = blocksCount + blocksCountOffset; if (_blocksCount == 0) { return 0; } if (squashedRoots[_blocksCount - 1].extractTimestamp() + padding < _timestamp) { return _blocksCount; } return _blocksCount - 1; } function getLatestBlockId() virtual public view returns (uint32) { return blocksCount + blocksCountOffset - 1; } function verifyProof(bytes32[] memory _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) { if (_root == bytes32(0)) { return false; } return _root.verify(_proof, _leaf); } function hashLeaf(bytes memory _key, bytes memory _value) public pure returns (bytes32) { return keccak256(abi.encodePacked(_key, _value)); } function verifyProofForBlock( uint256 _blockId, bytes32[] memory _proof, bytes memory _key, bytes memory _value ) public view returns (bool) { return squashedRoots[_blockId].verifySquashedRoot(_proof, keccak256(abi.encodePacked(_key, _value))); } function bytesToBytes32Array( bytes memory _data, uint256 _offset, uint256 _items ) public pure returns (bytes32[] memory) { bytes32[] memory dataList = new bytes32[](_items); for (uint256 i = 0; i < _items; i++) { bytes32 temp; uint256 idx = (i + 1 + _offset) * 32; // solhint-disable-next-line no-inline-assembly assembly { temp := mload(add(_data, idx)) } dataList[i] = temp; } return (dataList); } function verifyProofs( uint32[] memory _blockIds, bytes memory _proofs, uint256[] memory _proofItemsCounter, bytes32[] memory _leaves ) public view returns (bool[] memory results) { results = new bool[](_leaves.length); uint256 offset = 0; for (uint256 i = 0; i < _leaves.length; i++) { results[i] = squashedRoots[_blockIds[i]].verifySquashedRoot( bytesToBytes32Array(_proofs, offset, _proofItemsCounter[i]), _leaves[i] ); offset += _proofItemsCounter[i]; } } function getBlockRoot(uint32 _blockId) external view returns (bytes32) { return squashedRoots[_blockId].extractRoot(); } function getBlockTimestamp(uint32 _blockId) external view returns (uint32) { return squashedRoots[_blockId].extractTimestamp(); } function getCurrentValues(bytes32[] calldata _keys) external view returns (uint256[] memory values, uint32[] memory timestamps) { timestamps = new uint32[](_keys.length); values = new uint256[](_keys.length); for (uint i=0; i<_keys.length; i++) { FirstClassData storage numericFCD = fcds[_keys[i]]; values[i] = uint256(numericFCD.value); timestamps[i] = numericFCD.dataTimestamp; } } function getCurrentValue(bytes32 _key) external view returns (uint256 value, uint256 timestamp) { FirstClassData storage numericFCD = fcds[_key]; return (uint256(numericFCD.value), numericFCD.dataTimestamp); } // ========== EVENTS ========== // event LogPadding(address indexed executor, uint16 timePadding); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../GSN/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
//SPDX-License-Identifier: MIT pragma solidity 0.6.8; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../interfaces/IRegistry.sol"; import "../interfaces/IStakingBank.sol"; abstract contract Registrable { IRegistry public contractRegistry; // ========== CONSTRUCTOR ========== // constructor(address _contractRegistry) internal { require(_contractRegistry != address(0x0), "_registry is empty"); contractRegistry = IRegistry(_contractRegistry); } // ========== MODIFIERS ========== // modifier onlyFromContract(address _msgSender, bytes32 _contractName) { require( contractRegistry.getAddress(_contractName) == _msgSender, string(abi.encodePacked("caller is not ", _contractName)) ); _; } modifier withRegistrySetUp() { require(address(contractRegistry) != address(0x0), "_registry is empty"); _; } // ========== MUTATIVE ========== // function register() virtual external { // this is required only for ForeignChain // but for backward compatibility the body is implemented as empty // also note, that in order to use this method, we need new registry } function unregister() virtual external { // this is required only for ForeignChain // but for backward compatibility the body is implemented as empty // also note, that in order to use this method, we need new registry } // ========== VIEWS ========== // function getName() virtual external pure returns (bytes32); function stakingBankContract() public view returns (IStakingBank) { return IStakingBank(contractRegistry.requireAndGetAddress("StakingBank")); } function tokenContract() public view withRegistrySetUp returns (ERC20) { return ERC20(contractRegistry.requireAndGetAddress("UMB")); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { 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.6.0; import "../../GSN/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
//SPDX-License-Identifier: MIT pragma solidity 0.6.8; interface IRegistry { function getAddress(bytes32 name) external view returns (address); function requireAndGetAddress(bytes32 name) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.8; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IStakingBank is IERC20 { function receiveApproval(address _from) external returns (bool success); function withdraw(uint256 _value) external returns (bool success); function create(address _id, string calldata _location) external; function update(address _id, string calldata _location) external; function addresses(uint256 _ix) external view returns (address); function validators(address _id) external view returns (address id, string memory location); function getNumberOfValidators() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.8; /** * @dev These functions deal with verification of Merkle trees (hash trees), * based on openzeppelin/contracts/cryptography/MerkleProof.sol * adjusted to support squashed root */ library MerkleProof { uint256 constant public ROOT_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000; uint256 constant public TIMESTAMP_MASK = 0xffffffff; function extractSquashedData(bytes32 _rootTimestamp) internal pure returns (bytes32 root, uint32 dataTimestamp) { // solhint-disable-next-line no-inline-assembly assembly { root := and(_rootTimestamp, ROOT_MASK) dataTimestamp := and(_rootTimestamp, TIMESTAMP_MASK) } } function extractRoot(bytes32 _rootTimestamp) internal pure returns (bytes32 root) { // solhint-disable-next-line no-inline-assembly assembly { root := and(_rootTimestamp, ROOT_MASK) } } function extractTimestamp(bytes32 _rootTimestamp) internal pure returns (uint32 dataTimestamp) { // solhint-disable-next-line no-inline-assembly assembly { dataTimestamp := and(_rootTimestamp, TIMESTAMP_MASK) } } function makeSquashedRoot(bytes32 _root, uint32 _timestamp) internal pure returns (bytes32 rootTimestamp) { // solhint-disable-next-line no-inline-assembly assembly { rootTimestamp := or(and(_root, ROOT_MASK), _timestamp) } } /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verifySquashedRoot(bytes32 squashedRoot, bytes32[] memory proof, bytes32 leaf) internal pure returns (bool) { return extractRoot(computeRoot(proof, leaf)) == extractRoot(squashedRoot); } function verify(bytes32 root, bytes32[] memory proof, bytes32 leaf) internal pure returns (bool) { return computeRoot(proof, leaf) == root; } function computeRoot(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash; } }
//SPDX-License-Identifier: Unlicensed pragma solidity >=0.6.8; library ValueDecoder { function toUint(bytes memory _bytes) internal pure returns (uint256 value) { assembly { value := mload(add(_bytes, 32)) } } function toUint(bytes32 _bytes) internal pure returns (uint256 value) { assembly { value := _bytes } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_contractRegistry","type":"address"},{"internalType":"uint16","name":"_padding","type":"uint16"},{"internalType":"uint16","name":"_requiredSignatures","type":"uint16"},{"internalType":"address","name":"_replicator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint32","name":"blockId","type":"uint32"}],"name":"LogBlockReplication","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deprecator","type":"address"}],"name":"LogDeprecation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint16","name":"timePadding","type":"uint16"}],"name":"LogPadding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"ETH_PREFIX","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockId","type":"uint256"}],"name":"blocks","outputs":[{"components":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint32","name":"dataTimestamp","type":"uint32"}],"internalType":"struct BaseChain.Block","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksCountOffset","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"uint256","name":"_items","type":"uint256"}],"name":"bytesToBytes32Array","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractRegistry","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deprecated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"fcds","outputs":[{"internalType":"uint224","name":"value","type":"uint224"},{"internalType":"uint32","name":"dataTimestamp","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getBlockIdAtTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_blockId","type":"uint32"}],"name":"getBlockRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_blockId","type":"uint32"}],"name":"getBlockTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getCurrentValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_keys","type":"bytes32[]"}],"name":"getCurrentValues","outputs":[{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"uint32[]","name":"timestamps","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestBlockId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint16","name":"timePadding","type":"uint16"},{"internalType":"uint32","name":"lastDataTimestamp","type":"uint32"},{"internalType":"uint32","name":"lastId","type":"uint32"},{"internalType":"uint32","name":"nextBlockId","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_key","type":"bytes"},{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"hashLeaf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isForeign","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"lastBlockId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"padding","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_affidavit","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"replicator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requiredSignatures","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_padding","type":"uint16"}],"name":"setPadding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"squashedRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingBankContract","outputs":[{"internalType":"contract IStakingBank","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_dataTimestamp","type":"uint32"},{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"bytes32[]","name":"_keys","type":"bytes32[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"uint32","name":"_blockId","type":"uint32"}],"name":"submit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unregister","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"bytes32","name":"_leaf","type":"bytes32"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockId","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"bytes","name":"_key","type":"bytes"},{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"verifyProofForBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_blockIds","type":"uint32[]"},{"internalType":"bytes","name":"_proofs","type":"bytes"},{"internalType":"uint256[]","name":"_proofItemsCounter","type":"uint256[]"},{"internalType":"bytes32[]","name":"_leaves","type":"bytes32[]"}],"name":"verifyProofs","outputs":[{"internalType":"bool[]","name":"results","type":"bool[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620045253803806200452583398181016040528101906200003791906200047b565b83838382600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a5906200057b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000620001016200040260201b60201c565b905080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350816004806101000a81548161ffff021916908361ffff1602179055508061ffff1660a08161ffff1660f01b8152505060008373ffffffffffffffffffffffffffffffffffffffff166321f8a7216040518163ffffffff1660e01b81526004016200020a906200059d565b60206040518083038186803b1580156200022357600080fd5b505afa15801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e91906200044f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200029e576000620003a7565b60018173ffffffffffffffffffffffffffffffffffffffff166377839fe66040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e757600080fd5b505afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003229190620004e7565b8273ffffffffffffffffffffffffffffffffffffffff16637353cbcb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036957600080fd5b505afa1580156200037e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a49190620004e7565b01015b63ffffffff1660808163ffffffff1660e01b81525050505050508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050505062000669565b600033905090565b6000815190506200041b816200061b565b92915050565b600081519050620004328162000635565b92915050565b60008151905062000449816200064f565b92915050565b6000602082840312156200046257600080fd5b600062000472848285016200040a565b91505092915050565b600080600080608085870312156200049257600080fd5b6000620004a2878288016200040a565b9450506020620004b58782880162000421565b9350506040620004c88782880162000421565b9250506060620004db878288016200040a565b91505092959194509250565b600060208284031215620004fa57600080fd5b60006200050a8482850162000438565b91505092915050565b600062000522601283620005b8565b91507f5f726567697374727920697320656d70747900000000000000000000000000006000830152602082019050919050565b7f436861696e000000000000000000000000000000000000000000000000000000815250565b60006020820190508181036000830152620005968162000513565b9050919050565b6000602082019050620005b36000830162000555565b919050565b600082825260208201905092915050565b6000620005d682620005eb565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600063ffffffff82169050919050565b6200062681620005c9565b81146200063257600080fd5b50565b6200064081620005dd565b81146200064c57600080fd5b50565b6200065a816200060b565b81146200066657600080fd5b50565b60805160e01c60a05160f01c60c05160601c613e81620006a4600039806114ba52806116275250806113ba5250806112eb5250613e816000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80637c52e65b11610130578063c248a18f116100b8578063d45167d01161007c578063d45167d01461069f578063e76c0b57146106cf578063e79a198f146106ed578063f25b3f99146106f7578063f2fde38b1461072757610227565b8063c248a18f146105e6578063c2a4250b14610602578063c3369db814610620578063cbb1b2c714610650578063d3d3ea081461068157610227565b8063abf410e5116100ff578063abf410e514610519578063adf1639d14610537578063b90ad5ac14610568578063bef9f8a114610586578063bf66e3ba146105b657610227565b80637c52e65b1461047d578063805d3432146104ad5780638d068043146104dd5780638da5cb5b146104fb57610227565b806340a9e5e3116101b3578063637180a811610182578063637180a8146103fb5780636d046c3e14610419578063715018a6146104375780637353cbcb1461044157806377839fe61461045f57610227565b806340a9e5e31461036f5780634bc935d71461038b5780634e69d560146103bb57806355a373d6146103dd57610227565b8063199dadc5116101fa578063199dadc5146102b65780631aa3a008146102e6578063243b68f9146102f057806324c89a491461032057806326f3ab8b1461033e57610227565b80630e136b191461022c5780630f2acc3e1461024a5780631374df0b1461027a57806317d7de7c14610298575b600080fd5b610234610743565b60405161024191906135f3565b60405180910390f35b610264600480360381019061025f91906128f6565b610756565b604051610271919061360e565b60405180910390f35b610282610789565b60405161028f9190613947565b60405180910390f35b6102a061079c565b6040516102ad919061360e565b60405180910390f35b6102d060048036038101906102cb9190612a44565b6107c4565b6040516102dd91906135f3565b60405180910390f35b6102ee610820565b005b61030a60048036038101906103059190612962565b610b7c565b604051610317919061359a565b60405180910390f35b610328610c1e565b604051610335919061366e565b60405180910390f35b610358600480360381019061035391906126d2565b610c57565b6040516103669291906135bc565b60405180910390f35b610389600480360381019061038491906129f2565b610de0565b005b6103a560048036038101906103a09190612717565b610ee4565b6040516103b291906135f3565b60405180910390f35b6103c3610f19565b6040516103d495949392919061398b565b60405180910390f35b6103e5610f84565b6040516103f29190613690565b60405180910390f35b6104036110c3565b60405161041091906136c6565b60405180910390f35b610421611172565b60405161042e91906135f3565b60405180910390f35b61043f61117b565b005b6104496112d3565b6040516104569190613a22565b60405180910390f35b6104676112e9565b6040516104749190613a22565b60405180910390f35b61049760048036038101906104929190612a1b565b61130d565b6040516104a4919061360e565b60405180910390f35b6104c760048036038101906104c29190612a1b565b611325565b6040516104d49190613a22565b60405180910390f35b6104e56113b8565b6040516104f29190613947565b60405180910390f35b6105036113dc565b604051610510919061355d565b60405180910390f35b610521611406565b60405161052e91906136ab565b60405180910390f35b610551600480360381019061054c919061286a565b61142b565b60405161055f9291906139de565b60405180910390f35b6105706114b8565b60405161057d919061355d565b60405180910390f35b6105a0600480360381019061059b9190612aef565b6114dc565b6040516105ad919061360e565b60405180910390f35b6105d060048036038101906105cb919061277e565b611507565b6040516105dd9190613578565b60405180910390f35b61060060048036038101906105fb9190612b41565b611625565b005b61060a611ac6565b6040516106179190613a22565b60405180910390f35b61063a60048036038101906106359190612aef565b611adc565b6040516106479190613a22565b60405180910390f35b61066a6004803603810190610665919061286a565b611b07565b604051610678929190613962565b60405180910390f35b610689611b63565b6040516106969190613a22565b60405180910390f35b6106b960048036038101906106b49190612893565b611b7d565b6040516106c6919061355d565b60405180910390f35b6106d7611c3a565b6040516106e49190613a22565b60405180910390f35b6106f5611c4a565b005b610711600480360381019061070c9190612a1b565b611f62565b60405161071e919061392c565b60405180910390f35b610741600480360381019061073c9190612680565b611fad565b005b6004600a9054906101000a900460ff1681565b6000828260405160200161076b929190613539565b60405160208183030381529060405280519060200120905092915050565b6004809054906101000a900461ffff1681565b60007f436861696e000000000000000000000000000000000000000000000000000000905090565b60006108168484846040516020016107dd929190613539565b6040516020818303038152906040528051906020012060026000898152602001908152602001600020546121749092919063ffffffff16565b9050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613761565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321f8a7216040518163ffffffff1660e01b81526004016109099061389a565b60206040518083038186803b15801561092157600080fd5b505afa158015610935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095991906126a9565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613701565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b79578073ffffffffffffffffffffffffffffffffffffffff1663c2a4250b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4457600080fd5b505afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c9190612b18565b600460066101000a81548163ffffffff021916908363ffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663f25b3f99600460069054906101000a900463ffffffff166040518263ffffffff1660e01b8152600401610ae99190613a07565b604080518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3891906129c9565b60200151905060008160001790508060026000600460069054906101000a900463ffffffff1663ffffffff1681526020019081526020016000208190555050505b50565b6060808267ffffffffffffffff81118015610b9657600080fd5b50604051908082528060200260200182016040528015610bc55781602001602082028036833780820191505090505b50905060008090505b83811015610c1257600080602087600185010102905080880151915081848481518110610bf757fe5b60200260200101818152505050508080600101915050610bce565b50809150509392505050565b6040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525081565b6060808383905067ffffffffffffffff81118015610c7457600080fd5b50604051908082528060200260200182016040528015610ca35781602001602082028036833780820191505090505b5090508383905067ffffffffffffffff81118015610cc057600080fd5b50604051908082528060200260200182016040528015610cef5781602001602082028036833780820191505090505b50915060008090505b84849050811015610dd857600060036000878785818110610d1557fe5b90506020020135815260200190815260200160002090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16848381518110610d8357fe5b60200260200101818152505080600001601c9054906101000a900463ffffffff16838381518110610db057fe5b602002602001019063ffffffff16908163ffffffff1681525050508080600101915050610cf8565b509250929050565b610de861219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e9061383a565b60405180910390fd5b806004806101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f22d3c53dc5741f3378120ad17e6ae419e28fecb3c4c2572ca0de779d825f63f482604051610ed99190613947565b60405180910390a250565b60008060001b831415610efa5760009050610f12565b610f0f8483856121a39092919063ffffffff16565b90505b9392505050565b60008060008060004394506004809054906101000a900461ffff169350600460069054906101000a900463ffffffff169150610f6d600260008463ffffffff168152602001908152602001600020546121ba565b9250610f7b60014201611325565b90509091929394565b60008073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906137da565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346bcb49d6040518163ffffffff1660e01b815260040161106e906138f3565b60206040518083038186803b15801561108657600080fd5b505afa15801561109a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110be91906126a9565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346bcb49d6040518163ffffffff1660e01b815260040161111d906137c1565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906126a9565b905090565b60006001905090565b61118361219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112099061383a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600460009054906101000a900463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915090505481565b600080600460069054906101000a900463ffffffff1690506000611361600260008463ffffffff168152602001908152602001600020546121ba565b905060008163ffffffff16141561137d576000925050506113b3565b836004809054906101000a900461ffff1661ffff16820163ffffffff1610156113ad5760018201925050506113b3565b81925050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006003600085815260200190815260200160002090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681600001601c9054906101000a900463ffffffff168063ffffffff1690509250925050915091565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611500600260008463ffffffff168152602001908152602001600020546121ca565b9050919050565b6060815167ffffffffffffffff8111801561152157600080fd5b506040519080825280602002602001820160405280156115505781602001602082028036833780820191505090505b509050600080905060008090505b835181101561161b576115d8611588878488858151811061157b57fe5b6020026020010151610b7c565b85838151811061159457fe5b6020026020010151600260008b86815181106115ac57fe5b602002602001015163ffffffff168152602001908152602001600020546121749092919063ffffffff16565b8382815181106115e457fe5b60200260200101901515908115158152505084818151811061160257fe5b602002602001015182019150808060010191505061155e565b5050949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061381a565b60405180910390fd5b6004600a9054906101000a900460ff1615611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061385a565b60405180910390fd5b600061173960026000600460069054906101000a900463ffffffff1663ffffffff168152602001908152602001600020546121ba565b63ffffffff1690506000611765600260008563ffffffff168152602001908152602001600020546121ba565b63ffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906138d3565b60405180910390fd5b8763ffffffff1681106117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea9061390c565b60405180910390fd5b426004809054906101000a900461ffff1661ffff1682011061184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906137a1565b60405180910390fd5b838390508686905014611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906137fa565b60405180910390fd5b60008090505b86869050811015611a25578484828181106118af57fe5b905060200201358585838181106118c257fe5b905060200201357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90613781565b60405180910390fd5b604051806040016040528086868481811061193e57fe5b905060200201357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020018a63ffffffff168152506003600089898581811061198257fe5b90506020020135815260200190815260200160002060008201518160000160006101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050508080600101915050611898565b50611a3087896121f6565b600260008463ffffffff1681526020019081526020016000208190555081600460066101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fa4618617ce06c5cb7e8fb75408da19c4d8c9340a948790047eb7c77afdd6a75583604051611ab49190613a22565b60405180910390a25050505050505050565b600460069054906101000a900463ffffffff1681565b6000611b00600260008463ffffffff168152602001908152602001600020546121ba565b9050919050565b60036020528060005260406000206000915090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169080600001601c9054906101000a900463ffffffff16905082565b6000600460069054906101000a900463ffffffff16905090565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525086604051602001611bc8929190613511565b60405160208183030381529060405280519060200120905060018186868660405160008152602001604052604051611c039493929190613629565b6020604051602081039080840390855afa158015611c25573d6000803e3d6000fd5b50505060206040510351915050949350505050565b6000611c4542611325565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613721565b60405180910390fd5b6004600a9054906101000a900460ff1615611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d20906138b3565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321f8a7216040518163ffffffff1660e01b8152600401611d839061389a565b60206040518083038186803b158015611d9b57600080fd5b505afa158015611daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd391906126a9565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b906136e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16636d046c3e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190612841565b611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef89061387a565b60405180910390fd5b60016004600a6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fd4ae81319f0b4df100dcda9ce971671b97278c7a5ce6b37a8331a44700679fd460405160405180910390a250565b611f6a6122ce565b6000600260008481526020019081526020016000205490506040518060400160405280828152602001611f9c836121ba565b63ffffffff16815250915050919050565b611fb561219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061383a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613741565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061217f846121ca565b61219161218c8585612225565b6121ca565b1490509392505050565b600033905090565b6000836121b08484612225565b1490509392505050565b600063ffffffff82169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082169050919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000841617905092915050565b60008082905060008090505b84518110156122c357600085828151811061224857fe5b6020026020010151905080831161228957828160405160200161226c9291906134e5565b6040516020818303038152906040528051906020012092506122b5565b808360405160200161229c9291906134e5565b6040516020818303038152906040528051906020012092505b508080600101915050612231565b508091505092915050565b604051806040016040528060008019168152602001600063ffffffff1681525090565b60008135905061230081613daa565b92915050565b60008151905061231581613daa565b92915050565b60008083601f84011261232d57600080fd5b8235905067ffffffffffffffff81111561234657600080fd5b60208301915083602082028301111561235e57600080fd5b9250929050565b600082601f83011261237657600080fd5b813561238961238482613a6a565b613a3d565b915081818352602084019350602081019050838560208402820111156123ae57600080fd5b60005b838110156123de57816123c4888261254d565b8452602084019350602083019250506001810190506123b1565b5050505092915050565b60008083601f8401126123fa57600080fd5b8235905067ffffffffffffffff81111561241357600080fd5b60208301915083602082028301111561242b57600080fd5b9250929050565b600082601f83011261244357600080fd5b813561245661245182613a92565b613a3d565b9150818183526020840193506020810190508385602084028201111561247b57600080fd5b60005b838110156124ab5781612491888261262c565b84526020840193506020830192505060018101905061247e565b5050505092915050565b600082601f8301126124c657600080fd5b81356124d96124d482613aba565b613a3d565b915081818352602084019350602081019050838560208402820111156124fe57600080fd5b60005b8381101561252e57816125148882612641565b845260208401935060208301925050600181019050612501565b5050505092915050565b60008151905061254781613dc1565b92915050565b60008135905061255c81613dd8565b92915050565b60008151905061257181613dd8565b92915050565b600082601f83011261258857600080fd5b813561259b61259682613ae2565b613a3d565b915080825260208301602083018583830111156125b757600080fd5b6125c2838284613d4d565b50505092915050565b6000604082840312156125dd57600080fd5b6125e76040613a3d565b905060006125f784828501612562565b600083015250602061260b84828501612656565b60208301525092915050565b60008135905061262681613def565b92915050565b60008135905061263b81613e06565b92915050565b60008135905061265081613e1d565b92915050565b60008151905061266581613e1d565b92915050565b60008135905061267a81613e34565b92915050565b60006020828403121561269257600080fd5b60006126a0848285016122f1565b91505092915050565b6000602082840312156126bb57600080fd5b60006126c984828501612306565b91505092915050565b600080602083850312156126e557600080fd5b600083013567ffffffffffffffff8111156126ff57600080fd5b61270b8582860161231b565b92509250509250929050565b60008060006060848603121561272c57600080fd5b600084013567ffffffffffffffff81111561274657600080fd5b61275286828701612365565b93505060206127638682870161254d565b92505060406127748682870161254d565b9150509250925092565b6000806000806080858703121561279457600080fd5b600085013567ffffffffffffffff8111156127ae57600080fd5b6127ba878288016124b5565b945050602085013567ffffffffffffffff8111156127d757600080fd5b6127e387828801612577565b935050604085013567ffffffffffffffff81111561280057600080fd5b61280c87828801612432565b925050606085013567ffffffffffffffff81111561282957600080fd5b61283587828801612365565b91505092959194509250565b60006020828403121561285357600080fd5b600061286184828501612538565b91505092915050565b60006020828403121561287c57600080fd5b600061288a8482850161254d565b91505092915050565b600080600080608085870312156128a957600080fd5b60006128b78782880161254d565b94505060206128c88782880161266b565b93505060406128d98782880161254d565b92505060606128ea8782880161254d565b91505092959194509250565b6000806040838503121561290957600080fd5b600083013567ffffffffffffffff81111561292357600080fd5b61292f85828601612577565b925050602083013567ffffffffffffffff81111561294c57600080fd5b61295885828601612577565b9150509250929050565b60008060006060848603121561297757600080fd5b600084013567ffffffffffffffff81111561299157600080fd5b61299d86828701612577565b93505060206129ae8682870161262c565b92505060406129bf8682870161262c565b9150509250925092565b6000604082840312156129db57600080fd5b60006129e9848285016125cb565b91505092915050565b600060208284031215612a0457600080fd5b6000612a1284828501612617565b91505092915050565b600060208284031215612a2d57600080fd5b6000612a3b8482850161262c565b91505092915050565b60008060008060808587031215612a5a57600080fd5b6000612a688782880161262c565b945050602085013567ffffffffffffffff811115612a8557600080fd5b612a9187828801612365565b935050604085013567ffffffffffffffff811115612aae57600080fd5b612aba87828801612577565b925050606085013567ffffffffffffffff811115612ad757600080fd5b612ae387828801612577565b91505092959194509250565b600060208284031215612b0157600080fd5b6000612b0f84828501612641565b91505092915050565b600060208284031215612b2a57600080fd5b6000612b3884828501612656565b91505092915050565b600080600080600080600060a0888a031215612b5c57600080fd5b6000612b6a8a828b01612641565b9750506020612b7b8a828b0161254d565b965050604088013567ffffffffffffffff811115612b9857600080fd5b612ba48a828b0161231b565b9550955050606088013567ffffffffffffffff811115612bc357600080fd5b612bcf8a828b016123e8565b93509350506080612be28a828b01612641565b91505092959891949750929550565b6000612bfd8383612dd8565b60208301905092915050565b6000612c158383612df6565b60208301905092915050565b6000612c2d838361348b565b60208301905092915050565b6000612c4583836134b8565b60208301905092915050565b612c5a81613c2a565b82525050565b6000612c6b82613b4e565b612c758185613bb9565b9350612c8083613b0e565b8060005b83811015612cb1578151612c988882612bf1565b9750612ca383613b85565b925050600181019050612c84565b5085935050505092915050565b6000612cc982613b59565b612cd38185613bca565b9350612cde83613b1e565b8060005b83811015612d0f578151612cf68882612c09565b9750612d0183613b92565b925050600181019050612ce2565b5085935050505092915050565b6000612d2782613b64565b612d318185613bdb565b9350612d3c83613b2e565b8060005b83811015612d6d578151612d548882612c21565b9750612d5f83613b9f565b925050600181019050612d40565b5085935050505092915050565b6000612d8582613b6f565b612d8f8185613bec565b9350612d9a83613b3e565b8060005b83811015612dcb578151612db28882612c39565b9750612dbd83613bac565b925050600181019050612d9e565b5085935050505092915050565b612de181613c3c565b82525050565b612df081613c3c565b82525050565b612dff81613c48565b82525050565b612e0e81613c48565b82525050565b612e25612e2082613c48565b613d8f565b82525050565b6000612e3682613b7a565b612e408185613bfd565b9350612e50818560208601613d5c565b612e5981613d99565b840191505092915050565b6000612e6f82613b7a565b612e798185613c0e565b9350612e89818560208601613d5c565b80840191505092915050565b612e9e81613ccf565b82525050565b612ead81613cf3565b82525050565b612ebc81613d17565b82525050565b6000612ecf604083613c19565b91507f756e7265676973746572696e67206d75737420626520646f6e6520616674657260008301527f206164647265737320696e207265676973747279206973207265706c616365646020830152604082019050919050565b6000612f35604083613c19565b91507f726567697374726174696f6e206d75737420626520646f6e65206265666f726560008301527f206164647265737320696e207265676973747279206973207265706c616365646020830152604082019050919050565b6000612f9b602483613c19565b91507f6f6e6c7920636f6e747261637452656769737472792063616e20756e7265676960008301527f73746572000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613001602683613c19565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613067602283613c19565b91507f6f6e6c7920636f6e747261637452656769737472792063616e2072656769737460008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130cd600c83613c19565b91507f464344206f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b600061310d600b83613c19565b91507f646f206e6f74207370616d0000000000000000000000000000000000000000006000830152602082019050919050565b7f5374616b696e6742616e6b000000000000000000000000000000000000000000815250565b6000613173601283613c19565b91507f5f726567697374727920697320656d70747900000000000000000000000000006000830152602082019050919050565b60006131b3602783613c19565b91507f6e756d62657273206f66206b65797320616e642076616c756573206e6f74207460008301527f68652073616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613219600e83613c19565b91507f6f6e6c795265706c696361746f720000000000000000000000000000000000006000830152602082019050919050565b6000613259602083613c19565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613299601683613c19565b91507f636f6e74726163742069732064657072656361746564000000000000000000006000830152602082019050919050565b60006132d9603083613c19565b91507f63616e206e6f74206265207265706c61636564207769746820636861696e206f60008301527f6620646966666572656e742074797065000000000000000000000000000000006020830152604082019050919050565b7f436861696e000000000000000000000000000000000000000000000000000000815250565b6000613365601e83613c19565b91507f636f6e747261637420697320616c7265616479206465707265636174656400006000830152602082019050919050565b60006133a5601583613c19565b91507f626c6f636b496420616c72656164792074616b656e00000000000000000000006000830152602082019050919050565b7f554d420000000000000000000000000000000000000000000000000000000000815250565b600061340b601983613c19565b91507f63616e204e4f54207375626d6974206f6c6465722064617461000000000000006000830152602082019050919050565b6040820160008201516134546000850182612df6565b50602082015161346760208501826134b8565b50505050565b61347681613c52565b82525050565b61348581613c80565b82525050565b61349481613ca8565b82525050565b6134a381613ca8565b82525050565b6134b281613d3b565b82525050565b6134c181613cb2565b82525050565b6134d081613cb2565b82525050565b6134df81613cc2565b82525050565b60006134f18285612e14565b6020820191506135018284612e14565b6020820191508190509392505050565b600061351d8285612e64565b91506135298284612e14565b6020820191508190509392505050565b60006135458285612e64565b91506135518284612e64565b91508190509392505050565b60006020820190506135726000830184612c51565b92915050565b600060208201905081810360008301526135928184612c60565b905092915050565b600060208201905081810360008301526135b48184612cbe565b905092915050565b600060408201905081810360008301526135d68185612d1c565b905081810360208301526135ea8184612d7a565b90509392505050565b60006020820190506136086000830184612de7565b92915050565b60006020820190506136236000830184612e05565b92915050565b600060808201905061363e6000830187612e05565b61364b60208301866134d6565b6136586040830185612e05565b6136656060830184612e05565b95945050505050565b600060208201905081810360008301526136888184612e2b565b905092915050565b60006020820190506136a56000830184612e95565b92915050565b60006020820190506136c06000830184612ea4565b92915050565b60006020820190506136db6000830184612eb3565b92915050565b600060208201905081810360008301526136fa81612ec2565b9050919050565b6000602082019050818103600083015261371a81612f28565b9050919050565b6000602082019050818103600083015261373a81612f8e565b9050919050565b6000602082019050818103600083015261375a81612ff4565b9050919050565b6000602082019050818103600083015261377a8161305a565b9050919050565b6000602082019050818103600083015261379a816130c0565b9050919050565b600060208201905081810360008301526137ba81613100565b9050919050565b60006020820190506137d560008301613140565b919050565b600060208201905081810360008301526137f381613166565b9050919050565b60006020820190508181036000830152613813816131a6565b9050919050565b600060208201905081810360008301526138338161320c565b9050919050565b600060208201905081810360008301526138538161324c565b9050919050565b600060208201905081810360008301526138738161328c565b9050919050565b60006020820190508181036000830152613893816132cc565b9050919050565b60006020820190506138ae60008301613332565b919050565b600060208201905081810360008301526138cc81613358565b9050919050565b600060208201905081810360008301526138ec81613398565b9050919050565b6000602082019050613907600083016133d8565b919050565b60006020820190508181036000830152613925816133fe565b9050919050565b6000604082019050613941600083018461343e565b92915050565b600060208201905061395c600083018461346d565b92915050565b6000604082019050613977600083018561347c565b61398460208301846134c7565b9392505050565b600060a0820190506139a0600083018861349a565b6139ad602083018761346d565b6139ba60408301866134c7565b6139c760608301856134c7565b6139d460808301846134c7565b9695505050505050565b60006040820190506139f3600083018561349a565b613a00602083018461349a565b9392505050565b6000602082019050613a1c60008301846134a9565b92915050565b6000602082019050613a3760008301846134c7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a6057600080fd5b8060405250919050565b600067ffffffffffffffff821115613a8157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613aa957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613ad157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613af957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613c3582613c60565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000613cda82613ce1565b9050919050565b6000613cec82613c60565b9050919050565b6000613cfe82613d05565b9050919050565b6000613d1082613c60565b9050919050565b6000613d2282613d29565b9050919050565b6000613d3482613c60565b9050919050565b6000613d4682613cb2565b9050919050565b82818337600083830152505050565b60005b83811015613d7a578082015181840152602081019050613d5f565b83811115613d89576000848401525b50505050565b6000819050919050565b6000601f19601f8301169050919050565b613db381613c2a565b8114613dbe57600080fd5b50565b613dca81613c3c565b8114613dd557600080fd5b50565b613de181613c48565b8114613dec57600080fd5b50565b613df881613c52565b8114613e0357600080fd5b50565b613e0f81613ca8565b8114613e1a57600080fd5b50565b613e2681613cb2565b8114613e3157600080fd5b50565b613e3d81613cc2565b8114613e4857600080fd5b5056fea26469706673582212208465b57649c7ccf906e767f7bd3b61ea9b3fe6c5ef1fd6827c25c41043fcf27264736f6c6343000608003300000000000000000000000041a75b8504fdac22b2152b5cfcdaae01ff50947e000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000057a2022fa04f38207ab3cd280557cad6d0b77be1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c80637c52e65b11610130578063c248a18f116100b8578063d45167d01161007c578063d45167d01461069f578063e76c0b57146106cf578063e79a198f146106ed578063f25b3f99146106f7578063f2fde38b1461072757610227565b8063c248a18f146105e6578063c2a4250b14610602578063c3369db814610620578063cbb1b2c714610650578063d3d3ea081461068157610227565b8063abf410e5116100ff578063abf410e514610519578063adf1639d14610537578063b90ad5ac14610568578063bef9f8a114610586578063bf66e3ba146105b657610227565b80637c52e65b1461047d578063805d3432146104ad5780638d068043146104dd5780638da5cb5b146104fb57610227565b806340a9e5e3116101b3578063637180a811610182578063637180a8146103fb5780636d046c3e14610419578063715018a6146104375780637353cbcb1461044157806377839fe61461045f57610227565b806340a9e5e31461036f5780634bc935d71461038b5780634e69d560146103bb57806355a373d6146103dd57610227565b8063199dadc5116101fa578063199dadc5146102b65780631aa3a008146102e6578063243b68f9146102f057806324c89a491461032057806326f3ab8b1461033e57610227565b80630e136b191461022c5780630f2acc3e1461024a5780631374df0b1461027a57806317d7de7c14610298575b600080fd5b610234610743565b60405161024191906135f3565b60405180910390f35b610264600480360381019061025f91906128f6565b610756565b604051610271919061360e565b60405180910390f35b610282610789565b60405161028f9190613947565b60405180910390f35b6102a061079c565b6040516102ad919061360e565b60405180910390f35b6102d060048036038101906102cb9190612a44565b6107c4565b6040516102dd91906135f3565b60405180910390f35b6102ee610820565b005b61030a60048036038101906103059190612962565b610b7c565b604051610317919061359a565b60405180910390f35b610328610c1e565b604051610335919061366e565b60405180910390f35b610358600480360381019061035391906126d2565b610c57565b6040516103669291906135bc565b60405180910390f35b610389600480360381019061038491906129f2565b610de0565b005b6103a560048036038101906103a09190612717565b610ee4565b6040516103b291906135f3565b60405180910390f35b6103c3610f19565b6040516103d495949392919061398b565b60405180910390f35b6103e5610f84565b6040516103f29190613690565b60405180910390f35b6104036110c3565b60405161041091906136c6565b60405180910390f35b610421611172565b60405161042e91906135f3565b60405180910390f35b61043f61117b565b005b6104496112d3565b6040516104569190613a22565b60405180910390f35b6104676112e9565b6040516104749190613a22565b60405180910390f35b61049760048036038101906104929190612a1b565b61130d565b6040516104a4919061360e565b60405180910390f35b6104c760048036038101906104c29190612a1b565b611325565b6040516104d49190613a22565b60405180910390f35b6104e56113b8565b6040516104f29190613947565b60405180910390f35b6105036113dc565b604051610510919061355d565b60405180910390f35b610521611406565b60405161052e91906136ab565b60405180910390f35b610551600480360381019061054c919061286a565b61142b565b60405161055f9291906139de565b60405180910390f35b6105706114b8565b60405161057d919061355d565b60405180910390f35b6105a0600480360381019061059b9190612aef565b6114dc565b6040516105ad919061360e565b60405180910390f35b6105d060048036038101906105cb919061277e565b611507565b6040516105dd9190613578565b60405180910390f35b61060060048036038101906105fb9190612b41565b611625565b005b61060a611ac6565b6040516106179190613a22565b60405180910390f35b61063a60048036038101906106359190612aef565b611adc565b6040516106479190613a22565b60405180910390f35b61066a6004803603810190610665919061286a565b611b07565b604051610678929190613962565b60405180910390f35b610689611b63565b6040516106969190613a22565b60405180910390f35b6106b960048036038101906106b49190612893565b611b7d565b6040516106c6919061355d565b60405180910390f35b6106d7611c3a565b6040516106e49190613a22565b60405180910390f35b6106f5611c4a565b005b610711600480360381019061070c9190612a1b565b611f62565b60405161071e919061392c565b60405180910390f35b610741600480360381019061073c9190612680565b611fad565b005b6004600a9054906101000a900460ff1681565b6000828260405160200161076b929190613539565b60405160208183030381529060405280519060200120905092915050565b6004809054906101000a900461ffff1681565b60007f436861696e000000000000000000000000000000000000000000000000000000905090565b60006108168484846040516020016107dd929190613539565b6040516020818303038152906040528051906020012060026000898152602001908152602001600020546121749092919063ffffffff16565b9050949350505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613761565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321f8a7216040518163ffffffff1660e01b81526004016109099061389a565b60206040518083038186803b15801561092157600080fd5b505afa158015610935573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095991906126a9565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c190613701565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b79578073ffffffffffffffffffffffffffffffffffffffff1663c2a4250b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4457600080fd5b505afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c9190612b18565b600460066101000a81548163ffffffff021916908363ffffffff16021790555060008173ffffffffffffffffffffffffffffffffffffffff1663f25b3f99600460069054906101000a900463ffffffff166040518263ffffffff1660e01b8152600401610ae99190613a07565b604080518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3891906129c9565b60200151905060008160001790508060026000600460069054906101000a900463ffffffff1663ffffffff1681526020019081526020016000208190555050505b50565b6060808267ffffffffffffffff81118015610b9657600080fd5b50604051908082528060200260200182016040528015610bc55781602001602082028036833780820191505090505b50905060008090505b83811015610c1257600080602087600185010102905080880151915081848481518110610bf757fe5b60200260200101818152505050508080600101915050610bce565b50809150509392505050565b6040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525081565b6060808383905067ffffffffffffffff81118015610c7457600080fd5b50604051908082528060200260200182016040528015610ca35781602001602082028036833780820191505090505b5090508383905067ffffffffffffffff81118015610cc057600080fd5b50604051908082528060200260200182016040528015610cef5781602001602082028036833780820191505090505b50915060008090505b84849050811015610dd857600060036000878785818110610d1557fe5b90506020020135815260200190815260200160002090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16848381518110610d8357fe5b60200260200101818152505080600001601c9054906101000a900463ffffffff16838381518110610db057fe5b602002602001019063ffffffff16908163ffffffff1681525050508080600101915050610cf8565b509250929050565b610de861219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e9061383a565b60405180910390fd5b806004806101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f22d3c53dc5741f3378120ad17e6ae419e28fecb3c4c2572ca0de779d825f63f482604051610ed99190613947565b60405180910390a250565b60008060001b831415610efa5760009050610f12565b610f0f8483856121a39092919063ffffffff16565b90505b9392505050565b60008060008060004394506004809054906101000a900461ffff169350600460069054906101000a900463ffffffff169150610f6d600260008463ffffffff168152602001908152602001600020546121ba565b9250610f7b60014201611325565b90509091929394565b60008073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906137da565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346bcb49d6040518163ffffffff1660e01b815260040161106e906138f3565b60206040518083038186803b15801561108657600080fd5b505afa15801561109a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110be91906126a9565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346bcb49d6040518163ffffffff1660e01b815260040161111d906137c1565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906126a9565b905090565b60006001905090565b61118361219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112099061383a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600460009054906101000a900463ffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000181565b60026020528060005260406000206000915090505481565b600080600460069054906101000a900463ffffffff1690506000611361600260008463ffffffff168152602001908152602001600020546121ba565b905060008163ffffffff16141561137d576000925050506113b3565b836004809054906101000a900461ffff1661ffff16820163ffffffff1610156113ad5760018201925050506113b3565b81925050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000181565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006003600085815260200190815260200160002090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681600001601c9054906101000a900463ffffffff168063ffffffff1690509250925050915091565b7f00000000000000000000000057a2022fa04f38207ab3cd280557cad6d0b77be181565b6000611500600260008463ffffffff168152602001908152602001600020546121ca565b9050919050565b6060815167ffffffffffffffff8111801561152157600080fd5b506040519080825280602002602001820160405280156115505781602001602082028036833780820191505090505b509050600080905060008090505b835181101561161b576115d8611588878488858151811061157b57fe5b6020026020010151610b7c565b85838151811061159457fe5b6020026020010151600260008b86815181106115ac57fe5b602002602001015163ffffffff168152602001908152602001600020546121749092919063ffffffff16565b8382815181106115e457fe5b60200260200101901515908115158152505084818151811061160257fe5b602002602001015182019150808060010191505061155e565b5050949350505050565b7f00000000000000000000000057a2022fa04f38207ab3cd280557cad6d0b77be173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa9061381a565b60405180910390fd5b6004600a9054906101000a900460ff1615611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061385a565b60405180910390fd5b600061173960026000600460069054906101000a900463ffffffff1663ffffffff168152602001908152602001600020546121ba565b63ffffffff1690506000611765600260008563ffffffff168152602001908152602001600020546121ba565b63ffffffff16146117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906138d3565b60405180910390fd5b8763ffffffff1681106117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea9061390c565b60405180910390fd5b426004809054906101000a900461ffff1661ffff1682011061184a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611841906137a1565b60405180910390fd5b838390508686905014611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906137fa565b60405180910390fd5b60008090505b86869050811015611a25578484828181106118af57fe5b905060200201358585838181106118c257fe5b905060200201357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191e90613781565b60405180910390fd5b604051806040016040528086868481811061193e57fe5b905060200201357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020018a63ffffffff168152506003600089898581811061198257fe5b90506020020135815260200190815260200160002060008201518160000160006101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050508080600101915050611898565b50611a3087896121f6565b600260008463ffffffff1681526020019081526020016000208190555081600460066101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fa4618617ce06c5cb7e8fb75408da19c4d8c9340a948790047eb7c77afdd6a75583604051611ab49190613a22565b60405180910390a25050505050505050565b600460069054906101000a900463ffffffff1681565b6000611b00600260008463ffffffff168152602001908152602001600020546121ba565b9050919050565b60036020528060005260406000206000915090508060000160009054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169080600001601c9054906101000a900463ffffffff16905082565b6000600460069054906101000a900463ffffffff16905090565b6000806040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525086604051602001611bc8929190613511565b60405160208183030381529060405280519060200120905060018186868660405160008152602001604052604051611c039493929190613629565b6020604051602081039080840390855afa158015611c25573d6000803e3d6000fd5b50505060206040510351915050949350505050565b6000611c4542611325565b905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090613721565b60405180910390fd5b6004600a9054906101000a900460ff1615611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d20906138b3565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166321f8a7216040518163ffffffff1660e01b8152600401611d839061389a565b60206040518083038186803b158015611d9b57600080fd5b505afa158015611daf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd391906126a9565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b906136e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16636d046c3e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8a57600080fd5b505afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190612841565b611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef89061387a565b60405180910390fd5b60016004600a6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fd4ae81319f0b4df100dcda9ce971671b97278c7a5ce6b37a8331a44700679fd460405160405180910390a250565b611f6a6122ce565b6000600260008481526020019081526020016000205490506040518060400160405280828152602001611f9c836121ba565b63ffffffff16815250915050919050565b611fb561219b565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061383a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90613741565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061217f846121ca565b61219161218c8585612225565b6121ca565b1490509392505050565b600033905090565b6000836121b08484612225565b1490509392505050565b600063ffffffff82169050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000082169050919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000841617905092915050565b60008082905060008090505b84518110156122c357600085828151811061224857fe5b6020026020010151905080831161228957828160405160200161226c9291906134e5565b6040516020818303038152906040528051906020012092506122b5565b808360405160200161229c9291906134e5565b6040516020818303038152906040528051906020012092505b508080600101915050612231565b508091505092915050565b604051806040016040528060008019168152602001600063ffffffff1681525090565b60008135905061230081613daa565b92915050565b60008151905061231581613daa565b92915050565b60008083601f84011261232d57600080fd5b8235905067ffffffffffffffff81111561234657600080fd5b60208301915083602082028301111561235e57600080fd5b9250929050565b600082601f83011261237657600080fd5b813561238961238482613a6a565b613a3d565b915081818352602084019350602081019050838560208402820111156123ae57600080fd5b60005b838110156123de57816123c4888261254d565b8452602084019350602083019250506001810190506123b1565b5050505092915050565b60008083601f8401126123fa57600080fd5b8235905067ffffffffffffffff81111561241357600080fd5b60208301915083602082028301111561242b57600080fd5b9250929050565b600082601f83011261244357600080fd5b813561245661245182613a92565b613a3d565b9150818183526020840193506020810190508385602084028201111561247b57600080fd5b60005b838110156124ab5781612491888261262c565b84526020840193506020830192505060018101905061247e565b5050505092915050565b600082601f8301126124c657600080fd5b81356124d96124d482613aba565b613a3d565b915081818352602084019350602081019050838560208402820111156124fe57600080fd5b60005b8381101561252e57816125148882612641565b845260208401935060208301925050600181019050612501565b5050505092915050565b60008151905061254781613dc1565b92915050565b60008135905061255c81613dd8565b92915050565b60008151905061257181613dd8565b92915050565b600082601f83011261258857600080fd5b813561259b61259682613ae2565b613a3d565b915080825260208301602083018583830111156125b757600080fd5b6125c2838284613d4d565b50505092915050565b6000604082840312156125dd57600080fd5b6125e76040613a3d565b905060006125f784828501612562565b600083015250602061260b84828501612656565b60208301525092915050565b60008135905061262681613def565b92915050565b60008135905061263b81613e06565b92915050565b60008135905061265081613e1d565b92915050565b60008151905061266581613e1d565b92915050565b60008135905061267a81613e34565b92915050565b60006020828403121561269257600080fd5b60006126a0848285016122f1565b91505092915050565b6000602082840312156126bb57600080fd5b60006126c984828501612306565b91505092915050565b600080602083850312156126e557600080fd5b600083013567ffffffffffffffff8111156126ff57600080fd5b61270b8582860161231b565b92509250509250929050565b60008060006060848603121561272c57600080fd5b600084013567ffffffffffffffff81111561274657600080fd5b61275286828701612365565b93505060206127638682870161254d565b92505060406127748682870161254d565b9150509250925092565b6000806000806080858703121561279457600080fd5b600085013567ffffffffffffffff8111156127ae57600080fd5b6127ba878288016124b5565b945050602085013567ffffffffffffffff8111156127d757600080fd5b6127e387828801612577565b935050604085013567ffffffffffffffff81111561280057600080fd5b61280c87828801612432565b925050606085013567ffffffffffffffff81111561282957600080fd5b61283587828801612365565b91505092959194509250565b60006020828403121561285357600080fd5b600061286184828501612538565b91505092915050565b60006020828403121561287c57600080fd5b600061288a8482850161254d565b91505092915050565b600080600080608085870312156128a957600080fd5b60006128b78782880161254d565b94505060206128c88782880161266b565b93505060406128d98782880161254d565b92505060606128ea8782880161254d565b91505092959194509250565b6000806040838503121561290957600080fd5b600083013567ffffffffffffffff81111561292357600080fd5b61292f85828601612577565b925050602083013567ffffffffffffffff81111561294c57600080fd5b61295885828601612577565b9150509250929050565b60008060006060848603121561297757600080fd5b600084013567ffffffffffffffff81111561299157600080fd5b61299d86828701612577565b93505060206129ae8682870161262c565b92505060406129bf8682870161262c565b9150509250925092565b6000604082840312156129db57600080fd5b60006129e9848285016125cb565b91505092915050565b600060208284031215612a0457600080fd5b6000612a1284828501612617565b91505092915050565b600060208284031215612a2d57600080fd5b6000612a3b8482850161262c565b91505092915050565b60008060008060808587031215612a5a57600080fd5b6000612a688782880161262c565b945050602085013567ffffffffffffffff811115612a8557600080fd5b612a9187828801612365565b935050604085013567ffffffffffffffff811115612aae57600080fd5b612aba87828801612577565b925050606085013567ffffffffffffffff811115612ad757600080fd5b612ae387828801612577565b91505092959194509250565b600060208284031215612b0157600080fd5b6000612b0f84828501612641565b91505092915050565b600060208284031215612b2a57600080fd5b6000612b3884828501612656565b91505092915050565b600080600080600080600060a0888a031215612b5c57600080fd5b6000612b6a8a828b01612641565b9750506020612b7b8a828b0161254d565b965050604088013567ffffffffffffffff811115612b9857600080fd5b612ba48a828b0161231b565b9550955050606088013567ffffffffffffffff811115612bc357600080fd5b612bcf8a828b016123e8565b93509350506080612be28a828b01612641565b91505092959891949750929550565b6000612bfd8383612dd8565b60208301905092915050565b6000612c158383612df6565b60208301905092915050565b6000612c2d838361348b565b60208301905092915050565b6000612c4583836134b8565b60208301905092915050565b612c5a81613c2a565b82525050565b6000612c6b82613b4e565b612c758185613bb9565b9350612c8083613b0e565b8060005b83811015612cb1578151612c988882612bf1565b9750612ca383613b85565b925050600181019050612c84565b5085935050505092915050565b6000612cc982613b59565b612cd38185613bca565b9350612cde83613b1e565b8060005b83811015612d0f578151612cf68882612c09565b9750612d0183613b92565b925050600181019050612ce2565b5085935050505092915050565b6000612d2782613b64565b612d318185613bdb565b9350612d3c83613b2e565b8060005b83811015612d6d578151612d548882612c21565b9750612d5f83613b9f565b925050600181019050612d40565b5085935050505092915050565b6000612d8582613b6f565b612d8f8185613bec565b9350612d9a83613b3e565b8060005b83811015612dcb578151612db28882612c39565b9750612dbd83613bac565b925050600181019050612d9e565b5085935050505092915050565b612de181613c3c565b82525050565b612df081613c3c565b82525050565b612dff81613c48565b82525050565b612e0e81613c48565b82525050565b612e25612e2082613c48565b613d8f565b82525050565b6000612e3682613b7a565b612e408185613bfd565b9350612e50818560208601613d5c565b612e5981613d99565b840191505092915050565b6000612e6f82613b7a565b612e798185613c0e565b9350612e89818560208601613d5c565b80840191505092915050565b612e9e81613ccf565b82525050565b612ead81613cf3565b82525050565b612ebc81613d17565b82525050565b6000612ecf604083613c19565b91507f756e7265676973746572696e67206d75737420626520646f6e6520616674657260008301527f206164647265737320696e207265676973747279206973207265706c616365646020830152604082019050919050565b6000612f35604083613c19565b91507f726567697374726174696f6e206d75737420626520646f6e65206265666f726560008301527f206164647265737320696e207265676973747279206973207265706c616365646020830152604082019050919050565b6000612f9b602483613c19565b91507f6f6e6c7920636f6e747261637452656769737472792063616e20756e7265676960008301527f73746572000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613001602683613c19565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613067602283613c19565b91507f6f6e6c7920636f6e747261637452656769737472792063616e2072656769737460008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130cd600c83613c19565b91507f464344206f766572666c6f7700000000000000000000000000000000000000006000830152602082019050919050565b600061310d600b83613c19565b91507f646f206e6f74207370616d0000000000000000000000000000000000000000006000830152602082019050919050565b7f5374616b696e6742616e6b000000000000000000000000000000000000000000815250565b6000613173601283613c19565b91507f5f726567697374727920697320656d70747900000000000000000000000000006000830152602082019050919050565b60006131b3602783613c19565b91507f6e756d62657273206f66206b65797320616e642076616c756573206e6f74207460008301527f68652073616d65000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613219600e83613c19565b91507f6f6e6c795265706c696361746f720000000000000000000000000000000000006000830152602082019050919050565b6000613259602083613c19565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613299601683613c19565b91507f636f6e74726163742069732064657072656361746564000000000000000000006000830152602082019050919050565b60006132d9603083613c19565b91507f63616e206e6f74206265207265706c61636564207769746820636861696e206f60008301527f6620646966666572656e742074797065000000000000000000000000000000006020830152604082019050919050565b7f436861696e000000000000000000000000000000000000000000000000000000815250565b6000613365601e83613c19565b91507f636f6e747261637420697320616c7265616479206465707265636174656400006000830152602082019050919050565b60006133a5601583613c19565b91507f626c6f636b496420616c72656164792074616b656e00000000000000000000006000830152602082019050919050565b7f554d420000000000000000000000000000000000000000000000000000000000815250565b600061340b601983613c19565b91507f63616e204e4f54207375626d6974206f6c6465722064617461000000000000006000830152602082019050919050565b6040820160008201516134546000850182612df6565b50602082015161346760208501826134b8565b50505050565b61347681613c52565b82525050565b61348581613c80565b82525050565b61349481613ca8565b82525050565b6134a381613ca8565b82525050565b6134b281613d3b565b82525050565b6134c181613cb2565b82525050565b6134d081613cb2565b82525050565b6134df81613cc2565b82525050565b60006134f18285612e14565b6020820191506135018284612e14565b6020820191508190509392505050565b600061351d8285612e64565b91506135298284612e14565b6020820191508190509392505050565b60006135458285612e64565b91506135518284612e64565b91508190509392505050565b60006020820190506135726000830184612c51565b92915050565b600060208201905081810360008301526135928184612c60565b905092915050565b600060208201905081810360008301526135b48184612cbe565b905092915050565b600060408201905081810360008301526135d68185612d1c565b905081810360208301526135ea8184612d7a565b90509392505050565b60006020820190506136086000830184612de7565b92915050565b60006020820190506136236000830184612e05565b92915050565b600060808201905061363e6000830187612e05565b61364b60208301866134d6565b6136586040830185612e05565b6136656060830184612e05565b95945050505050565b600060208201905081810360008301526136888184612e2b565b905092915050565b60006020820190506136a56000830184612e95565b92915050565b60006020820190506136c06000830184612ea4565b92915050565b60006020820190506136db6000830184612eb3565b92915050565b600060208201905081810360008301526136fa81612ec2565b9050919050565b6000602082019050818103600083015261371a81612f28565b9050919050565b6000602082019050818103600083015261373a81612f8e565b9050919050565b6000602082019050818103600083015261375a81612ff4565b9050919050565b6000602082019050818103600083015261377a8161305a565b9050919050565b6000602082019050818103600083015261379a816130c0565b9050919050565b600060208201905081810360008301526137ba81613100565b9050919050565b60006020820190506137d560008301613140565b919050565b600060208201905081810360008301526137f381613166565b9050919050565b60006020820190508181036000830152613813816131a6565b9050919050565b600060208201905081810360008301526138338161320c565b9050919050565b600060208201905081810360008301526138538161324c565b9050919050565b600060208201905081810360008301526138738161328c565b9050919050565b60006020820190508181036000830152613893816132cc565b9050919050565b60006020820190506138ae60008301613332565b919050565b600060208201905081810360008301526138cc81613358565b9050919050565b600060208201905081810360008301526138ec81613398565b9050919050565b6000602082019050613907600083016133d8565b919050565b60006020820190508181036000830152613925816133fe565b9050919050565b6000604082019050613941600083018461343e565b92915050565b600060208201905061395c600083018461346d565b92915050565b6000604082019050613977600083018561347c565b61398460208301846134c7565b9392505050565b600060a0820190506139a0600083018861349a565b6139ad602083018761346d565b6139ba60408301866134c7565b6139c760608301856134c7565b6139d460808301846134c7565b9695505050505050565b60006040820190506139f3600083018561349a565b613a00602083018461349a565b9392505050565b6000602082019050613a1c60008301846134a9565b92915050565b6000602082019050613a3760008301846134c7565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613a6057600080fd5b8060405250919050565b600067ffffffffffffffff821115613a8157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613aa957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613ad157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115613af957600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613c3582613c60565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000613cda82613ce1565b9050919050565b6000613cec82613c60565b9050919050565b6000613cfe82613d05565b9050919050565b6000613d1082613c60565b9050919050565b6000613d2282613d29565b9050919050565b6000613d3482613c60565b9050919050565b6000613d4682613cb2565b9050919050565b82818337600083830152505050565b60005b83811015613d7a578082015181840152602081019050613d5f565b83811115613d89576000848401525b50505050565b6000819050919050565b6000601f19601f8301169050919050565b613db381613c2a565b8114613dbe57600080fd5b50565b613dca81613c3c565b8114613dd557600080fd5b50565b613de181613c48565b8114613dec57600080fd5b50565b613df881613c52565b8114613e0357600080fd5b50565b613e0f81613ca8565b8114613e1a57600080fd5b50565b613e2681613cb2565b8114613e3157600080fd5b50565b613e3d81613cc2565b8114613e4857600080fd5b5056fea26469706673582212208465b57649c7ccf906e767f7bd3b61ea9b3fe6c5ef1fd6827c25c41043fcf27264736f6c63430006080033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000041a75b8504fdac22b2152b5cfcdaae01ff50947e000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000057a2022fa04f38207ab3cd280557cad6d0b77be1
-----Decoded View---------------
Arg [0] : _contractRegistry (address): 0x41a75B8504fDAC22b2152B5cfCDAae01ff50947E
Arg [1] : _padding (uint16): 300
Arg [2] : _requiredSignatures (uint16): 1
Arg [3] : _replicator (address): 0x57a2022Fa04F38207Ab3CD280557CAD6d0b77BE1
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000041a75b8504fdac22b2152b5cfcdaae01ff50947e
Arg [1] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000057a2022fa04f38207ab3cd280557cad6d0b77be1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.