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
Contract Source Code Verified (Exact Match)
Contract Name:
Supervisor
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; import "ECDSA.sol"; /// @title Supervisor is the guardian of YPool. It requires multiple validators to valid /// the requests from users and workers and sign on them if valid. contract Supervisor { using ECDSA for bytes32; /* ========== STATE VARIABLES ========== */ bytes32 public constant CLAIM_IDENTIFIER = 'SWAPPER_CLAIM'; bytes32 public constant SET_THRESHOLD_IDENTIFIER = 'SET_THRESHOLD'; bytes32 public constant SET_VALIDATOR_IDENTIFIER = 'SET_VALIDATOR'; bytes32 public constant LOCK_CLOSE_SWAP_AND_REFUND_IDENTIFIER = 'LOCK_CLOSE_SWAP_AND_REFUND'; bytes32 public constant BATCH_CLAIM_IDENTIFIER = 'BATCH_CLAIM'; bytes32 public constant VALIDATE_SWAP_IDENTIFIER = 'VALIDATE_SWAP_IDENTIFIER'; // the chain ID contract located at uint32 public chainId; // check if the address is one of the validators mapping (address => bool) public validators; // number of validators uint256 private validatorsNum; // threshold to pass the signature validation uint256 public threshold; // current nonce for write functions uint256 public nonce; /// @dev Constuctor with chainId / validators / threshold /// @param _chainId The chain ID located with /// @param _validators Initial validator addresses /// @param _threshold Initial threshold to pass the request validation constructor(uint32 _chainId, address [] memory _validators, uint256 _threshold) { chainId = _chainId; for (uint256 i; i < _validators.length; i++) { validators[_validators[i]] = true; } validatorsNum = _validators.length; require(_threshold <= validatorsNum, "ERR_INVALID_THRESHOLD"); threshold = _threshold; } /* ========== VIEW FUNCTIONS ========== */ /// @notice Check if there are enough signed signatures to the signature hash /// @param sigIdHash The signature hash to be signed /// @param signatures Signed signatures by different validators function checkSignatures(bytes32 sigIdHash, bytes[] memory signatures) public view { require(signatures.length >= threshold, "ERR_NOT_ENOUGH_SIGNATURES"); address prevAddress = address(0); for (uint i; i < threshold; i++) { address recovered = sigIdHash.recover(signatures[i]); require(validators[recovered], "ERR_NOT_VALIDATOR"); require(recovered > prevAddress, "ERR_WRONG_SIGNER_ORDER"); prevAddress = recovered; } } /* ========== WRITE FUNCTIONS ========== */ /// @notice Change `threshold` by providing a correct nonce and enough signatures from validators /// @param _threshold New `threshold` /// @param _nonce The nonce to be processed /// @param signatures Signed signatures by validators function setThreshold(uint256 _threshold, uint256 _nonce, bytes[] memory signatures) external { require(signatures.length >= threshold, "ERR_NOT_ENOUGH_SIGNATURES"); require(_nonce == nonce, "ERR_INVALID_NONCE"); require(_threshold > 0, "ERR_INVALID_THRESHOLD"); require(_threshold <= validatorsNum, "ERR_INVALID_THRESHOLD"); bytes32 sigId = keccak256(abi.encodePacked(SET_THRESHOLD_IDENTIFIER, address(this), chainId, _threshold, _nonce)); bytes32 sigIdHash = sigId.toEthSignedMessageHash(); checkSignatures(sigIdHash, signatures); threshold = _threshold; nonce++; } /// @notice Set / remove the validator address to be part of signatures committee /// @param _validator The address to add or remove /// @param flag `true` to add, `false` to remove /// @param _nonce The nonce to be processed /// @param signatures Signed signatures by validators function setValidator(address _validator, bool flag, uint256 _nonce, bytes[] memory signatures) external { require(_validator != address(0), "ERR_INVALID_VALIDATOR"); require(signatures.length >= threshold, "ERR_NOT_ENOUGH_SIGNATURES"); require(_nonce == nonce, "ERR_INVALID_NONCE"); require(flag != validators[_validator], "ERR_OPERATION_TO_VALIDATOR"); bytes32 sigId = keccak256(abi.encodePacked(SET_VALIDATOR_IDENTIFIER, address(this), chainId, _validator, flag, _nonce)); bytes32 sigIdHash = sigId.toEthSignedMessageHash(); checkSignatures(sigIdHash, signatures); if (validators[_validator]) { validatorsNum--; validators[_validator] = false; if (validatorsNum < threshold) threshold--; } else { validatorsNum++; validators[_validator] = true; } nonce++; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint32","name":"_chainId","type":"uint32"},{"internalType":"address[]","name":"_validators","type":"address[]"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BATCH_CLAIM_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLAIM_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK_CLOSE_SWAP_AND_REFUND_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SET_THRESHOLD_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SET_VALIDATOR_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VALIDATE_SWAP_IDENTIFIER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"sigIdHash","type":"bytes32"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"checkSignatures","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"},{"internalType":"bool","name":"flag","type":"bool"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200115a3803806200115a833981016040819052620000349162000146565b6000805463ffffffff191663ffffffff85161781555b8251811015620000c15760018060008584815181106200007a57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000b88162000242565b9150506200004a565b50815160028190558111156200011d5760405162461bcd60e51b815260206004820152601560248201527f4552525f494e56414c49445f5448524553484f4c440000000000000000000000604482015260640160405180910390fd5b60035550620002809050565b80516001600160a01b03811681146200014157600080fd5b919050565b6000806000606084860312156200015b578283fd5b835163ffffffff811681146200016f578384fd5b602085810151919450906001600160401b03808211156200018e578485fd5b818701915087601f830112620001a2578485fd5b815181811115620001b757620001b76200026a565b838102604051601f19603f83011681018181108582111715620001de57620001de6200026a565b604052828152858101935084860182860187018c1015620001fd578889fd5b8895505b838610156200022a57620002158162000129565b85526001959095019493860193860162000201565b50809750505050505050604084015190509250925092565b60006000198214156200026357634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b610eca80620002906000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063935d91dd1161008c578063da8bd3fe11610066578063da8bd3fe146101b2578063f7ca8023146101c5578063fa52c7d8146101da578063faf55b5c1461020d576100cf565b8063935d91dd146101715780639a8a059214610184578063affed0e0146101a9576100cf565b80633c0e39bf146100d457806342cde4e8146100fe57806351f61efa146101075780635938c87d1461011e5780635a0f88301461013557806374892a721461014a575b600080fd5b6100eb6c14d15517d512149154d213d311609a1b81565b6040519081526020015b60405180910390f35b6100eb60035481565b6100eb6c29a2aa2fab20a624a220aa27a960991b81565b6100eb6c535741505045525f434c41494d60981b81565b610148610143366004610d3b565b610234565b005b6100eb7f4c4f434b5f434c4f53455f535741505f414e445f524546554e4400000000000081565b61014861017f366004610d80565b61037d565b6000546101949063ffffffff1681565b60405163ffffffff90911681526020016100f5565b6100eb60045481565b6101486101c0366004610ccf565b610525565b6100eb6a42415443485f434c41494d60a81b81565b6101fd6101e8366004610cae565b60016020526000908152604090205460ff1681565b60405190151581526020016100f5565b6100eb7f56414c49444154455f535741505f4944454e544946494552000000000000000081565b600354815110156102605760405162461bcd60e51b815260040161025790610dce565b60405180910390fd5b6000805b6003548110156103775760006102aa84838151811061029357634e487b7160e01b600052603260045260246000fd5b6020026020010151866107bf90919063ffffffff16565b6001600160a01b03811660009081526001602052604090205490915060ff166103095760405162461bcd60e51b815260206004820152601160248201527022a9292fa727aa2fab20a624a220aa27a960791b6044820152606401610257565b826001600160a01b0316816001600160a01b0316116103635760405162461bcd60e51b815260206004820152601660248201527522a9292faba927a723afa9a4a3a722a92fa7a92222a960511b6044820152606401610257565b91508061036f81610e4d565b915050610264565b50505050565b600354815110156103a05760405162461bcd60e51b815260040161025790610dce565b60045482146103e55760405162461bcd60e51b81526020600482015260116024820152704552525f494e56414c49445f4e4f4e434560781b6044820152606401610257565b6000831161042d5760405162461bcd60e51b815260206004820152601560248201527411549497d253959053125117d512149154d213d311605a1b6044820152606401610257565b6002548311156104775760405162461bcd60e51b815260206004820152601560248201527411549497d253959053125117d512149154d213d311605a1b6044820152606401610257565b60008054604080516c14d15517d512149154d213d311609a1b60208201523060601b6bffffffffffffffffffffffff19169181019190915260e09190911b6001600160e01b0319166054820152605881018590526078810184905260980160405160208183030381529060405280519060200120905060006104f8826107e3565b90506105048184610234565b60038590556004805490600061051983610e4d565b91905055505050505050565b6001600160a01b0384166105735760405162461bcd60e51b815260206004820152601560248201527422a9292fa4a72b20a624a22fab20a624a220aa27a960591b6044820152606401610257565b600354815110156105965760405162461bcd60e51b815260040161025790610dce565b60045482146105db5760405162461bcd60e51b81526020600482015260116024820152704552525f494e56414c49445f4e4f4e434560781b6044820152606401610257565b6001600160a01b03841660009081526001602052604090205460ff161515831515141561064a5760405162461bcd60e51b815260206004820152601a60248201527f4552525f4f5045524154494f4e5f544f5f56414c494441544f520000000000006044820152606401610257565b60008054604080516c29a2aa2fab20a624a220aa27a960991b602082015230606090811b6bffffffffffffffffffffffff199081169383019390935260e09390931b6001600160e01b03191660548201529187901b16605882015284151560f81b606c820152606d8101849052608d0160405160208183030381529060405280519060200120905060006106dd826107e3565b90506106e98184610234565b6001600160a01b03861660009081526001602052604090205460ff1615610766576002805490600061071a83610e36565b90915550506001600160a01b0386166000908152600160205260409020805460ff191690556003546002541015610761576003805490600061075b83610e36565b91905055505b6107a2565b6002805490600061077683610e4d565b90915550506001600160a01b0386166000908152600160208190526040909120805460ff191690911790555b600480549060006107b283610e4d565b9190505550505050505050565b60008060006107ce8585610837565b915091506107db816108a7565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c016040516020818303038152906040528051906020012090505b919050565b60008082516041141561086e5760208301516040840151606085015160001a61086287828585610aad565b945094505050506108a0565b825160401415610898576020830151604084015161088d868383610b9a565b9350935050506108a0565b506000905060025b9250929050565b60008160048111156108c957634e487b7160e01b600052602160045260246000fd5b14156108d457610aaa565b60018160048111156108f657634e487b7160e01b600052602160045260246000fd5b14156109445760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610257565b600281600481111561096657634e487b7160e01b600052602160045260246000fd5b14156109b45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610257565b60038160048111156109d657634e487b7160e01b600052602160045260246000fd5b1415610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610257565b6004816004811115610a5157634e487b7160e01b600052602160045260246000fd5b1415610aaa5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610257565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610ae45750600090506003610b91565b8460ff16601b14158015610afc57508460ff16601c14155b15610b0d5750600090506004610b91565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b61573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b8a57600060019250925050610b91565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01610bbb87828885610aad565b935093505050935093915050565b80356001600160a01b038116811461083257600080fd5b6000601f8381840112610bf1578182fd5b8235602067ffffffffffffffff80831115610c0e57610c0e610e7e565b610c1b8283850201610e05565b83815282810190878401875b86811015610c9f5781358a018b603f820112610c4157898afd5b86810135604087821115610c5757610c57610e7e565b610c68828c01601f19168a01610e05565b8281528e82848601011115610c7b578c8dfd5b828285018b83013791820189018c9052508552509285019290850190600101610c27565b50909998505050505050505050565b600060208284031215610cbf578081fd5b610cc882610bc9565b9392505050565b60008060008060808587031215610ce4578283fd5b610ced85610bc9565b935060208501358015158114610d01578384fd5b925060408501359150606085013567ffffffffffffffff811115610d23578182fd5b610d2f87828801610be0565b91505092959194509250565b60008060408385031215610d4d578182fd5b82359150602083013567ffffffffffffffff811115610d6a578182fd5b610d7685828601610be0565b9150509250929050565b600080600060608486031215610d94578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610db8578182fd5b610dc486828701610be0565b9150509250925092565b60208082526019908201527f4552525f4e4f545f454e4f5547485f5349474e41545552455300000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e2e57610e2e610e7e565b604052919050565b600081610e4557610e45610e68565b506000190190565b6000600019821415610e6157610e61610e68565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220e90909ba57af2f10d6f4632347a4ca4d1c361ef6e2d69d3c647765e2705f870164736f6c634300080200330000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b7702af3cffa4c5bda7ed48b51351dd437343c1b0000000000000000000000000589312aaefb4155d792e4832a00f8e28222bae4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063935d91dd1161008c578063da8bd3fe11610066578063da8bd3fe146101b2578063f7ca8023146101c5578063fa52c7d8146101da578063faf55b5c1461020d576100cf565b8063935d91dd146101715780639a8a059214610184578063affed0e0146101a9576100cf565b80633c0e39bf146100d457806342cde4e8146100fe57806351f61efa146101075780635938c87d1461011e5780635a0f88301461013557806374892a721461014a575b600080fd5b6100eb6c14d15517d512149154d213d311609a1b81565b6040519081526020015b60405180910390f35b6100eb60035481565b6100eb6c29a2aa2fab20a624a220aa27a960991b81565b6100eb6c535741505045525f434c41494d60981b81565b610148610143366004610d3b565b610234565b005b6100eb7f4c4f434b5f434c4f53455f535741505f414e445f524546554e4400000000000081565b61014861017f366004610d80565b61037d565b6000546101949063ffffffff1681565b60405163ffffffff90911681526020016100f5565b6100eb60045481565b6101486101c0366004610ccf565b610525565b6100eb6a42415443485f434c41494d60a81b81565b6101fd6101e8366004610cae565b60016020526000908152604090205460ff1681565b60405190151581526020016100f5565b6100eb7f56414c49444154455f535741505f4944454e544946494552000000000000000081565b600354815110156102605760405162461bcd60e51b815260040161025790610dce565b60405180910390fd5b6000805b6003548110156103775760006102aa84838151811061029357634e487b7160e01b600052603260045260246000fd5b6020026020010151866107bf90919063ffffffff16565b6001600160a01b03811660009081526001602052604090205490915060ff166103095760405162461bcd60e51b815260206004820152601160248201527022a9292fa727aa2fab20a624a220aa27a960791b6044820152606401610257565b826001600160a01b0316816001600160a01b0316116103635760405162461bcd60e51b815260206004820152601660248201527522a9292faba927a723afa9a4a3a722a92fa7a92222a960511b6044820152606401610257565b91508061036f81610e4d565b915050610264565b50505050565b600354815110156103a05760405162461bcd60e51b815260040161025790610dce565b60045482146103e55760405162461bcd60e51b81526020600482015260116024820152704552525f494e56414c49445f4e4f4e434560781b6044820152606401610257565b6000831161042d5760405162461bcd60e51b815260206004820152601560248201527411549497d253959053125117d512149154d213d311605a1b6044820152606401610257565b6002548311156104775760405162461bcd60e51b815260206004820152601560248201527411549497d253959053125117d512149154d213d311605a1b6044820152606401610257565b60008054604080516c14d15517d512149154d213d311609a1b60208201523060601b6bffffffffffffffffffffffff19169181019190915260e09190911b6001600160e01b0319166054820152605881018590526078810184905260980160405160208183030381529060405280519060200120905060006104f8826107e3565b90506105048184610234565b60038590556004805490600061051983610e4d565b91905055505050505050565b6001600160a01b0384166105735760405162461bcd60e51b815260206004820152601560248201527422a9292fa4a72b20a624a22fab20a624a220aa27a960591b6044820152606401610257565b600354815110156105965760405162461bcd60e51b815260040161025790610dce565b60045482146105db5760405162461bcd60e51b81526020600482015260116024820152704552525f494e56414c49445f4e4f4e434560781b6044820152606401610257565b6001600160a01b03841660009081526001602052604090205460ff161515831515141561064a5760405162461bcd60e51b815260206004820152601a60248201527f4552525f4f5045524154494f4e5f544f5f56414c494441544f520000000000006044820152606401610257565b60008054604080516c29a2aa2fab20a624a220aa27a960991b602082015230606090811b6bffffffffffffffffffffffff199081169383019390935260e09390931b6001600160e01b03191660548201529187901b16605882015284151560f81b606c820152606d8101849052608d0160405160208183030381529060405280519060200120905060006106dd826107e3565b90506106e98184610234565b6001600160a01b03861660009081526001602052604090205460ff1615610766576002805490600061071a83610e36565b90915550506001600160a01b0386166000908152600160205260409020805460ff191690556003546002541015610761576003805490600061075b83610e36565b91905055505b6107a2565b6002805490600061077683610e4d565b90915550506001600160a01b0386166000908152600160208190526040909120805460ff191690911790555b600480549060006107b283610e4d565b9190505550505050505050565b60008060006107ce8585610837565b915091506107db816108a7565b509392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c016040516020818303038152906040528051906020012090505b919050565b60008082516041141561086e5760208301516040840151606085015160001a61086287828585610aad565b945094505050506108a0565b825160401415610898576020830151604084015161088d868383610b9a565b9350935050506108a0565b506000905060025b9250929050565b60008160048111156108c957634e487b7160e01b600052602160045260246000fd5b14156108d457610aaa565b60018160048111156108f657634e487b7160e01b600052602160045260246000fd5b14156109445760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610257565b600281600481111561096657634e487b7160e01b600052602160045260246000fd5b14156109b45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610257565b60038160048111156109d657634e487b7160e01b600052602160045260246000fd5b1415610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610257565b6004816004811115610a5157634e487b7160e01b600052602160045260246000fd5b1415610aaa5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610257565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610ae45750600090506003610b91565b8460ff16601b14158015610afc57508460ff16601c14155b15610b0d5750600090506004610b91565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610b61573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610b8a57600060019250925050610b91565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01610bbb87828885610aad565b935093505050935093915050565b80356001600160a01b038116811461083257600080fd5b6000601f8381840112610bf1578182fd5b8235602067ffffffffffffffff80831115610c0e57610c0e610e7e565b610c1b8283850201610e05565b83815282810190878401875b86811015610c9f5781358a018b603f820112610c4157898afd5b86810135604087821115610c5757610c57610e7e565b610c68828c01601f19168a01610e05565b8281528e82848601011115610c7b578c8dfd5b828285018b83013791820189018c9052508552509285019290850190600101610c27565b50909998505050505050505050565b600060208284031215610cbf578081fd5b610cc882610bc9565b9392505050565b60008060008060808587031215610ce4578283fd5b610ced85610bc9565b935060208501358015158114610d01578384fd5b925060408501359150606085013567ffffffffffffffff811115610d23578182fd5b610d2f87828801610be0565b91505092959194509250565b60008060408385031215610d4d578182fd5b82359150602083013567ffffffffffffffff811115610d6a578182fd5b610d7685828601610be0565b9150509250929050565b600080600060608486031215610d94578283fd5b8335925060208401359150604084013567ffffffffffffffff811115610db8578182fd5b610dc486828701610be0565b9150509250925092565b60208082526019908201527f4552525f4e4f545f454e4f5547485f5349474e41545552455300000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e2e57610e2e610e7e565b604052919050565b600081610e4557610e45610e68565b506000190190565b6000600019821415610e6157610e61610e68565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220e90909ba57af2f10d6f4632347a4ca4d1c361ef6e2d69d3c647765e2705f870164736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b7702af3cffa4c5bda7ed48b51351dd437343c1b0000000000000000000000000589312aaefb4155d792e4832a00f8e28222bae4
-----Decoded View---------------
Arg [0] : _chainId (uint32): 1
Arg [1] : _validators (address[]): 0xb7702aF3CFFa4C5bDA7Ed48b51351Dd437343C1B,0x0589312AAEFb4155D792e4832a00f8e28222bae4
Arg [2] : _threshold (uint256): 1
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [4] : 000000000000000000000000b7702af3cffa4c5bda7ed48b51351dd437343c1b
Arg [5] : 0000000000000000000000000589312aaefb4155d792e4832a00f8e28222bae4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
SCROLL | 100.00% | $2,660.74 | 0.000104 | $0.276717 |
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.