From b45fb42b326924f8bb0c2fe506c0613173c18ffd Mon Sep 17 00:00:00 2001 From: arnaucube Date: Wed, 2 Dec 2020 20:03:51 +0100 Subject: [PATCH] Add lvl on proof siblings for circom compatibility Add extra level on circom siblings proof generation for circom circuits compatibility. --- merkletree.go | 2 +- merkletree_test.go | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/merkletree.go b/merkletree.go index 3f3266e..0dddf81 100644 --- a/merkletree.go +++ b/merkletree.go @@ -843,7 +843,7 @@ func (p *Proof) AllSiblings() []*Hash { // CircomSiblingsFromSiblings returns the full siblings compatible with circom func CircomSiblingsFromSiblings(siblings []*Hash, levels int) []*Hash { // Add the rest of empty levels to the siblings - for i := len(siblings); i < levels; i++ { + for i := len(siblings); i < levels+1; i++ { siblings = append(siblings, &HashZero) } return siblings diff --git a/merkletree_test.go b/merkletree_test.go index 41612cc..032da94 100644 --- a/merkletree_test.go +++ b/merkletree_test.go @@ -624,7 +624,8 @@ func TestAddAndGetCircomProof(t *testing.T) { assert.Equal(t, "1", cpp.NewKey.String()) assert.Equal(t, "2", cpp.NewValue.String()) assert.Equal(t, true, cpp.IsOld0) - assert.Equal(t, "[0 0 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, "[0 0 0 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, mt.maxLevels+1, len(cpp.Siblings)) cpp, err = mt.AddAndGetCircomProof(big.NewInt(33), big.NewInt(44)) assert.Nil(t, err) @@ -635,7 +636,8 @@ func TestAddAndGetCircomProof(t *testing.T) { assert.Equal(t, "33", cpp.NewKey.String()) assert.Equal(t, "44", cpp.NewValue.String()) assert.Equal(t, false, cpp.IsOld0) - assert.Equal(t, "[0 0 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, "[0 0 0 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, mt.maxLevels+1, len(cpp.Siblings)) cpp, err = mt.AddAndGetCircomProof(big.NewInt(55), big.NewInt(66)) assert.Nil(t, err) @@ -646,8 +648,8 @@ func TestAddAndGetCircomProof(t *testing.T) { assert.Equal(t, "55", cpp.NewKey.String()) assert.Equal(t, "66", cpp.NewValue.String()) assert.Equal(t, true, cpp.IsOld0) - assert.Equal(t, "[0 42948778... 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) - // fmt.Println(cpp) + assert.Equal(t, "[0 42948778... 0 0 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, mt.maxLevels+1, len(cpp.Siblings)) } func TestUpdateCircomProcessorProof(t *testing.T) { @@ -675,7 +677,7 @@ func TestUpdateCircomProcessorProof(t *testing.T) { assert.Equal(t, "10", cpp.NewKey.String()) assert.Equal(t, "1024", cpp.NewValue.String()) assert.Equal(t, false, cpp.IsOld0) - assert.Equal(t, "[19625419... 46910949... 18399594... 20473908... 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) + assert.Equal(t, "[19625419... 46910949... 18399594... 20473908... 0 0 0 0 0 0 0]", fmt.Sprintf("%v", cpp.Siblings)) } func TestTypesMarshalers(t *testing.T) {