diff --git a/package.json b/package.json
index 1144fcf..1fc7a61 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,8 @@
"benchmarks": "rimraf benchmarks/results && ts-node benchmarks/index.ts",
"docs": "yarn workspaces foreach run docs",
"commit": "cz",
- "precommit": "lint-staged"
+ "precommit": "lint-staged",
+ "postinstall": "yarn build"
},
"keywords": [
"javascript",
diff --git a/packages/incremental-merkle-tree.sol/README.md b/packages/incremental-merkle-tree.sol/README.md
deleted file mode 100644
index 293e63f..0000000
--- a/packages/incremental-merkle-tree.sol/README.md
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
- Incremental Merkle Trees (Solidity)
-
- Incremental Merkle tree Solidity libraries.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Libraries:
-
-✔️ [IncrementalBinaryTree](https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalBinaryTree.sol) (Poseidon)\
-✔️ [IncrementalQuinTree](https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol) (Poseidon)
-
-> The methods of each library are always the same (i.e `insert`, `remove`, `verify`).
-
----
-
-## 🛠 Install
-
-### npm or yarn
-
-Install the `@zk-kit/incremental-merkle-tree.sol` package with npm:
-
-```bash
-npm i @zk-kit/incremental-merkle-tree.sol --save
-```
-
-or yarn:
-
-```bash
-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 Example {
- using IncrementalBinaryTree for IncrementalTreeData;
-
- event TreeCreated(bytes32 id, uint8 depth);
- event LeafInserted(bytes32 indexed treeId, uint256 leaf, uint256 root);
- event LeafRemoved(bytes32 indexed treeId, uint256 leaf, uint256 root);
-
- mapping(bytes32 => IncrementalTreeData) public trees;
-
- function createTree(bytes32 _id, uint8 _depth) external {
- require(trees[_id].depth == 0, "Example: tree already exists");
-
- trees[_id].init(_depth, 0);
-
- emit TreeCreated(_id, _depth);
- }
-
- function insertLeaf(bytes32 _treeId, uint256 _leaf) external {
- require(trees[_treeId].depth != 0, "Example: tree does not exist");
-
- trees[_treeId].insert(_leaf);
-
- emit LeafInserted(_treeId, _leaf, trees[_treeId].root);
- }
-
- function removeLeaf(
- bytes32 _treeId,
- uint256 _leaf,
- uint256[] calldata _proofSiblings,
- uint8[] calldata _proofPathIndices
- ) external {
- require(trees[_treeId].depth != 0, "Example: tree does not exist");
-
- trees[_treeId].remove(_leaf, _proofSiblings, _proofPathIndices);
-
- emit LeafRemoved(_treeId, _leaf, trees[_treeId].root);
- }
-}
-
-```
-
-### Creating an Hardhat task to deploy the contract
-
-```typescript
-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("logs", "Print the logs", true, types.boolean)
- .setAction(async ({ logs }, { ethers }): Promise => {
- 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
-
-- e-mail : me@cedoor.dev
-- github : [@cedoor](https://github.com/cedoor)
-- website : https://cedoor.dev
diff --git a/packages/incremental-merkle-tree.sol/README.md b/packages/incremental-merkle-tree.sol/README.md
new file mode 120000
index 0000000..1ee0442
--- /dev/null
+++ b/packages/incremental-merkle-tree.sol/README.md
@@ -0,0 +1 @@
+contracts/README.md
\ No newline at end of file
diff --git a/packages/incremental-merkle-tree.sol/contracts/README.md b/packages/incremental-merkle-tree.sol/contracts/README.md
new file mode 100644
index 0000000..7175635
--- /dev/null
+++ b/packages/incremental-merkle-tree.sol/contracts/README.md
@@ -0,0 +1,160 @@
+
+
+ Incremental Merkle Trees (Solidity)
+
+ Incremental Merkle tree Solidity libraries.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Libraries:
+
+✔️ [IncrementalBinaryTree](https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalBinaryTree.sol) (Poseidon)\
+✔️ [IncrementalQuinTree](https://github.com/privacy-scaling-explorations/zk-kit/blob/main/packages/incremental-merkle-tree.sol/contracts/IncrementalQuinTree.sol) (Poseidon)
+
+> The methods of each library are always the same (i.e `insert`, `remove`, `verify`).
+
+---
+
+## 🛠 Install
+
+### npm or yarn
+
+Install the `@zk-kit/incremental-merkle-tree.sol` package with npm:
+
+```bash
+npm i @zk-kit/incremental-merkle-tree.sol --save
+```
+
+or yarn:
+
+```bash
+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 Example {
+ using IncrementalBinaryTree for IncrementalTreeData;
+
+ event TreeCreated(bytes32 id, uint8 depth);
+ event LeafInserted(bytes32 indexed treeId, uint256 leaf, uint256 root);
+ event LeafRemoved(bytes32 indexed treeId, uint256 leaf, uint256 root);
+
+ mapping(bytes32 => IncrementalTreeData) public trees;
+
+ function createTree(bytes32 _id, uint8 _depth) external {
+ require(trees[_id].depth == 0, "Example: tree already exists");
+
+ trees[_id].init(_depth, 0);
+
+ emit TreeCreated(_id, _depth);
+ }
+
+ function insertLeaf(bytes32 _treeId, uint256 _leaf) external {
+ require(trees[_treeId].depth != 0, "Example: tree does not exist");
+
+ trees[_treeId].insert(_leaf);
+
+ emit LeafInserted(_treeId, _leaf, trees[_treeId].root);
+ }
+
+ function removeLeaf(
+ bytes32 _treeId,
+ uint256 _leaf,
+ uint256[] calldata _proofSiblings,
+ uint8[] calldata _proofPathIndices
+ ) external {
+ require(trees[_treeId].depth != 0, "Example: tree does not exist");
+
+ trees[_treeId].remove(_leaf, _proofSiblings, _proofPathIndices);
+
+ emit LeafRemoved(_treeId, _leaf, trees[_treeId].root);
+ }
+}
+
+```
+
+### Creating an Hardhat task to deploy the contract
+
+```typescript
+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("logs", "Print the logs", true, types.boolean)
+ .setAction(async ({ logs }, { ethers }): Promise => {
+ 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
+ })
+```
diff --git a/packages/incremental-merkle-tree.sol/contracts/package.json b/packages/incremental-merkle-tree.sol/contracts/package.json
new file mode 100644
index 0000000..6d1994a
--- /dev/null
+++ b/packages/incremental-merkle-tree.sol/contracts/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "@zk-kit/incremental-merkle-tree.sol",
+ "version": "1.0.0",
+ "description": "Incremental Merkle tree Solidity libraries.",
+ "license": "MIT",
+ "files": [
+ "**/*.sol",
+ "!test/",
+ "README.md"
+ ],
+ "keywords": [
+ "blockchain",
+ "ethereum",
+ "hardhat",
+ "smart-contracts",
+ "solidity",
+ "libraries",
+ "merkle-tree",
+ "incremental-merkle-tree"
+ ],
+ "repository": "git@github.com:privacy-scaling-explorations/zk-kit.git",
+ "homepage": "https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/incremental-merkle-tree.sol",
+ "author": {
+ "name": "Omar Desogus",
+ "email": "me@cedoor.dev",
+ "url": "https://cedoor.dev"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/incremental-merkle-tree.sol/contracts/BinaryTreeTest.sol b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol
similarity index 94%
rename from packages/incremental-merkle-tree.sol/contracts/BinaryTreeTest.sol
rename to packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol
index a1cbf5a..1594e35 100644
--- a/packages/incremental-merkle-tree.sol/contracts/BinaryTreeTest.sol
+++ b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalBinaryTreeTest.sol
@@ -2,9 +2,9 @@
pragma solidity ^0.8.4;
-import "./IncrementalBinaryTree.sol";
+import "../IncrementalBinaryTree.sol";
-contract BinaryTreeTest {
+contract IncrementalBinaryTreeTest {
using IncrementalBinaryTree for IncrementalTreeData;
event TreeCreated(bytes32 id, uint8 depth);
diff --git a/packages/incremental-merkle-tree.sol/contracts/QuinTreeTest.sol b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalQuinTreeTest.sol
similarity index 94%
rename from packages/incremental-merkle-tree.sol/contracts/QuinTreeTest.sol
rename to packages/incremental-merkle-tree.sol/contracts/test/IncrementalQuinTreeTest.sol
index 3502d44..62f7060 100644
--- a/packages/incremental-merkle-tree.sol/contracts/QuinTreeTest.sol
+++ b/packages/incremental-merkle-tree.sol/contracts/test/IncrementalQuinTreeTest.sol
@@ -2,9 +2,9 @@
pragma solidity ^0.8.4;
-import "./IncrementalQuinTree.sol";
+import "../IncrementalQuinTree.sol";
-contract QuinTreeTest {
+contract IncrementalQuinTreeTest {
using IncrementalQuinTree for IncrementalTreeData;
event TreeCreated(bytes32 id, uint8 depth);
diff --git a/packages/incremental-merkle-tree.sol/hardhat.config.ts b/packages/incremental-merkle-tree.sol/hardhat.config.ts
index d942a42..f235710 100644
--- a/packages/incremental-merkle-tree.sol/hardhat.config.ts
+++ b/packages/incremental-merkle-tree.sol/hardhat.config.ts
@@ -6,8 +6,8 @@ import { HardhatUserConfig } from "hardhat/config"
import { resolve } from "path"
import "solidity-coverage"
import { config } from "./package.json"
-import "./tasks/deploy-binary-tree-test"
-import "./tasks/deploy-quin-tree-test"
+import "./tasks/deploy-ibt-test"
+import "./tasks/deploy-iqt-test"
dotenvConfig({ path: resolve(__dirname, "./.env") })
diff --git a/packages/incremental-merkle-tree.sol/package.json b/packages/incremental-merkle-tree.sol/package.json
index f87decc..83329fe 100644
--- a/packages/incremental-merkle-tree.sol/package.json
+++ b/packages/incremental-merkle-tree.sol/package.json
@@ -1,46 +1,16 @@
{
"name": "@zk-kit/incremental-merkle-tree.sol",
- "version": "0.3.1",
- "description": "Incremental Merkle tree Solidity libraries.",
- "license": "MIT",
- "files": [
- "contracts/",
- "!contracts/Test.sol",
- "build/",
- "!build/contracts/Test.sol",
- "README.md"
- ],
- "keywords": [
- "blockchain",
- "ethereum",
- "hardhat",
- "smart-contracts",
- "solidity",
- "libraries",
- "merkle-tree",
- "incremental-merkle-tree"
- ],
- "repository": "git@github.com:privacy-scaling-explorations/zk-kit.git",
- "homepage": "https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/incremental-merkle-tree.sol",
- "author": {
- "name": "Omar Desogus",
- "email": "me@cedoor.dev",
- "url": "https://cedoor.dev"
- },
+ "private": true,
"scripts": {
"start": "hardhat node",
"build": "hardhat compile",
- "deploy:binary-tree-test": "hardhat deploy:binary-tree-test",
- "deploy:quin-tree-test": "hardhat deploy:quin-tree-test",
+ "compile": "hardhat compile",
+ "deploy:test-contracts": "hardhat deploy:tree-contracts",
"test": "hardhat test",
"test:report-gas": "REPORT_GAS=true hardhat test",
"test:coverage": "hardhat coverage",
"test:prod": "yarn lint && yarn coverage",
- "lint": "solhint 'contracts/**/*.sol'",
- "prepublishOnly": "yarn build"
- },
- "publishConfig": {
- "access": "public"
+ "lint": "solhint 'contracts/**/*.sol'"
},
"devDependencies": {
"@nomiclabs/hardhat-ethers": "^2.0.4",
diff --git a/packages/incremental-merkle-tree.sol/tasks/deploy-ibt-test.ts b/packages/incremental-merkle-tree.sol/tasks/deploy-ibt-test.ts
new file mode 100644
index 0000000..95cb342
--- /dev/null
+++ b/packages/incremental-merkle-tree.sol/tasks/deploy-ibt-test.ts
@@ -0,0 +1,50 @@
+import { poseidon_gencontract as poseidonContract } from "circomlibjs"
+import { Contract } from "ethers"
+import { task, types } from "hardhat/config"
+
+task("deploy:ibt-test", "Deploy an IncrementalBinaryTreeTest contract")
+ .addOptionalParam("logs", "Print the logs", true, types.boolean)
+ .setAction(async ({ logs }, { ethers }): Promise => {
+ 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()
+
+ if (logs) {
+ console.info(`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()
+
+ if (logs) {
+ console.info(`IncrementalBinaryTree library has been deployed to: ${incrementalBinaryTreeLib.address}`)
+ }
+
+ const ContractFactory = await ethers.getContractFactory("IncrementalBinaryTreeTest", {
+ libraries: {
+ IncrementalBinaryTree: incrementalBinaryTreeLib.address
+ }
+ })
+
+ const contract = await ContractFactory.deploy()
+
+ await contract.deployed()
+
+ if (logs) {
+ console.info(`Test contract has been deployed to: ${contract.address}`)
+ }
+
+ return contract
+ })
diff --git a/packages/incremental-merkle-tree.sol/tasks/deploy-binary-tree-test.ts b/packages/incremental-merkle-tree.sol/tasks/deploy-incremental-binary-tree.ts
similarity index 95%
rename from packages/incremental-merkle-tree.sol/tasks/deploy-binary-tree-test.ts
rename to packages/incremental-merkle-tree.sol/tasks/deploy-incremental-binary-tree.ts
index 33f9634..2e2ea18 100644
--- a/packages/incremental-merkle-tree.sol/tasks/deploy-binary-tree-test.ts
+++ b/packages/incremental-merkle-tree.sol/tasks/deploy-incremental-binary-tree.ts
@@ -2,7 +2,7 @@ import { poseidon_gencontract as poseidonContract } from "circomlibjs"
import { Contract } from "ethers"
import { task, types } from "hardhat/config"
-task("deploy:binary-tree-test", "Deploy a BinaryTreeTest contract")
+task("deploy:incremental-binary-tree-test", "Deploy an IncrementalBinaryTreeTest contract")
.addOptionalParam("logs", "Print the logs", true, types.boolean)
.setAction(async ({ logs }, { ethers }): Promise => {
const poseidonT3ABI = poseidonContract.generateABI(2)
diff --git a/packages/incremental-merkle-tree.sol/tasks/deploy-quin-tree-test.ts b/packages/incremental-merkle-tree.sol/tasks/deploy-iqt-test.ts
similarity index 94%
rename from packages/incremental-merkle-tree.sol/tasks/deploy-quin-tree-test.ts
rename to packages/incremental-merkle-tree.sol/tasks/deploy-iqt-test.ts
index 066e24d..b578801 100644
--- a/packages/incremental-merkle-tree.sol/tasks/deploy-quin-tree-test.ts
+++ b/packages/incremental-merkle-tree.sol/tasks/deploy-iqt-test.ts
@@ -2,7 +2,7 @@ import { poseidon_gencontract as poseidonContract } from "circomlibjs"
import { Contract } from "ethers"
import { task, types } from "hardhat/config"
-task("deploy:quin-tree-test", "Deploy a QuinTreeTest contract")
+task("deploy:iqt-test", "Deploy an IncrementalQuinTreeTest contract")
.addOptionalParam("logs", "Print the logs", true, types.boolean)
.setAction(async ({ logs }, { ethers }): Promise => {
const poseidonT6ABI = poseidonContract.generateABI(5)
@@ -32,7 +32,7 @@ task("deploy:quin-tree-test", "Deploy a QuinTreeTest contract")
console.info(`IncrementalQuinTree library has been deployed to: ${incrementalQuinTreeLib.address}`)
}
- const ContractFactory = await ethers.getContractFactory("QuinTreeTest", {
+ const ContractFactory = await ethers.getContractFactory("IncrementalQuinTreeTest", {
libraries: {
IncrementalQuinTree: incrementalQuinTreeLib.address
}
diff --git a/packages/incremental-merkle-tree.sol/test/BinaryTreeTest.ts b/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts
similarity index 97%
rename from packages/incremental-merkle-tree.sol/test/BinaryTreeTest.ts
rename to packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts
index 0e458e2..0bbac65 100644
--- a/packages/incremental-merkle-tree.sol/test/BinaryTreeTest.ts
+++ b/packages/incremental-merkle-tree.sol/test/IncrementalBinaryTreeTest.ts
@@ -3,8 +3,7 @@ import { Contract } from "ethers"
import { ethers, run } from "hardhat"
import { createTree } from "./utils"
-/* eslint-disable jest/valid-expect */
-describe("BinaryTreeTest", () => {
+describe("IncrementalBinaryTreeTest", () => {
let contract: Contract
const treeId = ethers.utils.formatBytes32String("treeId")
@@ -12,7 +11,7 @@ describe("BinaryTreeTest", () => {
const depth = 16
before(async () => {
- contract = await run("deploy:binary-tree-test", { logs: false })
+ contract = await run("deploy:ibt-test", { logs: false })
})
it("Should not create a tree with a depth > 32", async () => {
diff --git a/packages/incremental-merkle-tree.sol/test/QuinTreeTest.ts b/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts
similarity index 98%
rename from packages/incremental-merkle-tree.sol/test/QuinTreeTest.ts
rename to packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts
index 2904549..950ef55 100644
--- a/packages/incremental-merkle-tree.sol/test/QuinTreeTest.ts
+++ b/packages/incremental-merkle-tree.sol/test/IncrementalQuinTreeTest.ts
@@ -4,15 +4,15 @@ import { ethers, run } from "hardhat"
import { createTree } from "./utils"
/* eslint-disable jest/valid-expect */
-describe("QuinTreeTest", () => {
+describe("IncrementalQuinTreeTest", () => {
let contract: Contract
const treeId = ethers.utils.formatBytes32String("treeId")
const leaf = BigInt(1)
- const depth = 16
+ const depth = 8
before(async () => {
- contract = await run("deploy:quin-tree-test", { logs: false })
+ contract = await run("deploy:iqt-test", { logs: false })
})
it("Should not create a tree with a depth > 32", async () => {