Anchor.sol¶
Description¶
An abstract contract that requires child classes to implement appropriate verification and processes for deposits and withdrawals.
Variables¶
verifier¶
Type: public immutable IVerifier
denomination¶
Type: public immutable uint256
nullifierHashes¶
Type: public mapping(bytes32 => bool)
commitments¶
Type: public mapping(bytes32 => bool)
Constructor¶
Details
Signature
constructor(IVerifier _verifier, IHasher _hasher, uint256 _denomination, uint256 _treeHeight) MerkleTreeWithHistory(_merkleTreeHeight, _hasher)
External Functions¶
Calls to deposits require a commitment, which is a hash of some secret values.
Deposit¶
Details
Signature
deposit(bytes32 _commitment)
Requires
- require(..., "commitment has been submitted")
Emits
Deposit
Withdraw¶
Details
Signature
withdraw(address _recipient, address _relayer, uint256 _fee, uint256 _refund)
Requires
- require(_fee <= denomination)
- require(..., "The not has already been spent")
- require(..., "Cannot find your merkle root")
- require(..., "Invalid withdraw proof")
Emits
Withdraw
View Functions¶
isSpent¶
Details
Signature
isSpent(bytes32 _nullifierHash) public view returns (bool)
isSpentArray¶
Details
Signature
isSpentArray(bytes32[] calldata _nullifierHashes) external view returns (bool[] memory spent)
Events¶
Deposit¶
Signature: Deposit(bytes32 indexed commitment, uint32 leafIndex, uint256 timestamp)
Withdraw¶
Signature: Withdrawal(address to, bytes32 nullifierHash, address indexed relayer, uint256 fee)