Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 12,597 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Verify Availabil... | 21746356 | 7 hrs ago | IN | 0 ETH | 0.00075507 | ||||
Verify Availabil... | 21746354 | 7 hrs ago | IN | 0 ETH | 0.00077269 | ||||
Verify Availabil... | 21746351 | 7 hrs ago | IN | 0 ETH | 0.00073303 | ||||
Verify Availabil... | 21746351 | 7 hrs ago | IN | 0 ETH | 0.00073315 | ||||
Verify Availabil... | 21746345 | 7 hrs ago | IN | 0 ETH | 0.00068104 | ||||
Verify Availabil... | 21746343 | 7 hrs ago | IN | 0 ETH | 0.00066239 | ||||
Verify Availabil... | 21746339 | 7 hrs ago | IN | 0 ETH | 0.00072934 | ||||
Verify Availabil... | 21742830 | 19 hrs ago | IN | 0 ETH | 0.00015154 | ||||
Verify Availabil... | 21742828 | 19 hrs ago | IN | 0 ETH | 0.00015021 | ||||
Verify Availabil... | 21742826 | 19 hrs ago | IN | 0 ETH | 0.00015514 | ||||
Verify Availabil... | 21742824 | 19 hrs ago | IN | 0 ETH | 0.00015701 | ||||
Verify Availabil... | 21742820 | 19 hrs ago | IN | 0 ETH | 0.00016175 | ||||
Verify Availabil... | 21742817 | 19 hrs ago | IN | 0 ETH | 0.00014137 | ||||
Verify Availabil... | 21742816 | 19 hrs ago | IN | 0 ETH | 0.00014241 | ||||
Verify Availabil... | 21742813 | 19 hrs ago | IN | 0 ETH | 0.0001332 | ||||
Verify Availabil... | 21742811 | 19 hrs ago | IN | 0 ETH | 0.00013206 | ||||
Verify Availabil... | 21739557 | 30 hrs ago | IN | 0 ETH | 0.00031117 | ||||
Verify Availabil... | 21739554 | 30 hrs ago | IN | 0 ETH | 0.0003316 | ||||
Verify Availabil... | 21739551 | 30 hrs ago | IN | 0 ETH | 0.00032803 | ||||
Verify Availabil... | 21739548 | 30 hrs ago | IN | 0 ETH | 0.0003311 | ||||
Verify Availabil... | 21739546 | 30 hrs ago | IN | 0 ETH | 0.00033754 | ||||
Verify Availabil... | 21739543 | 30 hrs ago | IN | 0 ETH | 0.00035212 | ||||
Verify Availabil... | 21739540 | 30 hrs ago | IN | 0 ETH | 0.00033825 | ||||
Verify Availabil... | 21739537 | 30 hrs ago | IN | 0 ETH | 0.00032606 | ||||
Verify Availabil... | 21739535 | 30 hrs ago | IN | 0 ETH | 0.00032552 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Committee
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; import "FactRegistry.sol"; import "IAvailabilityVerifier.sol"; import "Identity.sol"; contract Committee is FactRegistry, IAvailabilityVerifier, Identity { uint256 constant SIGNATURE_LENGTH = 32 * 2 + 1; // r(32) + s(32) + v(1). uint256 public signaturesRequired; mapping(address => bool) public isMember; /// @dev Contract constructor sets initial members and required number of signatures. /// @param committeeMembers List of committee members. /// @param numSignaturesRequired Number of required signatures. constructor(address[] memory committeeMembers, uint256 numSignaturesRequired) public { require(numSignaturesRequired > 0, "NO_REQUIRED_SIGNATURES"); require(numSignaturesRequired <= committeeMembers.length, "TOO_MANY_REQUIRED_SIGNATURES"); for (uint256 idx = 0; idx < committeeMembers.length; idx++) { require( !isMember[committeeMembers[idx]] && (committeeMembers[idx] != address(0)), "NON_UNIQUE_COMMITTEE_MEMBERS" ); isMember[committeeMembers[idx]] = true; } signaturesRequired = numSignaturesRequired; } function identify() external pure virtual override returns (string memory) { return "StarkWare_Committee_2022_2"; } /// @dev Verifies the availability proof. Reverts if invalid. /// An availability proof should have a form of a concatenation of ec-signatures by signatories. /// Signatures should be sorted by signatory address ascendingly. /// Signatures should be 65 bytes long. r(32) + s(32) + v(1). /// There should be at least the number of required signatures as defined in this contract /// and all signatures provided should be from signatories. /// /// See :sol:mod:`AvailabilityVerifiers` for more information on when this is used. /// /// @param claimHash The hash of the claim the committee is signing on. /// The format is keccak256(abi.encodePacked( /// newValidiumVaultRoot, validiumTreeHeight, newOrderRoot, orderTreeHeight sequenceNumber)) /// @param availabilityProofs Concatenated ec signatures by committee members. function verifyAvailabilityProof(bytes32 claimHash, bytes calldata availabilityProofs) external override { require( availabilityProofs.length >= signaturesRequired * SIGNATURE_LENGTH, "INVALID_AVAILABILITY_PROOF_LENGTH" ); uint256 offset = 0; address prevRecoveredAddress = address(0); for (uint256 proofIdx = 0; proofIdx < signaturesRequired; proofIdx++) { bytes32 r = bytesToBytes32(availabilityProofs, offset); bytes32 s = bytesToBytes32(availabilityProofs, offset + 32); uint8 v = uint8(availabilityProofs[offset + 64]); offset += SIGNATURE_LENGTH; address recovered = ecrecover(claimHash, v, r, s); // Signatures should be sorted off-chain before submitting to enable cheap uniqueness // check on-chain. require(isMember[recovered], "AVAILABILITY_PROVER_NOT_IN_COMMITTEE"); require(recovered > prevRecoveredAddress, "NON_SORTED_SIGNATURES"); prevRecoveredAddress = recovered; } registerFact(claimHash); } function bytesToBytes32(bytes memory array, uint256 offset) private pure returns (bytes32 result) { // Arrays are prefixed by a 256 bit length parameter. uint256 actualOffset = offset + 32; // Read the bytes32 from array memory. assembly { result := mload(add(array, actualOffset)) } } }
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; import "IQueryableFactRegistry.sol"; contract FactRegistry is IQueryableFactRegistry { // Mapping: fact hash -> true. mapping(bytes32 => bool) private verifiedFact; // Indicates whether the Fact Registry has at least one fact registered. bool anyFactRegistered = false; /* Checks if a fact has been verified. */ function isValid(bytes32 fact) external view override returns (bool) { return _factCheck(fact); } /* This is an internal method to check if the fact is already registered. In current implementation of FactRegistry it's identical to isValid(). But the check is against the local fact registry, So for a derived referral fact registry, it's not the same. */ function _factCheck(bytes32 fact) internal view returns (bool) { return verifiedFact[fact]; } function registerFact(bytes32 factHash) internal { // This function stores the fact hash in the mapping. verifiedFact[factHash] = true; // Mark first time off. if (!anyFactRegistered) { anyFactRegistered = true; } } /* Indicates whether at least one fact was registered. */ function hasRegisteredFact() external view override returns (bool) { return anyFactRegistered; } }
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; interface IAvailabilityVerifier { /* Verifies the availability proof. Reverts if invalid. */ function verifyAvailabilityProof(bytes32 claimHash, bytes calldata availabilityProofs) external; }
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; /* The Fact Registry design pattern is a way to separate cryptographic verification from the business logic of the contract flow. A fact registry holds a hash table of verified "facts" which are represented by a hash of claims that the registry hash check and found valid. This table may be queried by accessing the isValid() function of the registry with a given hash. In addition, each fact registry exposes a registry specific function for submitting new claims together with their proofs. The information submitted varies from one registry to the other depending of the type of fact requiring verification. For further reading on the Fact Registry design pattern see this `StarkWare blog post <https://medium.com/starkware/the-fact-registry-a64aafb598b6>`_. */ interface IFactRegistry { /* Returns true if the given fact was previously registered in the contract. */ function isValid(bytes32 fact) external view returns (bool); }
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; import "IFactRegistry.sol"; /* Extends the IFactRegistry interface with a query method that indicates whether the fact registry has successfully registered any fact or is still empty of such facts. */ interface IQueryableFactRegistry is IFactRegistry { /* Returns true if at least one fact has been registered. */ function hasRegisteredFact() external view returns (bool); }
/* Copyright 2019-2022 StarkWare Industries Ltd. Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.starkware.co/open-source-license/ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // SPDX-License-Identifier: Apache-2.0. pragma solidity ^0.6.12; interface Identity { /* Allows a caller to ensure that the provided address is of the expected type and version. */ function identify() external pure returns (string memory); }
{ "metadata": { "useLiteralContent": true }, "libraries": {}, "remappings": [], "optimizer": { "enabled": true, "runs": 100 }, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"committeeMembers","type":"address[]"},{"internalType":"uint256","name":"numSignaturesRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"hasRegisteredFact","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"identify","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"fact","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"signaturesRequired","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"claimHash","type":"bytes32"},{"internalType":"bytes","name":"availabilityProofs","type":"bytes"}],"name":"verifyAvailabilityProof","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001805460ff1916905534801561001a57600080fd5b506040516107f53803806107f58339818101604052604081101561003d57600080fd5b810190808051604051939291908464010000000082111561005d57600080fd5b90830190602082018581111561007257600080fd5b825186602082028301116401000000008211171561008f57600080fd5b82525081516020918201928201910280838360005b838110156100bc5781810151838201526020016100a4565b5050505091909101604052506020015191505080610121576040805162461bcd60e51b815260206004820152601660248201527f4e4f5f52455155495245445f5349474e41545552455300000000000000000000604482015290519081900360640190fd5b8151811115610177576040805162461bcd60e51b815260206004820152601c60248201527f544f4f5f4d414e595f52455155495245445f5349474e41545552455300000000604482015290519081900360640190fd5b60005b825181101561028a576003600084838151811061019357fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161580156101ed575060006001600160a01b03168382815181106101d957fe5b60200260200101516001600160a01b031614155b61023e576040805162461bcd60e51b815260206004820152601c60248201527f4e4f4e5f554e495155455f434f4d4d49545445455f4d454d4245525300000000604482015290519081900360640190fd5b60016003600085848151811061025057fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161017a565b50600255506105578061029e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063504f7f6f146100675780636a938567146100e0578063a230c52414610111578063ce757d2914610137578063d6354e1514610151578063eeb7286614610159575b600080fd5b6100de6004803603604081101561007d57600080fd5b8135919081019060408101602082013564010000000081111561009f57600080fd5b8201836020820111156100b157600080fd5b803590602001918460018302840111640100000000831117156100d357600080fd5b5090925090506101d6565b005b6100fd600480360360208110156100f657600080fd5b503561041f565b604080519115158252519081900360200190f35b6100fd6004803603602081101561012757600080fd5b50356001600160a01b0316610430565b61013f610445565b60408051918252519081900360200190f35b6100fd61044b565b610161610454565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019b578181015183820152602001610183565b50505050905090810190601f1680156101c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60025460410281101561021a5760405162461bcd60e51b81526004018080602001828103825260218152602001806104dd6021913960400191505060405180910390fd5b60008060005b60025481101561040e57600061026d86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925061048b915050565b905060006102b487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801905061048b565b905060008787876040018181106102c757fe5b9050013560f81c60f81b60f81c9050604186019550600060018a83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610338573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526003602052919091205490925060ff16905061039f5760405162461bcd60e51b81526004018080602001828103825260248152602001806104fe6024913960400191505060405180910390fd5b856001600160a01b0316816001600160a01b0316116103fd576040805162461bcd60e51b81526020600482015260156024820152744e4f4e5f534f525445445f5349474e41545552455360581b604482015290519081900360640190fd5b945050600190920191506102209050565b5061041885610493565b5050505050565b600061042a826104c7565b92915050565b60036020526000908152604090205460ff1681565b60025481565b60015460ff1690565b60408051808201909152601a81527f537461726b576172655f436f6d6d69747465655f323032325f32000000000000602082015290565b016020015190565b6000818152602081905260409020805460ff191660019081179091555460ff166104c4576001805460ff1916811790555b50565b60009081526020819052604090205460ff169056fe494e56414c49445f415641494c4142494c4954595f50524f4f465f4c454e475448415641494c4142494c4954595f50524f5645525f4e4f545f494e5f434f4d4d4954544545a2646970667358221220be886fe183147489f2edd227c05cba8d30e086a17fcb8f4a69ffa62013b0890464736f6c634300060c0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000006000000000000000000000000696cc7615a50cf12d1d1b38bf18a5606e970829600000000000000000000000081165b6504520416487e5b4935865b4d3eeaa6e5000000000000000000000000a6d068de0da2dc1becab509b118cb88723f72b6a0000000000000000000000000cbb676d12745948f75af3a172cb7e4a4f8546e8000000000000000000000000b0d71ff040a941bb9ca8453044634eebce5a053d0000000000000000000000008f3310cc6951ac11f2b125fc8ac2dfa133a9498c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063504f7f6f146100675780636a938567146100e0578063a230c52414610111578063ce757d2914610137578063d6354e1514610151578063eeb7286614610159575b600080fd5b6100de6004803603604081101561007d57600080fd5b8135919081019060408101602082013564010000000081111561009f57600080fd5b8201836020820111156100b157600080fd5b803590602001918460018302840111640100000000831117156100d357600080fd5b5090925090506101d6565b005b6100fd600480360360208110156100f657600080fd5b503561041f565b604080519115158252519081900360200190f35b6100fd6004803603602081101561012757600080fd5b50356001600160a01b0316610430565b61013f610445565b60408051918252519081900360200190f35b6100fd61044b565b610161610454565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019b578181015183820152602001610183565b50505050905090810190601f1680156101c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60025460410281101561021a5760405162461bcd60e51b81526004018080602001828103825260218152602001806104dd6021913960400191505060405180910390fd5b60008060005b60025481101561040e57600061026d86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925061048b915050565b905060006102b487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801905061048b565b905060008787876040018181106102c757fe5b9050013560f81c60f81b60f81c9050604186019550600060018a83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610338573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526003602052919091205490925060ff16905061039f5760405162461bcd60e51b81526004018080602001828103825260248152602001806104fe6024913960400191505060405180910390fd5b856001600160a01b0316816001600160a01b0316116103fd576040805162461bcd60e51b81526020600482015260156024820152744e4f4e5f534f525445445f5349474e41545552455360581b604482015290519081900360640190fd5b945050600190920191506102209050565b5061041885610493565b5050505050565b600061042a826104c7565b92915050565b60036020526000908152604090205460ff1681565b60025481565b60015460ff1690565b60408051808201909152601a81527f537461726b576172655f436f6d6d69747465655f323032325f32000000000000602082015290565b016020015190565b6000818152602081905260409020805460ff191660019081179091555460ff166104c4576001805460ff1916811790555b50565b60009081526020819052604090205460ff169056fe494e56414c49445f415641494c4142494c4954595f50524f4f465f4c454e475448415641494c4142494c4954595f50524f5645525f4e4f545f494e5f434f4d4d4954544545a2646970667358221220be886fe183147489f2edd227c05cba8d30e086a17fcb8f4a69ffa62013b0890464736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000006000000000000000000000000696cc7615a50cf12d1d1b38bf18a5606e970829600000000000000000000000081165b6504520416487e5b4935865b4d3eeaa6e5000000000000000000000000a6d068de0da2dc1becab509b118cb88723f72b6a0000000000000000000000000cbb676d12745948f75af3a172cb7e4a4f8546e8000000000000000000000000b0d71ff040a941bb9ca8453044634eebce5a053d0000000000000000000000008f3310cc6951ac11f2b125fc8ac2dfa133a9498c
-----Decoded View---------------
Arg [0] : committeeMembers (address[]): 0x696cC7615A50CF12d1d1B38bF18A5606e9708296,0x81165b6504520416487E5b4935865b4D3eeaa6e5,0xA6d068DE0da2Dc1BeCaB509B118CB88723f72b6A,0x0cbb676d12745948f75aF3A172cb7E4A4f8546e8,0xB0d71Ff040A941bB9CA8453044634EebCE5A053D,0x8f3310cc6951AC11F2B125fC8AC2dfA133A9498c
Arg [1] : numSignaturesRequired (uint256): 3
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [3] : 000000000000000000000000696cc7615a50cf12d1d1b38bf18a5606e9708296
Arg [4] : 00000000000000000000000081165b6504520416487e5b4935865b4d3eeaa6e5
Arg [5] : 000000000000000000000000a6d068de0da2dc1becab509b118cb88723f72b6a
Arg [6] : 0000000000000000000000000cbb676d12745948f75af3a172cb7e4a4f8546e8
Arg [7] : 000000000000000000000000b0d71ff040a941bb9ca8453044634eebce5a053d
Arg [8] : 0000000000000000000000008f3310cc6951ac11f2b125fc8ac2dfa133a9498c
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.