Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 6341554 | 53 days ago | IN | 0 ETH | 0.00000046 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
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"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516108473803806108478339818101604052810190610032919061017d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c3f3b60306040518263ffffffff1660e01b81526004016100cb91906101b9565b6020604051808303816000875af11580156100ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010e919061020a565b60018190555050610237565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061014a8261011f565b9050919050565b61015a8161013f565b811461016557600080fd5b50565b60008151905061017781610151565b92915050565b6000602082840312156101935761019261011a565b5b60006101a184828501610168565b91505092915050565b6101b38161013f565b82525050565b60006020820190506101ce60008301846101aa565b92915050565b6000819050919050565b6101e7816101d4565b81146101f257600080fd5b50565b600081519050610204816101de565b92915050565b6000602082840312156102205761021f61011a565b5b600061022e848285016101f5565b91505092915050565b610601806102466000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80637b5d2534146100515780637b85d27a1461006f578063a0f44c921461008b578063eed02e4b146100a9575b600080fd5b6100596100c5565b6040516100669190610301565b60405180910390f35b6100896004803603810190610084919061037e565b6100e9565b005b6100936101ea565b6040516100a09190610409565b60405180910390f35b6100c360048036038101906100be9190610424565b6101f0565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040518060c001604052808781526020018681526020018581526020018481526020016001548152602001836008806020026040519081016040528092919082600860200280828437600081840152601f19601f820116905080830192505050505050815250905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0d898dd600154836040518363ffffffff1660e01b81526004016101b0929190610578565b600060405180830381600087803b1580156101ca57600080fd5b505af11580156101de573d6000803e3d6000fd5b50505050505050505050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631783efc3600154836040518363ffffffff1660e01b815260040161024d9291906105a2565b600060405180830381600087803b15801561026757600080fd5b505af115801561027b573d6000803e3d6000fd5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c76102c26102bd84610282565b6102a2565b610282565b9050919050565b60006102d9826102ac565b9050919050565b60006102eb826102ce565b9050919050565b6102fb816102e0565b82525050565b600060208201905061031660008301846102f2565b92915050565b600080fd5b6000819050919050565b61033481610321565b811461033f57600080fd5b50565b6000813590506103518161032b565b92915050565b600080fd5b60008190508260206008028201111561037857610377610357565b5b92915050565b6000806000806000610180868803121561039b5761039a61031c565b5b60006103a988828901610342565b95505060206103ba88828901610342565b94505060406103cb88828901610342565b93505060606103dc88828901610342565b92505060806103ed8882890161035c565b9150509295509295909350565b61040381610321565b82525050565b600060208201905061041e60008301846103fa565b92915050565b60006020828403121561043a5761043961031c565b5b600061044884828501610342565b91505092915050565b61045a81610321565b82525050565b600060089050919050565b600081905092915050565b6000819050919050565b600061048c8383610451565b60208301905092915050565b6000602082019050919050565b6104ae81610460565b6104b8818461046b565b92506104c382610476565b8060005b838110156104f45781516104db8782610480565b96506104e683610498565b9250506001810190506104c7565b505050505050565b6101a0820160008201516105136000850182610451565b5060208201516105266020850182610451565b5060408201516105396040850182610451565b50606082015161054c6060850182610451565b50608082015161055f6080850182610451565b5060a082015161057260a08501826104a5565b50505050565b60006101c08201905061058e60008301856103fa565b61059b60208301846104fc565b9392505050565b60006040820190506105b760008301856103fa565b6105c460208301846103fa565b939250505056fea26469706673582212204372a4ebed6da1576c9fe82880394bc82020da6146e66680b95602739480c5ba64736f6c634300081700330000000000000000000000001e0d7ff1610e480fc93bdec510811ea2ba6d7c2f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80637b5d2534146100515780637b85d27a1461006f578063a0f44c921461008b578063eed02e4b146100a9575b600080fd5b6100596100c5565b6040516100669190610301565b60405180910390f35b6100896004803603810190610084919061037e565b6100e9565b005b6100936101ea565b6040516100a09190610409565b60405180910390f35b6100c360048036038101906100be9190610424565b6101f0565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006040518060c001604052808781526020018681526020018581526020018481526020016001548152602001836008806020026040519081016040528092919082600860200280828437600081840152601f19601f820116905080830192505050505050815250905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0d898dd600154836040518363ffffffff1660e01b81526004016101b0929190610578565b600060405180830381600087803b1580156101ca57600080fd5b505af11580156101de573d6000803e3d6000fd5b50505050505050505050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631783efc3600154836040518363ffffffff1660e01b815260040161024d9291906105a2565b600060405180830381600087803b15801561026757600080fd5b505af115801561027b573d6000803e3d6000fd5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c76102c26102bd84610282565b6102a2565b610282565b9050919050565b60006102d9826102ac565b9050919050565b60006102eb826102ce565b9050919050565b6102fb816102e0565b82525050565b600060208201905061031660008301846102f2565b92915050565b600080fd5b6000819050919050565b61033481610321565b811461033f57600080fd5b50565b6000813590506103518161032b565b92915050565b600080fd5b60008190508260206008028201111561037857610377610357565b5b92915050565b6000806000806000610180868803121561039b5761039a61031c565b5b60006103a988828901610342565b95505060206103ba88828901610342565b94505060406103cb88828901610342565b93505060606103dc88828901610342565b92505060806103ed8882890161035c565b9150509295509295909350565b61040381610321565b82525050565b600060208201905061041e60008301846103fa565b92915050565b60006020828403121561043a5761043961031c565b5b600061044884828501610342565b91505092915050565b61045a81610321565b82525050565b600060089050919050565b600081905092915050565b6000819050919050565b600061048c8383610451565b60208301905092915050565b6000602082019050919050565b6104ae81610460565b6104b8818461046b565b92506104c382610476565b8060005b838110156104f45781516104db8782610480565b96506104e683610498565b9250506001810190506104c7565b505050505050565b6101a0820160008201516105136000850182610451565b5060208201516105266020850182610451565b5060408201516105396040850182610451565b50606082015161054c6060850182610451565b50608082015161055f6080850182610451565b5060a082015161057260a08501826104a5565b50505050565b60006101c08201905061058e60008301856103fa565b61059b60208301846104fc565b9392505050565b60006040820190506105b760008301856103fa565b6105c460208301846103fa565b939250505056fea26469706673582212204372a4ebed6da1576c9fe82880394bc82020da6146e66680b95602739480c5ba64736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001e0d7ff1610e480fc93bdec510811ea2ba6d7c2f
-----Decoded View---------------
Arg [0] : semaphoreAddress (address): 0x1e0d7FF1610e480fC93BdEC510811ea2Ba6d7c2f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001e0d7ff1610e480fc93bdec510811ea2ba6d7c2f
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.