Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
NearProver
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-19 */ // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } // File: contracts/bridge/AdminControlled.sol pragma solidity ^0.6; contract AdminControlled { address public admin; uint public paused; constructor(address _admin, uint flags) public { admin = _admin; paused = flags; } modifier onlyAdmin { require(msg.sender == admin); _; } modifier pausable(uint flag) { require((paused & flag) == 0 || msg.sender == admin); _; } function adminPause(uint flags) public onlyAdmin { paused = flags; } function adminSstore(uint key, uint value) public onlyAdmin { assembly { sstore(key, value) } } function adminSstoreWithMask( uint key, uint value, uint mask ) public onlyAdmin { assembly { let oldval := sload(key) sstore(key, xor(and(xor(value, oldval), mask), oldval)) } } function adminSendEth(address payable destination, uint amount) public onlyAdmin { destination.transfer(amount); } function adminReceiveEth() public payable onlyAdmin {} function adminDelegatecall(address target, bytes memory data) public payable onlyAdmin returns (bytes memory) { (bool success, bytes memory rdata) = target.delegatecall(data); require(success); return rdata; } } // File: contracts/bridge/INearBridge.sol pragma solidity ^0.6; interface INearBridge { event BlockHashAdded(uint64 indexed height, bytes32 blockHash); event BlockHashReverted(uint64 indexed height, bytes32 blockHash); function blockHashes(uint64 blockNumber) external view returns (bytes32); function blockMerkleRoots(uint64 blockNumber) external view returns (bytes32); function balanceOf(address wallet) external view returns (uint256); function deposit() external payable; function withdraw() external; function initWithValidators(bytes calldata initialValidators) external; function initWithBlock(bytes calldata data) external; function addLightClientBlock(bytes calldata data) external; function challenge(address payable receiver, uint256 signatureIndex) external; function checkBlockProducerSignatureInHead(uint256 signatureIndex) external view returns (bool); } // File: contracts/bridge/Borsh.sol pragma solidity ^0.6; library Borsh { using SafeMath for uint256; struct Data { uint256 offset; bytes raw; } function from(bytes memory data) internal pure returns (Data memory) { return Data({offset: 0, raw: data}); } modifier shift(Data memory data, uint256 size) { require(data.raw.length >= data.offset + size, "Borsh: Out of range"); _; data.offset += size; } function finished(Data memory data) internal pure returns (bool) { return data.offset == data.raw.length; } function peekKeccak256(Data memory data, uint256 length) internal pure returns (bytes32 res) { return bytesKeccak256(data.raw, data.offset, length); } function bytesKeccak256( bytes memory ptr, uint256 offset, uint256 length ) internal pure returns (bytes32 res) { // solium-disable-next-line security/no-inline-assembly assembly { res := keccak256(add(add(ptr, 32), offset), length) } } function peekSha256(Data memory data, uint256 length) internal view returns (bytes32) { return bytesSha256(data.raw, data.offset, length); } function bytesSha256( bytes memory ptr, uint256 offset, uint256 length ) internal view returns (bytes32) { bytes32[1] memory result; // solium-disable-next-line security/no-inline-assembly assembly { pop(staticcall(gas(), 0x02, add(add(ptr, 32), offset), length, result, 32)) } return result[0]; } function decodeU8(Data memory data) internal pure shift(data, 1) returns (uint8 value) { value = uint8(data.raw[data.offset]); } function decodeI8(Data memory data) internal pure shift(data, 1) returns (int8 value) { value = int8(data.raw[data.offset]); } function decodeU16(Data memory data) internal pure returns (uint16 value) { value = uint16(decodeU8(data)); value |= (uint16(decodeU8(data)) << 8); } function decodeI16(Data memory data) internal pure returns (int16 value) { value = int16(decodeI8(data)); value |= (int16(decodeI8(data)) << 8); } function decodeU32(Data memory data) internal pure returns (uint32 value) { value = uint32(decodeU16(data)); value |= (uint32(decodeU16(data)) << 16); } function decodeI32(Data memory data) internal pure returns (int32 value) { value = int32(decodeI16(data)); value |= (int32(decodeI16(data)) << 16); } function decodeU64(Data memory data) internal pure returns (uint64 value) { value = uint64(decodeU32(data)); value |= (uint64(decodeU32(data)) << 32); } function decodeI64(Data memory data) internal pure returns (int64 value) { value = int64(decodeI32(data)); value |= (int64(decodeI32(data)) << 32); } function decodeU128(Data memory data) internal pure returns (uint128 value) { value = uint128(decodeU64(data)); value |= (uint128(decodeU64(data)) << 64); } function decodeI128(Data memory data) internal pure returns (int128 value) { value = int128(decodeI64(data)); value |= (int128(decodeI64(data)) << 64); } function decodeU256(Data memory data) internal pure returns (uint256 value) { value = uint256(decodeU128(data)); value |= (uint256(decodeU128(data)) << 128); } function decodeI256(Data memory data) internal pure returns (int256 value) { value = int256(decodeI128(data)); value |= (int256(decodeI128(data)) << 128); } function decodeBool(Data memory data) internal pure returns (bool value) { value = (decodeU8(data) != 0); } function decodeBytes(Data memory data) internal pure returns (bytes memory value) { value = new bytes(decodeU32(data)); for (uint i = 0; i < value.length; i++) { value[i] = byte(decodeU8(data)); } } function decodeBytes32(Data memory data) internal pure shift(data, 32) returns (bytes32 value) { bytes memory raw = data.raw; uint256 offset = data.offset; // solium-disable-next-line security/no-inline-assembly assembly { value := mload(add(add(raw, 32), offset)) } } function decodeBytes20(Data memory data) internal pure returns (bytes20 value) { for (uint i = 0; i < 20; i++) { value |= bytes20(byte(decodeU8(data)) & 0xFF) >> (i * 8); } } // Public key struct SECP256K1PublicKey { uint256 x; uint256 y; } function decodeSECP256K1PublicKey(Borsh.Data memory data) internal pure returns (SECP256K1PublicKey memory key) { key.x = decodeU256(data); key.y = decodeU256(data); } struct ED25519PublicKey { bytes32 xy; } function decodeED25519PublicKey(Borsh.Data memory data) internal pure returns (ED25519PublicKey memory key) { key.xy = decodeBytes32(data); } // Signature struct SECP256K1Signature { bytes32 r; bytes32 s; uint8 v; } function decodeSECP256K1Signature(Borsh.Data memory data) internal pure returns (SECP256K1Signature memory sig) { sig.r = decodeBytes32(data); sig.s = decodeBytes32(data); sig.v = decodeU8(data); } struct ED25519Signature { bytes32[2] rs; } function decodeED25519Signature(Borsh.Data memory data) internal pure returns (ED25519Signature memory sig) { sig.rs[0] = decodeBytes32(data); sig.rs[1] = decodeBytes32(data); } } // File: contracts/bridge/NearDecoder.sol pragma solidity ^0.6; library NearDecoder { using Borsh for Borsh.Data; using NearDecoder for Borsh.Data; struct PublicKey { uint8 enumIndex; Borsh.ED25519PublicKey ed25519; Borsh.SECP256K1PublicKey secp256k1; } function decodePublicKey(Borsh.Data memory data) internal pure returns (PublicKey memory key) { key.enumIndex = data.decodeU8(); if (key.enumIndex == 0) { key.ed25519 = data.decodeED25519PublicKey(); } else if (key.enumIndex == 1) { key.secp256k1 = data.decodeSECP256K1PublicKey(); } else { revert("NearBridge: Only ED25519 and SECP256K1 public keys are supported"); } } struct ValidatorStake { string account_id; PublicKey public_key; uint128 stake; } function decodeValidatorStake(Borsh.Data memory data) internal pure returns (ValidatorStake memory validatorStake) { validatorStake.account_id = string(data.decodeBytes()); validatorStake.public_key = data.decodePublicKey(); validatorStake.stake = data.decodeU128(); } struct OptionalValidatorStakes { bool none; ValidatorStake[] validatorStakes; bytes32 hash; // Additional computable element } function decodeOptionalValidatorStakes(Borsh.Data memory data) internal view returns (OptionalValidatorStakes memory stakes) { stakes.none = (data.decodeU8() == 0); if (!stakes.none) { uint256 start = data.offset; stakes.validatorStakes = new ValidatorStake[](data.decodeU32()); for (uint i = 0; i < stakes.validatorStakes.length; i++) { stakes.validatorStakes[i] = data.decodeValidatorStake(); } uint256 stop = data.offset; data.offset = start; stakes.hash = data.peekSha256(stop - start); data.offset = stop; } } struct Signature { uint8 enumIndex; Borsh.ED25519Signature ed25519; Borsh.SECP256K1Signature secp256k1; } function decodeSignature(Borsh.Data memory data) internal pure returns (Signature memory sig) { sig.enumIndex = data.decodeU8(); if (sig.enumIndex == 0) { sig.ed25519 = data.decodeED25519Signature(); } else if (sig.enumIndex == 1) { sig.secp256k1 = data.decodeSECP256K1Signature(); } else { revert("NearBridge: Only ED25519 and SECP256K1 signatures are supported"); } } struct OptionalSignature { bool none; Signature signature; } function decodeOptionalSignature(Borsh.Data memory data) internal pure returns (OptionalSignature memory sig) { sig.none = (data.decodeU8() == 0); if (!sig.none) { sig.signature = data.decodeSignature(); } } struct LightClientBlock { bytes32 prev_block_hash; bytes32 next_block_inner_hash; BlockHeaderInnerLite inner_lite; bytes32 inner_rest_hash; OptionalValidatorStakes next_bps; OptionalSignature[] approvals_after_next; bytes32 hash; bytes32 next_hash; } struct InitialValidators { ValidatorStake[] validator_stakes; } function decodeInitialValidators(Borsh.Data memory data) internal view returns (InitialValidators memory validators) { validators.validator_stakes = new ValidatorStake[](data.decodeU32()); for (uint i = 0; i < validators.validator_stakes.length; i++) { validators.validator_stakes[i] = data.decodeValidatorStake(); } } function decodeLightClientBlock(Borsh.Data memory data) internal view returns (LightClientBlock memory header) { header.prev_block_hash = data.decodeBytes32(); header.next_block_inner_hash = data.decodeBytes32(); header.inner_lite = data.decodeBlockHeaderInnerLite(); header.inner_rest_hash = data.decodeBytes32(); header.next_bps = data.decodeOptionalValidatorStakes(); header.approvals_after_next = new OptionalSignature[](data.decodeU32()); for (uint i = 0; i < header.approvals_after_next.length; i++) { header.approvals_after_next[i] = data.decodeOptionalSignature(); } header.hash = sha256( abi.encodePacked( sha256(abi.encodePacked(header.inner_lite.hash, header.inner_rest_hash)), header.prev_block_hash ) ); header.next_hash = sha256(abi.encodePacked(header.next_block_inner_hash, header.hash)); } struct BlockHeaderInnerLite { uint64 height; /// Height of this block since the genesis block (height 0). bytes32 epoch_id; /// Epoch start hash of this block's epoch. Used for retrieving validator information bytes32 next_epoch_id; bytes32 prev_state_root; /// Root hash of the state at the previous block. bytes32 outcome_root; /// Root of the outcomes of transactions and receipts. uint64 timestamp; /// Timestamp at which the block was built. bytes32 next_bp_hash; /// Hash of the next epoch block producers set bytes32 block_merkle_root; bytes32 hash; // Additional computable element } function decodeBlockHeaderInnerLite(Borsh.Data memory data) internal view returns (BlockHeaderInnerLite memory header) { header.hash = data.peekSha256(208); header.height = data.decodeU64(); header.epoch_id = data.decodeBytes32(); header.next_epoch_id = data.decodeBytes32(); header.prev_state_root = data.decodeBytes32(); header.outcome_root = data.decodeBytes32(); header.timestamp = data.decodeU64(); header.next_bp_hash = data.decodeBytes32(); header.block_merkle_root = data.decodeBytes32(); } } // File: contracts/ProofDecoder.sol pragma solidity ^0.6; library ProofDecoder { using Borsh for Borsh.Data; using ProofDecoder for Borsh.Data; using NearDecoder for Borsh.Data; struct FullOutcomeProof { ExecutionOutcomeWithIdAndProof outcome_proof; MerklePath outcome_root_proof; // TODO: now empty array BlockHeaderLight block_header_lite; MerklePath block_proof; } function decodeFullOutcomeProof(Borsh.Data memory data) internal view returns (FullOutcomeProof memory proof) { proof.outcome_proof = data.decodeExecutionOutcomeWithIdAndProof(); proof.outcome_root_proof = data.decodeMerklePath(); proof.block_header_lite = data.decodeBlockHeaderLight(); proof.block_proof = data.decodeMerklePath(); } struct BlockHeaderLight { bytes32 prev_block_hash; bytes32 inner_rest_hash; NearDecoder.BlockHeaderInnerLite inner_lite; bytes32 hash; // Computable } function decodeBlockHeaderLight(Borsh.Data memory data) internal view returns (BlockHeaderLight memory header) { header.prev_block_hash = data.decodeBytes32(); header.inner_rest_hash = data.decodeBytes32(); header.inner_lite = data.decodeBlockHeaderInnerLite(); header.hash = sha256( abi.encodePacked( sha256(abi.encodePacked(header.inner_lite.hash, header.inner_rest_hash)), header.prev_block_hash ) ); } struct ExecutionStatus { uint8 enumIndex; bool unknown; bool failed; bytes successValue; /// The final action succeeded and returned some value or an empty vec. bytes32 successReceiptId; /// The final action of the receipt returned a promise or the signed /// transaction was converted to a receipt. Contains the receipt_id of the generated receipt. } function decodeExecutionStatus(Borsh.Data memory data) internal pure returns (ExecutionStatus memory executionStatus) { executionStatus.enumIndex = data.decodeU8(); if (executionStatus.enumIndex == 0) { executionStatus.unknown = true; } else if (executionStatus.enumIndex == 1) { //revert("NearDecoder: decodeExecutionStatus failure case not implemented yet"); // Can avoid revert since ExecutionStatus is latest field in all parent structures executionStatus.failed = true; } else if (executionStatus.enumIndex == 2) { executionStatus.successValue = data.decodeBytes(); } else if (executionStatus.enumIndex == 3) { executionStatus.successReceiptId = data.decodeBytes32(); } else { revert("NearDecoder: decodeExecutionStatus index out of range"); } } struct ExecutionOutcome { bytes[] logs; /// Logs from this transaction or receipt. bytes32[] receipt_ids; /// Receipt IDs generated by this transaction or receipt. uint64 gas_burnt; /// The amount of the gas burnt by the given transaction or receipt. uint128 tokens_burnt; /// The total number of the tokens burnt by the given transaction or receipt. bytes executor_id; /// Hash of the transaction or receipt id that produced this outcome. ExecutionStatus status; /// Execution status. Contains the result in case of successful execution. bytes32[] merkelization_hashes; } function decodeExecutionOutcome(Borsh.Data memory data) internal view returns (ExecutionOutcome memory outcome) { outcome.logs = new bytes[](data.decodeU32()); for (uint i = 0; i < outcome.logs.length; i++) { outcome.logs[i] = data.decodeBytes(); } uint256 start = data.offset; outcome.receipt_ids = new bytes32[](data.decodeU32()); for (uint i = 0; i < outcome.receipt_ids.length; i++) { outcome.receipt_ids[i] = data.decodeBytes32(); } outcome.gas_burnt = data.decodeU64(); outcome.tokens_burnt = data.decodeU128(); outcome.executor_id = data.decodeBytes(); outcome.status = data.decodeExecutionStatus(); uint256 stop = data.offset; outcome.merkelization_hashes = new bytes32[](1 + outcome.logs.length); data.offset = start; outcome.merkelization_hashes[0] = data.peekSha256(stop - start); data.offset = stop; for (uint i = 0; i < outcome.logs.length; i++) { outcome.merkelization_hashes[i + 1] = sha256(outcome.logs[i]); } } struct ExecutionOutcomeWithId { bytes32 id; /// The transaction hash or the receipt ID. ExecutionOutcome outcome; bytes32 hash; } function decodeExecutionOutcomeWithId(Borsh.Data memory data) internal view returns (ExecutionOutcomeWithId memory outcome) { outcome.id = data.decodeBytes32(); outcome.outcome = data.decodeExecutionOutcome(); uint256 len = 1 + outcome.outcome.merkelization_hashes.length; outcome.hash = sha256( abi.encodePacked( uint8((len >> 0) & 0xFF), uint8((len >> 8) & 0xFF), uint8((len >> 16) & 0xFF), uint8((len >> 24) & 0xFF), outcome.id, outcome.outcome.merkelization_hashes ) ); } struct MerklePathItem { bytes32 hash; uint8 direction; // 0 = left, 1 = right } function decodeMerklePathItem(Borsh.Data memory data) internal pure returns (MerklePathItem memory item) { item.hash = data.decodeBytes32(); item.direction = data.decodeU8(); require(item.direction < 2, "ProofDecoder: MerklePathItem direction should be 0 or 1"); } struct MerklePath { MerklePathItem[] items; } function decodeMerklePath(Borsh.Data memory data) internal pure returns (MerklePath memory path) { path.items = new MerklePathItem[](data.decodeU32()); for (uint i = 0; i < path.items.length; i++) { path.items[i] = data.decodeMerklePathItem(); } } struct ExecutionOutcomeWithIdAndProof { MerklePath proof; bytes32 block_hash; ExecutionOutcomeWithId outcome_with_id; } function decodeExecutionOutcomeWithIdAndProof(Borsh.Data memory data) internal view returns (ExecutionOutcomeWithIdAndProof memory outcome) { outcome.proof = data.decodeMerklePath(); outcome.block_hash = data.decodeBytes32(); outcome.outcome_with_id = data.decodeExecutionOutcomeWithId(); } } // File: contracts/INearProver.sol pragma solidity ^0.6; interface INearProver { function proveOutcome(bytes calldata proofData, uint64 blockHeight) external view returns (bool); } // File: contracts/NearProver.sol pragma solidity ^0.6; contract NearProver is INearProver, AdminControlled { using SafeMath for uint256; using Borsh for Borsh.Data; using NearDecoder for Borsh.Data; using ProofDecoder for Borsh.Data; INearBridge public bridge; constructor( INearBridge _bridge, address _admin, uint _pausedFlags ) public AdminControlled(_admin, _pausedFlags) { bridge = _bridge; } uint constant UNPAUSE_ALL = 0; uint constant PAUSED_VERIFY = 1; function proveOutcome(bytes memory proofData, uint64 blockHeight) public view override pausable(PAUSED_VERIFY) returns (bool) { Borsh.Data memory borshData = Borsh.from(proofData); ProofDecoder.FullOutcomeProof memory fullOutcomeProof = borshData.decodeFullOutcomeProof(); require(borshData.finished(), "NearProver: argument should be exact borsh serialization"); bytes32 hash = _computeRoot(fullOutcomeProof.outcome_proof.outcome_with_id.hash, fullOutcomeProof.outcome_proof.proof); hash = sha256(abi.encodePacked(hash)); hash = _computeRoot(hash, fullOutcomeProof.outcome_root_proof); require( hash == fullOutcomeProof.block_header_lite.inner_lite.outcome_root, "NearProver: outcome merkle proof is not valid" ); bytes32 expectedBlockMerkleRoot = bridge.blockMerkleRoots(blockHeight); require( _computeRoot(fullOutcomeProof.block_header_lite.hash, fullOutcomeProof.block_proof) == expectedBlockMerkleRoot, "NearProver: block proof is not valid" ); return true; } function _computeRoot(bytes32 node, ProofDecoder.MerklePath memory proof) internal pure returns (bytes32 hash) { hash = node; for (uint i = 0; i < proof.items.length; i++) { ProofDecoder.MerklePathItem memory item = proof.items[i]; if (item.direction == 0) { hash = sha256(abi.encodePacked(item.hash, hash)); } else { hash = sha256(abi.encodePacked(hash, item.hash)); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract INearBridge","name":"_bridge","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_pausedFlags","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"adminDelegatecall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"flags","type":"uint256"}],"name":"adminPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminReceiveEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminSendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"adminSstore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"key","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"mask","type":"uint256"}],"name":"adminSstoreWithMask","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"contract INearBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"proofData","type":"bytes"},{"internalType":"uint64","name":"blockHeight","type":"uint64"}],"name":"proveOutcome","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516118e43803806118e48339818101604052606081101561003357600080fd5b5080516020820151604090920151600080546001600160a01b039485166001600160a01b0319918216179091556001919091556002805493909216921691909117905561185f806100856000396000f3fe6080604052600436106100915760003560e01c8063b8e9744c11610059578063b8e9744c1461022a578063be831a2e14610355578063e78cea9214610385578063f48ab4e0146103b6578063f851a440146103be57610091565b80632692c59f14610096578063530208f2146100c25780635c975abb146100fb5780636c4624c31461012257806392d68dfd14610158575b600080fd5b3480156100a257600080fd5b506100c0600480360360208110156100b957600080fd5b50356103d3565b005b3480156100ce57600080fd5b506100c0600480360360408110156100e557600080fd5b506001600160a01b0381351690602001356103ef565b34801561010757600080fd5b50610110610441565b60408051918252519081900360200190f35b34801561012e57600080fd5b506100c06004803603606081101561014557600080fd5b5080359060208101359060400135610447565b34801561016457600080fd5b506102166004803603604081101561017b57600080fd5b81019060208101813564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160401b031691506104699050565b604080519115158252519081900360200190f35b6102e06004803603604081101561024057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561026b57600080fd5b82018360208201111561027d57600080fd5b8035906020019184600183028401116401000000008311171561029f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610707945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031a578181015183820152602001610302565b50505050905090810190601f1680156103475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036157600080fd5b506100c06004803603604081101561037857600080fd5b50803590602001356107db565b34801561039157600080fd5b5061039a6107f6565b604080516001600160a01b039092168252519081900360200190f35b6100c0610805565b3480156103ca57600080fd5b5061039a61081e565b6000546001600160a01b031633146103ea57600080fd5b600155565b6000546001600160a01b0316331461040657600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561043c573d6000803e3d6000fd5b505050565b60015481565b6000546001600160a01b0316331461045e57600080fd5b825491821816189055565b6000600180600154166000148061048a57506000546001600160a01b031633145b61049357600080fd5b61049b611557565b6104a48561082d565b90506104ae611571565b6104b782610853565b90506104c282610895565b6104fd5760405162461bcd60e51b81526004018080602001828103825260388152602001806117f26038913960400191505060405180910390fd5b805160408082015101519051600091610515916108a1565b9050600281604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106105685780518252601f199092019160209182019101610549565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156105a7573d6000803e3d6000fd5b5050506040513d60208110156105bc57600080fd5b505160208301519091506105d19082906108a1565b905081604001516040015160800151811461061d5760405162461bcd60e51b815260040180806020018281038252602d8152602001806117a1602d913960400191505060405180910390fd5b60025460408051630f381c0360e11b81526001600160401b038916600482015290516000926001600160a01b031691631e703806916024808301926020929190829003018186803b15801561067157600080fd5b505afa158015610685573d6000803e3d6000fd5b505050506040513d602081101561069b57600080fd5b505160408401516060908101519085015191925082916106bb91906108a1565b146106f75760405162461bcd60e51b81526004018080602001828103825260248152602001806117ce6024913960400191505060405180910390fd5b60019550505050505b5092915050565b6000546060906001600160a01b0316331461072157600080fd5b60006060846001600160a01b0316846040518082805190602001908083835b6020831061075f5780518252601f199092019160209182019101610740565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146107bf576040519150601f19603f3d011682016040523d82523d6000602084013e6107c4565b606091505b5091509150816107d357600080fd5b949350505050565b6000546001600160a01b031633146107f257600080fd5b9055565b6002546001600160a01b031681565b6000546001600160a01b0316331461081c57600080fd5b565b6000546001600160a01b031681565b610835611557565b6040518060400160405280600081526020018381525090505b919050565b61085b611571565b61086482610a58565b815261086f82610a8c565b602082015261087d82610b32565b604082015261088b82610a8c565b6060820152919050565b60208101515190511490565b8160005b825151811015610700576108b76115b0565b83518051839081106108c557fe5b60200260200101519050806020015160ff166000141561099957600281600001518460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061093c5780518252601f19909201916020918201910161091d565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561097b573d6000803e3d6000fd5b5050506040513d602081101561099057600080fd5b50519250610a4f565b600283826000015160405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106109f65780518252601f1990920191602091820191016109d7565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610a35573d6000803e3d6000fd5b5050506040513d6020811015610a4a57600080fd5b505192505b506001016108a5565b610a606115c7565b610a6982610a8c565b8152610a7482610cd7565b6020820152610a8282610d4c565b6040820152919050565b610a946115ee565b610a9d82610ec5565b63ffffffff166001600160401b0381118015610ab857600080fd5b50604051908082528060200260200182016040528015610af257816020015b610adf6115b0565b815260200190600190039081610ad75790505b50815260005b815151811015610b2c57610b0b83610eed565b8251805183908110610b1957fe5b6020908102919091010152600101610af8565b50919050565b610b3a611601565b610b4382610cd7565b8152610b4e82610cd7565b6020820152610b5c82610f51565b816040018190525060028082604001516101000151836020015160405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610bcb5780518252601f199092019160209182019101610bac565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610c0a573d6000803e3d6000fd5b5050506040513d6020811015610c1f57600080fd5b50518251604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610c775780518252601f199092019160209182019101610c58565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610cb6573d6000803e3d6000fd5b5050506040513d6020811015610ccb57600080fd5b50516060820152919050565b6000816020808260000151018260200151511015610d32576040805162461bcd60e51b8152602060048201526013602482015272426f7273683a204f7574206f662072616e676560681b604482015290519081900360640190fd5b602080850151945190940190930151815190930190525090565b610d5461162d565b610d5d82610cd7565b8152610d6882610fee565b81602001819052506000816020015160c001515160010190506002600082901c60ff16600883901c60ff16601084901c60ff16601885901c60ff168660000151876020015160c00151604051602001808760ff1660f81b81526001018660ff1660f81b81526001018560ff1660f81b81526001018460ff1660f81b8152600101838152602001828051906020019060200280838360005b83811015610e17578181015183820152602001610dff565b5050505090500196505050505050506040516020818303038152906040526040518082805190602001908083835b60208310610e645780518252601f199092019160209182019101610e45565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610ea3573d6000803e3d6000fd5b5050506040513d6020811015610eb857600080fd5b5051604083015250919050565b6000610ed0826112bc565b61ffff1690506010610ee1836112bc565b61ffff16901b17919050565b610ef56115b0565b610efe82610cd7565b8152610f09826112e2565b60ff166020820181905260021161084e5760405162461bcd60e51b81526004018080602001828103825260378152602001806117356037913960400191505060405180910390fd5b610f59611648565b610f648260d0611364565b610100820152610f7382611380565b6001600160401b03168152610f8782610cd7565b6020820152610f9582610cd7565b6040820152610fa382610cd7565b6060820152610fb182610cd7565b6080820152610fbf82611380565b6001600160401b031660a0820152610fd682610cd7565b60c0820152610fe482610cd7565b60e0820152919050565b610ff6611694565b610fff82610ec5565b63ffffffff166001600160401b038111801561101a57600080fd5b5060405190808252806020026020018201604052801561104e57816020015b60608152602001906001900390816110395790505b50815260005b81515181101561108857611067836113ac565b825180518390811061107557fe5b6020908102919091010152600101611054565b50815161109483610ec5565b63ffffffff166001600160401b03811180156110af57600080fd5b506040519080825280602002602001820160405280156110d9578160200160208202803683370190505b50602083015260005b82602001515181101561111b576110f884610cd7565b8360200151828151811061110857fe5b60209081029190910101526001016110e2565b5061112583611380565b6001600160401b0316604083015261113c83611443565b6001600160801b03166060830152611153836113ac565b608083015261116183611475565b60a083015282518251516001016001600160401b038111801561118357600080fd5b506040519080825280602002602001820160405280156111ad578160200160208202803683370190505b5060c08401528184526111c284838303611364565b8360c001516000815181106111d357fe5b602090810291909101015280845260005b8351518110156112b45760028460000151828151811061120057fe5b60200260200101516040518082805190602001908083835b602083106112375780518252601f199092019160209182019101611218565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611276573d6000803e3d6000fd5b5050506040513d602081101561128b57600080fd5b505160c08501518051600184019081106112a157fe5b60209081029190910101526001016111e4565b505050919050565b60006112c7826112e2565b60ff16905060086112d7836112e2565b60ff16901b17919050565b600081600180826000015101826020015151101561133d576040805162461bcd60e51b8152602060048201526013602482015272426f7273683a204f7574206f662072616e676560681b604482015290519081900360640190fd5b602084015184518151811061134e57fe5b0160200151825190910190915260f81c92915050565b60006113798360200151846000015184611535565b9392505050565b600061138b82610ec5565b63ffffffff169050602061139e83610ec5565b63ffffffff16901b17919050565b60606113b782610ec5565b63ffffffff166001600160401b03811180156113d257600080fd5b506040519080825280601f01601f1916602001820160405280156113fd576020820181803683370190505b50905060005b8151811015610b2c57611415836112e2565b60f81b82828151811061142457fe5b60200101906001600160f81b031916908160001a905350600101611403565b600061144e82611380565b6001600160401b03169050604061146483611380565b6001600160401b0316901b17919050565b61147d6116e9565b611486826112e2565b60ff1680825261149c576001602082015261084e565b806000015160ff16600114156114b8576001604082015261084e565b806000015160ff16600214156114db576114d1826113ac565b606082015261084e565b806000015160ff16600314156114fe576114f482610cd7565b608082015261084e565b60405162461bcd60e51b815260040180806020018281038252603581526020018061176c6035913960400191505060405180910390fd5b600061153f611716565b6020818486602089010160025afa5051949350505050565b604051806040016040528060008152602001606081525090565b60405180608001604052806115846115c7565b81526020016115916115ee565b815260200161159e611601565b81526020016115ab6115ee565b905290565b604080518082019091526000808252602082015290565b60405180606001604052806115da6115ee565b8152600060208201526040016115ab61162d565b6040518060200160405280606081525090565b6040805160808101825260008082526020820152908101611620611648565b8152600060209091015290565b60408051606081019091526000815260208101611620611694565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6040518060e00160405280606081526020016060815260200160006001600160401b0316815260200160006001600160801b03168152602001606081526020016116dc6116e9565b8152602001606081525090565b6040805160a081018252600080825260208201819052918101829052606080820152608081019190915290565b6040518060200160405280600190602082028036833750919291505056fe50726f6f664465636f6465723a204d65726b6c65506174684974656d20646972656374696f6e2073686f756c642062652030206f7220314e6561724465636f6465723a206465636f6465457865637574696f6e53746174757320696e646578206f7574206f662072616e67654e65617250726f7665723a206f7574636f6d65206d65726b6c652070726f6f66206973206e6f742076616c69644e65617250726f7665723a20626c6f636b2070726f6f66206973206e6f742076616c69644e65617250726f7665723a20617267756d656e742073686f756c6420626520657861637420626f7273682073657269616c697a6174696f6ea2646970667358221220001bfb295ddf2c98c3a1a19c9aac9ef41c24672f7234947edbf86f10f101753664736f6c634300060c0033000000000000000000000000ce9d8c70c2ac161383c4debf207d884f6531b1b9000000000000000000000000bf7aad3498a66e8722a897b3c5ede45c2c25fb820000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100915760003560e01c8063b8e9744c11610059578063b8e9744c1461022a578063be831a2e14610355578063e78cea9214610385578063f48ab4e0146103b6578063f851a440146103be57610091565b80632692c59f14610096578063530208f2146100c25780635c975abb146100fb5780636c4624c31461012257806392d68dfd14610158575b600080fd5b3480156100a257600080fd5b506100c0600480360360208110156100b957600080fd5b50356103d3565b005b3480156100ce57600080fd5b506100c0600480360360408110156100e557600080fd5b506001600160a01b0381351690602001356103ef565b34801561010757600080fd5b50610110610441565b60408051918252519081900360200190f35b34801561012e57600080fd5b506100c06004803603606081101561014557600080fd5b5080359060208101359060400135610447565b34801561016457600080fd5b506102166004803603604081101561017b57600080fd5b81019060208101813564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160401b031691506104699050565b604080519115158252519081900360200190f35b6102e06004803603604081101561024057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561026b57600080fd5b82018360208201111561027d57600080fd5b8035906020019184600183028401116401000000008311171561029f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610707945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031a578181015183820152602001610302565b50505050905090810190601f1680156103475780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036157600080fd5b506100c06004803603604081101561037857600080fd5b50803590602001356107db565b34801561039157600080fd5b5061039a6107f6565b604080516001600160a01b039092168252519081900360200190f35b6100c0610805565b3480156103ca57600080fd5b5061039a61081e565b6000546001600160a01b031633146103ea57600080fd5b600155565b6000546001600160a01b0316331461040657600080fd5b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561043c573d6000803e3d6000fd5b505050565b60015481565b6000546001600160a01b0316331461045e57600080fd5b825491821816189055565b6000600180600154166000148061048a57506000546001600160a01b031633145b61049357600080fd5b61049b611557565b6104a48561082d565b90506104ae611571565b6104b782610853565b90506104c282610895565b6104fd5760405162461bcd60e51b81526004018080602001828103825260388152602001806117f26038913960400191505060405180910390fd5b805160408082015101519051600091610515916108a1565b9050600281604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106105685780518252601f199092019160209182019101610549565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa1580156105a7573d6000803e3d6000fd5b5050506040513d60208110156105bc57600080fd5b505160208301519091506105d19082906108a1565b905081604001516040015160800151811461061d5760405162461bcd60e51b815260040180806020018281038252602d8152602001806117a1602d913960400191505060405180910390fd5b60025460408051630f381c0360e11b81526001600160401b038916600482015290516000926001600160a01b031691631e703806916024808301926020929190829003018186803b15801561067157600080fd5b505afa158015610685573d6000803e3d6000fd5b505050506040513d602081101561069b57600080fd5b505160408401516060908101519085015191925082916106bb91906108a1565b146106f75760405162461bcd60e51b81526004018080602001828103825260248152602001806117ce6024913960400191505060405180910390fd5b60019550505050505b5092915050565b6000546060906001600160a01b0316331461072157600080fd5b60006060846001600160a01b0316846040518082805190602001908083835b6020831061075f5780518252601f199092019160209182019101610740565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146107bf576040519150601f19603f3d011682016040523d82523d6000602084013e6107c4565b606091505b5091509150816107d357600080fd5b949350505050565b6000546001600160a01b031633146107f257600080fd5b9055565b6002546001600160a01b031681565b6000546001600160a01b0316331461081c57600080fd5b565b6000546001600160a01b031681565b610835611557565b6040518060400160405280600081526020018381525090505b919050565b61085b611571565b61086482610a58565b815261086f82610a8c565b602082015261087d82610b32565b604082015261088b82610a8c565b6060820152919050565b60208101515190511490565b8160005b825151811015610700576108b76115b0565b83518051839081106108c557fe5b60200260200101519050806020015160ff166000141561099957600281600001518460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061093c5780518252601f19909201916020918201910161091d565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa15801561097b573d6000803e3d6000fd5b5050506040513d602081101561099057600080fd5b50519250610a4f565b600283826000015160405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083106109f65780518252601f1990920191602091820191016109d7565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610a35573d6000803e3d6000fd5b5050506040513d6020811015610a4a57600080fd5b505192505b506001016108a5565b610a606115c7565b610a6982610a8c565b8152610a7482610cd7565b6020820152610a8282610d4c565b6040820152919050565b610a946115ee565b610a9d82610ec5565b63ffffffff166001600160401b0381118015610ab857600080fd5b50604051908082528060200260200182016040528015610af257816020015b610adf6115b0565b815260200190600190039081610ad75790505b50815260005b815151811015610b2c57610b0b83610eed565b8251805183908110610b1957fe5b6020908102919091010152600101610af8565b50919050565b610b3a611601565b610b4382610cd7565b8152610b4e82610cd7565b6020820152610b5c82610f51565b816040018190525060028082604001516101000151836020015160405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610bcb5780518252601f199092019160209182019101610bac565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610c0a573d6000803e3d6000fd5b5050506040513d6020811015610c1f57600080fd5b50518251604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610c775780518252601f199092019160209182019101610c58565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610cb6573d6000803e3d6000fd5b5050506040513d6020811015610ccb57600080fd5b50516060820152919050565b6000816020808260000151018260200151511015610d32576040805162461bcd60e51b8152602060048201526013602482015272426f7273683a204f7574206f662072616e676560681b604482015290519081900360640190fd5b602080850151945190940190930151815190930190525090565b610d5461162d565b610d5d82610cd7565b8152610d6882610fee565b81602001819052506000816020015160c001515160010190506002600082901c60ff16600883901c60ff16601084901c60ff16601885901c60ff168660000151876020015160c00151604051602001808760ff1660f81b81526001018660ff1660f81b81526001018560ff1660f81b81526001018460ff1660f81b8152600101838152602001828051906020019060200280838360005b83811015610e17578181015183820152602001610dff565b5050505090500196505050505050506040516020818303038152906040526040518082805190602001908083835b60208310610e645780518252601f199092019160209182019101610e45565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015610ea3573d6000803e3d6000fd5b5050506040513d6020811015610eb857600080fd5b5051604083015250919050565b6000610ed0826112bc565b61ffff1690506010610ee1836112bc565b61ffff16901b17919050565b610ef56115b0565b610efe82610cd7565b8152610f09826112e2565b60ff166020820181905260021161084e5760405162461bcd60e51b81526004018080602001828103825260378152602001806117356037913960400191505060405180910390fd5b610f59611648565b610f648260d0611364565b610100820152610f7382611380565b6001600160401b03168152610f8782610cd7565b6020820152610f9582610cd7565b6040820152610fa382610cd7565b6060820152610fb182610cd7565b6080820152610fbf82611380565b6001600160401b031660a0820152610fd682610cd7565b60c0820152610fe482610cd7565b60e0820152919050565b610ff6611694565b610fff82610ec5565b63ffffffff166001600160401b038111801561101a57600080fd5b5060405190808252806020026020018201604052801561104e57816020015b60608152602001906001900390816110395790505b50815260005b81515181101561108857611067836113ac565b825180518390811061107557fe5b6020908102919091010152600101611054565b50815161109483610ec5565b63ffffffff166001600160401b03811180156110af57600080fd5b506040519080825280602002602001820160405280156110d9578160200160208202803683370190505b50602083015260005b82602001515181101561111b576110f884610cd7565b8360200151828151811061110857fe5b60209081029190910101526001016110e2565b5061112583611380565b6001600160401b0316604083015261113c83611443565b6001600160801b03166060830152611153836113ac565b608083015261116183611475565b60a083015282518251516001016001600160401b038111801561118357600080fd5b506040519080825280602002602001820160405280156111ad578160200160208202803683370190505b5060c08401528184526111c284838303611364565b8360c001516000815181106111d357fe5b602090810291909101015280845260005b8351518110156112b45760028460000151828151811061120057fe5b60200260200101516040518082805190602001908083835b602083106112375780518252601f199092019160209182019101611218565b51815160209384036101000a60001901801990921691161790526040519190930194509192505080830381855afa158015611276573d6000803e3d6000fd5b5050506040513d602081101561128b57600080fd5b505160c08501518051600184019081106112a157fe5b60209081029190910101526001016111e4565b505050919050565b60006112c7826112e2565b60ff16905060086112d7836112e2565b60ff16901b17919050565b600081600180826000015101826020015151101561133d576040805162461bcd60e51b8152602060048201526013602482015272426f7273683a204f7574206f662072616e676560681b604482015290519081900360640190fd5b602084015184518151811061134e57fe5b0160200151825190910190915260f81c92915050565b60006113798360200151846000015184611535565b9392505050565b600061138b82610ec5565b63ffffffff169050602061139e83610ec5565b63ffffffff16901b17919050565b60606113b782610ec5565b63ffffffff166001600160401b03811180156113d257600080fd5b506040519080825280601f01601f1916602001820160405280156113fd576020820181803683370190505b50905060005b8151811015610b2c57611415836112e2565b60f81b82828151811061142457fe5b60200101906001600160f81b031916908160001a905350600101611403565b600061144e82611380565b6001600160401b03169050604061146483611380565b6001600160401b0316901b17919050565b61147d6116e9565b611486826112e2565b60ff1680825261149c576001602082015261084e565b806000015160ff16600114156114b8576001604082015261084e565b806000015160ff16600214156114db576114d1826113ac565b606082015261084e565b806000015160ff16600314156114fe576114f482610cd7565b608082015261084e565b60405162461bcd60e51b815260040180806020018281038252603581526020018061176c6035913960400191505060405180910390fd5b600061153f611716565b6020818486602089010160025afa5051949350505050565b604051806040016040528060008152602001606081525090565b60405180608001604052806115846115c7565b81526020016115916115ee565b815260200161159e611601565b81526020016115ab6115ee565b905290565b604080518082019091526000808252602082015290565b60405180606001604052806115da6115ee565b8152600060208201526040016115ab61162d565b6040518060200160405280606081525090565b6040805160808101825260008082526020820152908101611620611648565b8152600060209091015290565b60408051606081019091526000815260208101611620611694565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6040518060e00160405280606081526020016060815260200160006001600160401b0316815260200160006001600160801b03168152602001606081526020016116dc6116e9565b8152602001606081525090565b6040805160a081018252600080825260208201819052918101829052606080820152608081019190915290565b6040518060200160405280600190602082028036833750919291505056fe50726f6f664465636f6465723a204d65726b6c65506174684974656d20646972656374696f6e2073686f756c642062652030206f7220314e6561724465636f6465723a206465636f6465457865637574696f6e53746174757320696e646578206f7574206f662072616e67654e65617250726f7665723a206f7574636f6d65206d65726b6c652070726f6f66206973206e6f742076616c69644e65617250726f7665723a20626c6f636b2070726f6f66206973206e6f742076616c69644e65617250726f7665723a20617267756d656e742073686f756c6420626520657861637420626f7273682073657269616c697a6174696f6ea2646970667358221220001bfb295ddf2c98c3a1a19c9aac9ef41c24672f7234947edbf86f10f101753664736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ce9d8c70c2ac161383c4debf207d884f6531b1b9000000000000000000000000bf7aad3498a66e8722a897b3c5ede45c2c25fb820000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _bridge (address): 0xCe9D8c70C2aC161383C4dEBf207D884f6531B1b9
Arg [1] : _admin (address): 0xBf7aAD3498A66E8722A897B3c5Ede45C2c25FB82
Arg [2] : _pausedFlags (uint256): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000ce9d8c70c2ac161383c4debf207d884f6531b1b9
Arg [1] : 000000000000000000000000bf7aad3498a66e8722a897b3c5ede45c2c25fb82
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
29097:2231:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7941:82;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7941:82:0;;:::i;:::-;;8437:128;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8437:128:0;;;;;;;;:::i;7595:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8170:259;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8170:259:0;;;;;;;;;;;;:::i;29603:1223::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29603:1223:0;;-1:-1:-1;;;29603:1223:0;;-1:-1:-1;;;;;29603:1223:0;;-1:-1:-1;29603:1223:0;;-1:-1:-1;29603:1223:0:i;:::-;;;;;;;;;;;;;;;;;;8635:241;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8635:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8635:241:0;;-1:-1:-1;8635:241:0;;-1:-1:-1;;;;;8635:241:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8031:131;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8031:131:0;;;;;;;:::i;29303:25::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;29303:25:0;;;;;;;;;;;;;;8573:54;;;:::i;7568:20::-;;;;;;;;;;;;;:::i;7941:82::-;7787:5;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8001:6:::1;:14:::0;7941:82::o;8437:128::-;7787:5;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8529::::1;::::0;-1:-1:-1;;;;;8529:20:0;::::1;::::0;:28;::::1;;;::::0;8550:6;;8529:28:::1;::::0;;;8550:6;8529:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;8437:128:::0;;:::o;7595:18::-;;;;:::o;8170:259::-;7787:5;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8332:10;;8376:18;;::::1;8372:29;8368:42;8356:55:::0;;8170:259::o;29603:1223::-;29768:4;29593:1;7879:4;7870:6;;:13;7888:1;7869:20;:43;;;-1:-1:-1;7907:5:0;;-1:-1:-1;;;;;7907:5:0;7893:10;:19;7869:43;7861:52;;;;;;29790:27:::1;;:::i;:::-;29820:21;29831:9;29820:10;:21::i;:::-;29790:51;;29852:53;;:::i;:::-;29908:34;:9;:32;:34::i;:::-;29852:90;;29961:20;:9;:18;:20::i;:::-;29953:89;;;;-1:-1:-1::0;;;29953:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30096:30:::0;;:46:::1;::::0;;::::1;::::0;:51:::1;::::0;30149:36;;30055:12:::1;::::0;30083:103:::1;::::0;:12:::1;:103::i;:::-;30055:131;;30206:30;30230:4;30213:22;;;;;;;;;;;;;;;;;;;;;;;;;30206:30;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;30206:30:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;::::0;;;::::1;::::0;;::::1;;;-1:-1:-1::0;;30206:30:0;;::::1;::::0;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;;::::1;::::0;-1:-1:-1;30206:30:0;;-1:-1:-1;;30206:30:0;;::::1;::::0;;::::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30206:30:0;::::1;30275:35:::0;::::1;::::0;30206:30;;-1:-1:-1;30256:55:0::1;::::0;30206:30;;30256:12:::1;:55::i;:::-;30249:62;;30354:16;:34;;;:45;;;:58;;;30346:4;:66;30324:161;;;;-1:-1:-1::0;;;30324:161:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30532:6;::::0;:36:::1;::::0;;-1:-1:-1;;;30532:36:0;;-1:-1:-1;;;;;30532:36:0;::::1;;::::0;::::1;::::0;;;30498:31:::1;::::0;-1:-1:-1;;;;;30532:6:0::1;::::0;:23:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;:6;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30532:36:0;30616:34:::1;::::0;::::1;::::0;:39:::1;::::0;;::::1;::::0;30657:28;;::::1;::::0;30532:36;;-1:-1:-1;30532:36:0;;30603:83:::1;::::0;30616:39;30603:12:::1;:83::i;:::-;:127;30581:213;;;;-1:-1:-1::0;;;30581:213:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30814:4;30807:11;;;;;;7924:1;29603:1223:::0;;;;;:::o;8635:241::-;7787:5;;8731:12;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8757:12:::1;8771:18;8793:6;-1:-1:-1::0;;;;;8793:19:0::1;8813:4;8793:25;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;8793:25:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:62;;;;8837:7;8829:16;;;::::0;::::1;;8863:5:::0;8635:241;-1:-1:-1;;;;8635:241:0:o;8031:131::-;7787:5;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8126:18;;8031:131::o;29303:25::-;;;-1:-1:-1;;;;;29303:25:0;;:::o;8573:54::-;7787:5;;-1:-1:-1;;;;;7787:5:0;7773:10;:19;7765:28;;;;;;8573:54::o;7568:20::-;;;-1:-1:-1;;;;;7568:20:0;;:::o;10041:123::-;10097:11;;:::i;:::-;10128:28;;;;;;;;10142:1;10128:28;;;;10150:4;10128:28;;;10121:35;;10041:123;;;;:::o;22395:375::-;22474:29;;:::i;:::-;22538:43;:4;:41;:43::i;:::-;22516:65;;22619:23;:4;:21;:23::i;:::-;22592:24;;;:50;22679:29;:4;:27;:29::i;:::-;22653:23;;;:55;22739:23;:4;:21;:23::i;:::-;22719:17;;;:43;:5;22395:375;-1:-1:-1;22395:375:0:o;10357:121::-;10455:8;;;;:15;10440:11;;:30;;10357:121::o;30834:491::-;30963:4;30931:12;30978:340;30999:11;;:18;30995:22;;30978:340;;;31039:39;;:::i;:::-;31081:11;;:14;;31093:1;;31081:14;;;;;;;;;;;;31039:56;;31114:4;:14;;;:19;;31132:1;31114:19;31110:197;;;31161:41;31185:4;:9;;;31196:4;31168:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31161:41;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31161:41:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31161:41:0;;;;;;;;;;;;;;;;;;-1:-1:-1;31161:41:0;;-1:-1:-1;;31161:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31161:41:0;;-1:-1:-1;31110:197:0;;;31250:41;31274:4;31280;:9;;;31257:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31250:41;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31250:41:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31250:41:0;;;;;;;;;;;;;;;;;;-1:-1:-1;31250:41:0;;-1:-1:-1;;31250:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31250:41:0;;-1:-1:-1;31110:197:0;-1:-1:-1;31019:3:0;;30978:340;;28466:354;28586:45;;:::i;:::-;28665:23;:4;:21;:23::i;:::-;28649:39;;28720:20;:4;:18;:20::i;:::-;28699:18;;;:41;28777:35;:4;:33;:35::i;:::-;28751:23;;;:61;:7;28466:354;-1:-1:-1;28466:354:0:o;28007:292::-;28080:22;;:::i;:::-;28149:16;:4;:14;:16::i;:::-;28128:38;;-1:-1:-1;;;;;28128:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;28115:51:0;;:10;28177:115;28198:10;;:17;28194:21;;28177:115;;;28253:27;:4;:25;:27::i;:::-;28237:10;;:13;;28248:1;;28237:13;;;;;;;;;;;;;;;:43;28217:3;;28177:115;;;;28007:292;;;:::o;22977:517::-;23056:30;;:::i;:::-;23124:20;:4;:18;:20::i;:::-;23099:45;;23180:20;:4;:18;:20::i;:::-;23155:22;;;:45;23231:33;:4;:31;:33::i;:::-;23211:6;:17;;:53;;;;23291:195;23347:72;23371:6;:17;;;:22;;;23395:6;:22;;;23354:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23347:72;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23347:72:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23347:72:0;;;;;;;;;;;;;;;;;;-1:-1:-1;23347:72:0;;-1:-1:-1;;23347:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23347:72:0;23438:22;;23312:163;;;23347:72;23312:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23291:195;;23312:163;;;;;;23291:195;;;;23312:163;23291:195;;;;;;;;;;;-1:-1:-1;;23291:195:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23291:195:0;;;;;;;;;;;;;;;;;;-1:-1:-1;23291:195:0;;-1:-1:-1;;23291:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23291:195:0;23277:11;;;:209;:6;22977:517;-1:-1:-1;22977:517:0:o;14050:331::-;14130:13;14111:4;14117:2;10271:4;10257;:11;;;:18;10238:4;:8;;;:15;:37;;10230:69;;;;;-1:-1:-1;;;10230:69:0;;;;;;;;;;;;-1:-1:-1;;;10230:69:0;;;;;;;;;;;;;;;14175:8:::1;::::0;;::::1;::::0;14211:11;;14337:25;;;;;;14331:32;10322:19;;;;;;;-1:-1:-1;14331:32:0;14050:331::o;26831:687::-;26943:37;;:::i;:::-;27011:20;:4;:18;:20::i;:::-;26998:33;;27060:29;:4;:27;:29::i;:::-;27042:7;:15;;:47;;;;27102:11;27120:7;:15;;;:36;;;:43;27116:1;:47;27102:61;;27189:321;27259:1;27252:3;:8;;27264:4;27251:17;27302:1;27295:3;:8;;27307:4;27294:17;27345:2;27338:3;:9;;27351:4;27337:18;27389:2;27382:3;:9;;27395:4;27381:18;27419:7;:10;;;27448:7;:15;;;:36;;;27210:289;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27189:321;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27189:321:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27189:321:0;;;;;;;;;;;;;;;;;;-1:-1:-1;27189:321:0;;-1:-1:-1;;27189:321:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27189:321:0;27174:12;;;:336;-1:-1:-1;27174:7:0;26831:687;-1:-1:-1;26831:687:0:o;12196:175::-;12256:12;12296:15;12306:4;12296:9;:15::i;:::-;12289:23;;12281:31;;12360:2;12340:15;12350:4;12340:9;:15::i;:::-;12333:23;;:29;;12323:40;;12196:175;-1:-1:-1;12196:175:0:o;27636:296::-;27713:26;;:::i;:::-;27764:20;:4;:18;:20::i;:::-;27752:32;;27812:15;:4;:13;:15::i;:::-;27795:32;;:14;;;:32;;;27863:1;-1:-1:-1;27838:86:0;;;;-1:-1:-1;;;27838:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21324:616;21434:34;;:::i;:::-;21500:20;:4;21516:3;21500:15;:20::i;:::-;21486:11;;;:34;21547:16;:4;:14;:16::i;:::-;-1:-1:-1;;;;;21531:32:0;;;21592:20;:4;:18;:20::i;:::-;21574:15;;;:38;21646:20;:4;:18;:20::i;:::-;21623;;;:43;21702:20;:4;:18;:20::i;:::-;21677:22;;;:45;21755:20;:4;:18;:20::i;:::-;21733:19;;;:42;21805:16;:4;:14;:16::i;:::-;-1:-1:-1;;;;;21786:35:0;:16;;;:35;21854:20;:4;:18;:20::i;:::-;21832:19;;;:42;21912:20;:4;:18;:20::i;:::-;21885:24;;;:47;:6;21324:616;-1:-1:-1;21324:616:0:o;25517:1137::-;25596:31;;:::i;:::-;25667:16;:4;:14;:16::i;:::-;25655:29;;-1:-1:-1;;;;;25655:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25640:44:0;;:12;25695:110;25716:12;;:19;25712:23;;25695:110;;;25775:18;:4;:16;:18::i;:::-;25757:12;;:15;;25770:1;;25757:15;;;;;;;;;;;;;;;:36;25737:3;;25695:110;;;-1:-1:-1;25833:11:0;;25891:16;25833:4;25891:14;:16::i;:::-;25877:31;;-1:-1:-1;;;;;25877:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25877:31:0;-1:-1:-1;25855:19:0;;;:53;25924:6;25919:126;25940:7;:19;;;:26;25936:1;:30;25919:126;;;26013:20;:4;:18;:20::i;:::-;25988:7;:19;;;26008:1;25988:22;;;;;;;;;;;;;;;;;:45;25968:3;;25919:126;;;;26075:16;:4;:14;:16::i;:::-;-1:-1:-1;;;;;26055:36:0;:17;;;:36;26125:17;:4;:15;:17::i;:::-;-1:-1:-1;;;;;26102:40:0;:20;;;:40;26175:18;:4;:16;:18::i;:::-;26153:19;;;:40;26221:28;:4;:26;:28::i;:::-;26204:14;;;:45;26275:11;;26348:12;;:19;26344:1;:23;-1:-1:-1;;;;;26330:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26330:38:0;-1:-1:-1;26299:28:0;;;:69;26379:19;;;26443:29;26379:4;26459:12;;;26443:15;:29::i;:::-;26409:7;:28;;;26438:1;26409:31;;;;;;;;;;;;;;;;;:63;26483:18;;;:11;26512:135;26533:12;;:19;26529:23;;26512:135;;;26612:23;26619:7;:12;;;26632:1;26619:15;;;;;;;;;;;;;;26612:23;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26612:23:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26612:23:0;;;;;;;;;;;;;;;;;;-1:-1:-1;26612:23:0;;-1:-1:-1;;26612:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26612:23:0;26574:28;;;;:35;;26607:1;26603:5;;;26574:35;;;;;;;;;;;;;;;:61;26554:3;;26512:135;;;;25517:1137;;;;;:::o;11839:172::-;11899:12;11939:14;11948:4;11939:8;:14::i;:::-;11932:22;;11924:30;;12001:1;11982:14;11991:4;11982:8;:14::i;:::-;11975:22;;:27;;11965:38;;11839:172;-1:-1:-1;11839:172:0:o;11541:142::-;11615:11;11597:4;11603:1;10271:4;10257;:11;;;:18;10238:4;:8;;;:15;:37;;10230:69;;;;;-1:-1:-1;;;10230:69:0;;;;;;;;;;;;-1:-1:-1;;;10230:69:0;;;;;;;;;;;;;;;11653:8:::1;::::0;::::1;::::0;11662:11;;11653:21;;;::::1;;;;;::::0;::::1;::::0;;10322:19;;;;;;;;11653:21:::1;;::::0;11541:142;-1:-1:-1;;11541:142:0:o;10979:154::-;11056:7;11083:42;11095:4;:8;;;11105:4;:11;;;11118:6;11083:11;:42::i;:::-;11076:49;10979:154;-1:-1:-1;;;10979:154:0:o;12559:175::-;12619:12;12659:15;12669:4;12659:9;:15::i;:::-;12652:23;;12644:31;;12723:2;12703:15;12713:4;12703:9;:15::i;:::-;12696:23;;:29;;12686:40;;12559:175;-1:-1:-1;12559:175:0:o;13799:243::-;13861:18;13910:15;13920:4;13910:9;:15::i;:::-;13900:26;;-1:-1:-1;;;;;13900:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13900:26:0;;13892:34;;13942:6;13937:98;13958:5;:12;13954:1;:16;13937:98;;;14008:14;14017:4;14008:8;:14::i;:::-;14003:20;;13992:5;13998:1;13992:8;;;;;;;;;;;:31;-1:-1:-1;;;;;13992:31:0;;;;;;;;-1:-1:-1;13972:3:0;;13937:98;;12922:179;12983:13;13025:15;13035:4;13025:9;:15::i;:::-;-1:-1:-1;;;;;13017:24:0;13009:32;;13090:2;13070:15;13080:4;13070:9;:15::i;:::-;-1:-1:-1;;;;;13062:24:0;:30;;13052:41;;12922:179;-1:-1:-1;12922:179:0:o;23920:941::-;24025:38;;:::i;:::-;24109:15;:4;:13;:15::i;:::-;24081:43;;;;;24135:719;;24212:4;24186:23;;;:30;24135:719;;;24238:15;:25;;;:30;;24267:1;24238:30;24234:620;;;24500:4;24475:22;;;:29;24234:620;;;24526:15;:25;;;:30;;24555:1;24526:30;24522:332;;;24604:18;:4;:16;:18::i;:::-;24573:28;;;:49;24522:332;;;24644:15;:25;;;:30;;24673:1;24644:30;24640:214;;;24726:20;:4;:18;:20::i;:::-;24691:32;;;:55;24640:214;;;24779:63;;-1:-1:-1;;;24779:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11141:392;11269:7;11289:24;;:::i;:::-;11484:2;11476:6;11468;11459;11454:2;11449:3;11445:12;11441:25;11435:4;11428:5;11417:70;-1:-1:-1;11516:9:0;;;-1:-1:-1;;;;11141:392:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://001bfb295ddf2c98c3a1a19c9aac9ef41c24672f7234947edbf86f10f1017536
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.