Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 270 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Join Group | 6837431 | 2 hrs ago | IN | 0 ETH | 0.0172697 | ||||
Send Feedback | 6835694 | 9 hrs ago | IN | 0 ETH | 0.00081997 | ||||
Join Group | 6835692 | 9 hrs ago | IN | 0 ETH | 0.00073368 | ||||
Send Feedback | 6835688 | 9 hrs ago | IN | 0 ETH | 0.00089239 | ||||
Join Group | 6835666 | 9 hrs ago | IN | 0 ETH | 0.00063098 | ||||
Join Group | 6835657 | 9 hrs ago | IN | 0 ETH | 0.00063574 | ||||
Join Group | 6835654 | 9 hrs ago | IN | 0 ETH | 0.00054118 | ||||
Join Group | 6835626 | 10 hrs ago | IN | 0 ETH | 0.00047732 | ||||
Join Group | 6825166 | 2 days ago | IN | 0 ETH | 0.38688484 | ||||
Join Group | 6821435 | 2 days ago | IN | 0 ETH | 0.09290324 | ||||
Send Feedback | 6818844 | 3 days ago | IN | 0 ETH | 0.1805091 | ||||
Join Group | 6818842 | 3 days ago | IN | 0 ETH | 0.09173145 | ||||
Send Feedback | 6818348 | 3 days ago | IN | 0 ETH | 0.15680502 | ||||
Join Group | 6818342 | 3 days ago | IN | 0 ETH | 0.18490127 | ||||
Join Group | 6812675 | 4 days ago | IN | 0 ETH | 0.09600794 | ||||
Send Feedback | 6808629 | 4 days ago | IN | 0 ETH | 0.0474028 | ||||
Join Group | 6808623 | 4 days ago | IN | 0 ETH | 0.03877125 | ||||
Join Group | 6808160 | 4 days ago | IN | 0 ETH | 0.06535433 | ||||
Send Feedback | 6804204 | 5 days ago | IN | 0 ETH | 0.09658794 | ||||
Join Group | 6804201 | 5 days ago | IN | 0 ETH | 0.06698704 | ||||
Send Feedback | 6797136 | 6 days ago | IN | 0 ETH | 0.05856675 | ||||
Join Group | 6797133 | 6 days ago | IN | 0 ETH | 0.04187827 | ||||
Join Group | 6788133 | 7 days ago | IN | 0 ETH | 0.05269496 | ||||
Send Feedback | 6786382 | 8 days ago | IN | 0 ETH | 0.12429173 | ||||
Join Group | 6786356 | 8 days ago | IN | 0 ETH | 0.07484885 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xC313AFEB...B9aA5701A The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Feedback
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.23; import "@semaphore-protocol/contracts/interfaces/ISemaphore.sol"; contract Feedback { ISemaphore public semaphore; uint256 public groupId; constructor(address semaphoreAddress) { semaphore = ISemaphore(semaphoreAddress); groupId = semaphore.createGroup(address(this)); } function joinGroup(uint256 identityCommitment) external { semaphore.addMember(groupId, identityCommitment); } function sendFeedback( uint256 merkleTreeDepth, uint256 merkleTreeRoot, uint256 nullifier, uint256 feedback, uint256[8] calldata points ) external { ISemaphore.SemaphoreProof memory proof = ISemaphore.SemaphoreProof( merkleTreeDepth, merkleTreeRoot, nullifier, feedback, groupId, points ); semaphore.validateProof(groupId, proof); } }
//SPDX-License-Identifier: MIT pragma solidity 0.8.23; /// @title Semaphore contract interface. interface ISemaphore { error Semaphore__GroupHasNoMembers(); error Semaphore__MerkleTreeDepthIsNotSupported(); error Semaphore__MerkleTreeRootIsExpired(); error Semaphore__MerkleTreeRootIsNotPartOfTheGroup(); error Semaphore__YouAreUsingTheSameNullifierTwice(); error Semaphore__InvalidProof(); /// It defines all the group parameters used by Semaphore.sol. struct Group { uint256 merkleTreeDuration; mapping(uint256 => uint256) merkleRootCreationDates; mapping(uint256 => bool) nullifiers; } /// It defines all the Semaphore proof parameters used by Semaphore.sol. struct SemaphoreProof { uint256 merkleTreeDepth; uint256 merkleTreeRoot; uint256 nullifier; uint256 message; uint256 scope; uint256[8] points; } /// @dev Event emitted when the Merkle tree duration of a group is updated. /// @param groupId: Id of the group. /// @param oldMerkleTreeDuration: Old Merkle tree duration of the group. /// @param newMerkleTreeDuration: New Merkle tree duration of the group. event GroupMerkleTreeDurationUpdated( uint256 indexed groupId, uint256 oldMerkleTreeDuration, uint256 newMerkleTreeDuration ); /// @dev Event emitted when a Semaphore proof is validated. /// @param groupId: Id of the group. /// @param merkleTreeDepth: Depth of the Merkle tree. /// @param merkleTreeRoot: Root of the Merkle tree. /// @param nullifier: Nullifier. /// @param message: Semaphore message. /// @param scope: Scope. /// @param points: Zero-knowledge points. event ProofValidated( uint256 indexed groupId, uint256 merkleTreeDepth, uint256 indexed merkleTreeRoot, uint256 nullifier, uint256 message, uint256 indexed scope, uint256[8] points ); /// @dev Returns the current value of the group counter. /// @return The current group counter value. function groupCounter() external view returns (uint256); /// @dev See {SemaphoreGroups-_createGroup}. function createGroup() external returns (uint256); /// @dev See {SemaphoreGroups-_createGroup}. function createGroup(address admin) external returns (uint256); /// @dev It creates a group with a custom Merkle tree duration. /// @param admin: Admin of the group. It can be an Ethereum account or a smart contract. /// @param merkleTreeDuration: Merkle tree duration. /// @return Id of the group. function createGroup(address admin, uint256 merkleTreeDuration) external returns (uint256); /// @dev See {SemaphoreGroups-_updateGroupAdmin}. function updateGroupAdmin(uint256 groupId, address newAdmin) external; /// @dev See {SemaphoreGroups-_acceptGroupAdmin}. function acceptGroupAdmin(uint256 groupId) external; /// @dev Updates the group Merkle tree duration. /// @param groupId: Id of the group. /// @param newMerkleTreeDuration: New Merkle tree duration. function updateGroupMerkleTreeDuration(uint256 groupId, uint256 newMerkleTreeDuration) external; /// @dev See {SemaphoreGroups-_addMember}. function addMember(uint256 groupId, uint256 identityCommitment) external; /// @dev See {SemaphoreGroups-_addMembers}. function addMembers(uint256 groupId, uint256[] calldata identityCommitments) external; /// @dev See {SemaphoreGroups-_updateMember}. function updateMember( uint256 groupId, uint256 oldIdentityCommitment, uint256 newIdentityCommitment, uint256[] calldata merkleProofSiblings ) external; /// @dev See {SemaphoreGroups-_removeMember}. function removeMember(uint256 groupId, uint256 identityCommitment, uint256[] calldata merkleProofSiblings) external; /// @dev Saves the nullifier hash to prevent double signaling and emits an event /// if the zero-knowledge proof is valid. /// @param groupId: Id of the group. /// @param proof: Semaphore zero-knowledge proof. function validateProof(uint256 groupId, SemaphoreProof calldata proof) external; /// @dev Verifies a zero-knowledge proof by returning true or false. /// @param groupId: Id of the group. /// @param proof: Semaphore zero-knowledge proof. function verifyProof(uint256 groupId, SemaphoreProof calldata proof) external view returns (bool); }
{ "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"semaphoreAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"groupId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"identityCommitment","type":"uint256"}],"name":"joinGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"semaphore","outputs":[{"internalType":"contract ISemaphore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"merkleTreeDepth","type":"uint256"},{"internalType":"uint256","name":"merkleTreeRoot","type":"uint256"},{"internalType":"uint256","name":"nullifier","type":"uint256"},{"internalType":"uint256","name":"feedback","type":"uint256"},{"internalType":"uint256[8]","name":"points","type":"uint256[8]"}],"name":"sendFeedback","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80637b5d2534146100515780637b85d27a1461006f578063a0f44c921461008b578063eed02e4b146100a9575b600080fd5b6100596100c5565b6040516100669190610301565b60405180910390f35b6100896004803603810190610084919061037e565b6100e9565b005b6100936101ea565b6040516100a09190610409565b60405180910390f35b6100c360048036038101906100be9190610424565b6101f0565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040518060c001604052808781526020018681526020018581526020018481526020016001548152602001836008806020026040519081016040528092919082600860200280828437600081840152601f19601f820116905080830192505050505050815250905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0d898dd600154836040518363ffffffff1660e01b81526004016101b0929190610578565b600060405180830381600087803b1580156101ca57600080fd5b505af11580156101de573d6000803e3d6000fd5b50505050505050505050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631783efc3600154836040518363ffffffff1660e01b815260040161024d9291906105a2565b600060405180830381600087803b15801561026757600080fd5b505af115801561027b573d6000803e3d6000fd5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c76102c26102bd84610282565b6102a2565b610282565b9050919050565b60006102d9826102ac565b9050919050565b60006102eb826102ce565b9050919050565b6102fb816102e0565b82525050565b600060208201905061031660008301846102f2565b92915050565b600080fd5b6000819050919050565b61033481610321565b811461033f57600080fd5b50565b6000813590506103518161032b565b92915050565b600080fd5b60008190508260206008028201111561037857610377610357565b5b92915050565b6000806000806000610180868803121561039b5761039a61031c565b5b60006103a988828901610342565b95505060206103ba88828901610342565b94505060406103cb88828901610342565b93505060606103dc88828901610342565b92505060806103ed8882890161035c565b9150509295509295909350565b61040381610321565b82525050565b600060208201905061041e60008301846103fa565b92915050565b60006020828403121561043a5761043961031c565b5b600061044884828501610342565b91505092915050565b61045a81610321565b82525050565b600060089050919050565b600081905092915050565b6000819050919050565b600061048c8383610451565b60208301905092915050565b6000602082019050919050565b6104ae81610460565b6104b8818461046b565b92506104c382610476565b8060005b838110156104f45781516104db8782610480565b96506104e683610498565b9250506001810190506104c7565b505050505050565b6101a0820160008201516105136000850182610451565b5060208201516105266020850182610451565b5060408201516105396040850182610451565b50606082015161054c6060850182610451565b50608082015161055f6080850182610451565b5060a082015161057260a08501826104a5565b50505050565b60006101c08201905061058e60008301856103fa565b61059b60208301846104fc565b9392505050565b60006040820190506105b760008301856103fa565b6105c460208301846103fa565b939250505056fea26469706673582212204372a4ebed6da1576c9fe82880394bc82020da6146e66680b95602739480c5ba64736f6c63430008170033
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.