Skip to content

Commit

Permalink
Integrated poseidon into merkle tree
Browse files Browse the repository at this point in the history
  • Loading branch information
davibauer committed Jun 22, 2023
1 parent cedd8da commit 9ecc6b1
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 31 deletions.
21 changes: 14 additions & 7 deletions .github/workflows/contracts-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,30 @@ jobs:
npm install -g pnpm
pnpm install
# Generate modules

- name: Run generate-plonk
run: pnpm contracts generate-plonk

- name: Run test-plonk
run: pnpm contracts test-plonk

- name: Run generate-groth16
run: pnpm contracts generate-groth16

- name: Run test-groth16
run: pnpm contracts test-groth16
- name: Run generate-poseidon
run: pnpm contracts generate-poseidon

- name: Run generate-merkle
run: pnpm contracts generate-merkle

- name: Run generate-poseidon
run: pnpm contracts generate-poseidon
# Test modules

- name: Run test-plonk
run: pnpm contracts test-plonk

- name: Run test-groth16
run: pnpm contracts test-groth16

- name: Run test-poseidon
run: pnpm contracts test-poseidon

- name: Run test-merkle
run: pnpm contracts test-merkle
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ lib.repl
*.env
**/.env
**/node_modules
pact
pact
scripts
2 changes: 1 addition & 1 deletion contracts/groth16-verifier/src/ejs/lib.ejs.repl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(module plonk MODULE_ADMIN
(module groth16 MODULE_ADMIN
(defcap MODULE_ADMIN () true)

(defschema G1Point
Expand Down
32 changes: 13 additions & 19 deletions contracts/merkle-tree/src/ejs/lib.ejs.repl
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

(defschema FilledSubtreesSchema
"Schema for the filledSubtrees table"
value:string)
value:integer)

(defschema RootsSchema
"Schema for the roots table"
value:string)
value:integer)

(defschema StateSchema
"Schema for the config table"
Expand All @@ -31,14 +31,14 @@
(defun set-next-index (next_index:integer)
(update state "0" {"next_index": next_index}))

(defun set-filled-subtrees (key:string value:string)
(defun set-filled-subtrees (key:string value:integer)
(write filledSubtrees key { "value": value }))

(defun insert-root (key:string value:string)
(defun insert-root (key:string value:integer)
(write roots key { "value": value }))

(defun my-hash (left:string right:string)
(hash (+ left right)))
(defun poseidon-hash (left:integer right:integer)
(poseidon.poseidon [left right]))

(defun initialize()
<% for (let i = 0; i < level; i++) { %>
Expand All @@ -55,18 +55,18 @@

(defun zeros (i:integer)
(if (= i 0)
"D9kjyl5yGMS6PDgBwmphfs2_2uu5x2zi7KFm54Ve-7g" ; (hash "0")
3193090221241211970002919215846211184824251841300455796635909287157453409439 ; (hash "0") zeroElement
(if (= i 1)
"s1sm9e2GFnqacffSdC5KpjHwqIzD2Ocr5pGGpgktnJk" ; (hash (+ "D9kjyl5yGMS6PDgBwmphfs2_2uu5x2zi7KFm54Ve" "D9kjyl5yGMS6PDgBwmphfs2_2uu5x2zi7KFm54Ve"))
5537318983262243501092567777293783139848264067255984381952191910128890964680 ; (hash (+ "3193090221241211970002919215846211184824251841300455796635909287157453409439" "3193090221241211970002919215846211184824251841300455796635909287157453409439"))
(if (= i 2)
"-yuQcXs9Wr_GOZTpN6UG1RhjBULGWEL22v_9jyVZ_ss" ; (hash (+ "s1sm9e2GFnqacffSdC5KpjHwqIzD2Ocr5pGGpgktnJk" "s1sm9e2GFnqacffSdC5KpjHwqIzD2Ocr5pGGpgktnJk"))
7303590454072865666193218918548579953037841327389857351908320529561587029886 ; (hash (+ "5537318983262243501092567777293783139848264067255984381952191910128890964680" "5537318983262243501092567777293783139848264067255984381952191910128890964680"))
""
)
)
)
)

(defun insert-leaf (leaf:string)
(defun insert-leaf (leaf:integer)
(
let*
(
Expand All @@ -80,7 +80,7 @@
(filled_subtrees (at 'value (read filledSubtrees "<%= i - 1 %>")))

(lr_<%= i %> (if (= (mod current_index 2) 0)
{"left": current_level_hash, "right": (zeros <%= i -1 %>)}
{"left": current_level_hash, "right": (zeros <%= i - 1 %>)}
{"left": filled_subtrees, "right": current_level_hash}
))

Expand All @@ -89,7 +89,7 @@
(list (zeros <%= i - 1 %>)))
))

(current_level_hash (my-hash (at 'left lr_<%= i %>) (at 'right lr_<%= i %>)))
(current_level_hash (poseidon-hash (at 'left lr_<%= i %>) (at 'right lr_<%= i %>)))

(current_index (/ current_index 2))
<% } %>
Expand All @@ -107,13 +107,7 @@
(set-filled-subtrees "<%= i %>" (at <%= i %> hashes))
)
<% } %>
{
"root": current_level_hash,
"state": {
"current_root_index": new_root_index,
"next_index": (+ next-index 1)
}
}
current_level_hash
)
)
)
Expand Down
7 changes: 7 additions & 0 deletions contracts/merkle-tree/tests/merkle-tests.repl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(load "../../poseidon/src/lib.repl")
(load "../src/lib.repl")

(expect "merkle" 20211649699328972427040417540848848882630537175401544736520822735123291360599 (insert-leaf 1))
(expect "merkle" 10432624530112658362661942458029986103228559979322390538181807469641977050330 (insert-leaf 2))
(expect "merkle" 17673813253184655362744115372752093680139333872142827168176649842069470193038 (insert-leaf 3))
(expect "merkle" 19902585034578372203168006768193534455972092212577590957934236606898171441729 (insert-leaf 4))
6 changes: 4 additions & 2 deletions contracts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
"scripts": {
"generate-plonk": "pnpm ejs ./plonk-verifier/src/ejs/lib.ejs.repl -f ./plonk-verifier/src/ejs/sample.verifier.json -o ./plonk-verifier/src/lib.repl",
"generate-groth16": "pnpm ejs ./groth16-verifier/src/ejs/lib.ejs.repl -f ./groth16-verifier/src/ejs/sample.verifier.json -o ./groth16-verifier/src/lib.repl",
"generate-poseidon": "pnpm ejs ./poseidon/src/ejs/lib.ejs.repl -f ./poseidon/src/ejs/data.json -o ./poseidon/src/lib.repl",
"generate-merkle": "pnpm ejs ./merkle-tree/src/ejs/lib.ejs.repl -f ./merkle-tree/src/ejs/data.json -o ./merkle-tree/src/lib.repl",
"test-plonk": "pact plonk-verifier/tests/plonk-tests.repl",
"test-groth16": "pact groth16-verifier/tests/groth16-tests.repl",
"generate-merkle": "pnpm ejs ./merkle-tree/src/ejs/lib.ejs.repl -f ./merkle-tree/src/ejs/data.json -o ./merkle-tree/src/lib.repl",
"generate-poseidon": "pnpm ejs ./poseidon/src/ejs/lib.ejs.repl -f ./poseidon/src/ejs/data.json -o ./poseidon/src/lib.repl"
"test-poseidon": "pact poseidon/tests/poseidon-tests.repl",
"test-merkle": "pact merkle-tree/tests/merkle-tests.repl"
},
"dependencies": {
"ejs": "^3.1.9"
Expand Down
2 changes: 1 addition & 1 deletion contracts/poseidon/src/ejs/lib.ejs.repl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(module plonk MODULE_ADMIN
(module poseidon MODULE_ADMIN
(defcap MODULE_ADMIN () true)

(defun sigma(in:integer)
Expand Down

0 comments on commit 9ecc6b1

Please sign in to comment.