Skip to content

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)