docs: update usage section

Former-commit-id: 9d3f221b05cf0a8fb82c42d0ef13e5cf947e2c99 [formerly 97c3539fa87452e1a99f127166f12c2310365130] [formerly 2e2c3f49ead1d3d6f2b918abb08cdf03874d1233 [formerly 7375db1d9ec769676ccd17d585d25a400f1bf301]] [formerly c06e1773761101c6beb312692af8c42b61584692 [formerly afab0c65ca473d9d8cebbfdc566059168dbe556a] [formerly cc216fa42fa6bb1bc27597436e8e484dd91260ec [formerly 0585708dd3]]]
Former-commit-id: 552405449ebc6aa7dc3f538cc2ba79afdd567446 [formerly 0d3e39c29dd4d76a000fde72e0042ce673adab46] [formerly ddea6a906303b7b10036ccf23a6458b7291fcbaa [formerly d2903ebdcdb2d8394ddf022fbed4005709208f0f]]
Former-commit-id: 9920ff4e4d6a5daa9c967474e315dab267bb72b3 [formerly 0df57811d0dad13eeea090e6aceb807ad5c497ad]
Former-commit-id: ad4b1a2ed4a27816fde141b3d493bc48ec47014a
This commit is contained in:
Omar Desogus
2022-02-02 22:25:11 +01:00
committed by GitHub
parent 8b1931c7f4
commit 98bab330d9

View File

@@ -2,7 +2,7 @@
<h1 align="center">
Incremental Merkle Trees (Solidity)
</h1>
<p align="center">Incremental Merkle tree smart contracts.</p>
<p align="center">Incremental Merkle tree Solidity libraries.</p>
</p>
<p align="center">
@@ -34,6 +34,13 @@
</h4>
</div>
## Libraries:
✔️ [IncrementalBinaryTree](https://github.com/appliedzkp/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalBinaryTree.sol)\
✔️ [IncrementalQuinTree](https://github.com/appliedzkp/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol)
> The methods of each library are always the same (i.e `insert`, `remove`, `verify`).
---
## 🛠 Install
@@ -54,13 +61,15 @@ yarn add @zk-kit/incremental-merkle-tree.sol
## 📜 Usage
### Importing and using the library
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@zk-kit/incremental-merkle-tree.sol/contracts/IncrementalBinaryTree.sol";
contract Test {
contract Example {
using IncrementalBinaryTree for IncrementalTreeData;
event TreeCreated(bytes32 id, uint8 depth);
@@ -70,7 +79,7 @@ contract Test {
mapping(bytes32 => IncrementalTreeData) public trees;
function createTree(bytes32 _id, uint8 _depth) external {
require(trees[_id].depth == 0, "Test: tree already exists");
require(trees[_id].depth == 0, "Example: tree already exists");
trees[_id].init(_depth, 0);
@@ -78,7 +87,7 @@ contract Test {
}
function insertLeaf(bytes32 _treeId, uint256 _leaf) external {
require(trees[_treeId].depth != 0, "Test: tree does not exist");
require(trees[_treeId].depth != 0, "Example: tree does not exist");
trees[_treeId].insert(_leaf);
@@ -91,7 +100,7 @@ contract Test {
uint256[] memory _proofSiblings,
uint8[] memory _proofPathIndices
) external {
require(trees[_treeId].depth != 0, "Test: tree does not exist");
require(trees[_treeId].depth != 0, "Example: tree does not exist");
trees[_treeId].remove(_leaf, _proofSiblings, _proofPathIndices);
@@ -101,6 +110,55 @@ contract Test {
```
### Creating an Hardhat task to deploy the contract
```ts
import { poseidon_gencontract as poseidonContract } from "circomlibjs"
import { Contract } from "ethers"
import { task, types } from "hardhat/config"
task("deploy:example", "Deploy an Example contract")
.addOptionalParam<boolean>("logs", "Print the logs", true, types.boolean)
.setAction(async ({ logs }, { ethers }): Promise<Contract> => {
const poseidonT3ABI = poseidonContract.generateABI(2)
const poseidonT3Bytecode = poseidonContract.createCode(2)
const [signer] = await ethers.getSigners()
const PoseidonLibT3Factory = new ethers.ContractFactory(poseidonT3ABI, poseidonT3Bytecode, signer)
const poseidonT3Lib = await PoseidonLibT3Factory.deploy()
await poseidonT3Lib.deployed()
logs && console.log(`PoseidonT3 library has been deployed to: ${poseidonT3Lib.address}`)
const IncrementalBinaryTreeLibFactory = await ethers.getContractFactory("IncrementalBinaryTree", {
libraries: {
PoseidonT3: poseidonT3Lib.address
}
})
const incrementalBinaryTreeLib = await IncrementalBinaryTreeLibFactory.deploy()
await incrementalBinaryTreeLib.deployed()
logs && console.log(`IncrementalBinaryTree library has been deployed to: ${incrementalBinaryTreeLib.address}`)
const ContractFactory = await ethers.getContractFactory("Example", {
libraries: {
IncrementalBinaryTree: incrementalBinaryTreeLib.address
}
})
const contract = await ContractFactory.deploy()
await contract.deployed()
logs && console.log(`Example contract has been deployed to: ${contract.address}`)
return contract
})
```
## Contacts
### Developers