Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
0baa7ba6
Commit
0baa7ba6
authored
Nov 16, 2020
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add circuit test
parent
b9de3d60
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
564 additions
and
87 deletions
+564
-87
authorize.go
plugin/dapp/mix/cmd/gnark/circuit/authorize.go
+38
-21
authorize_test.go
plugin/dapp/mix/cmd/gnark/circuit/authorize_test.go
+85
-0
deposit.go
plugin/dapp/mix/cmd/gnark/circuit/deposit.go
+7
-7
deposit_test.go
plugin/dapp/mix/cmd/gnark/circuit/deposit_test.go
+53
-0
transferInput.go
plugin/dapp/mix/cmd/gnark/circuit/transferInput.go
+16
-29
transferOutput.go
plugin/dapp/mix/cmd/gnark/circuit/transferOutput.go
+1
-1
transferOutput_test.go
plugin/dapp/mix/cmd/gnark/circuit/transferOutput_test.go
+53
-0
transferinput_test.go
plugin/dapp/mix/cmd/gnark/circuit/transferinput_test.go
+164
-0
withdraw.go
plugin/dapp/mix/cmd/gnark/circuit/withdraw.go
+5
-5
withdraw_test.go
plugin/dapp/mix/cmd/gnark/circuit/withdraw_test.go
+91
-0
transferInput
plugin/dapp/mix/cmd/gnark/input/transferInput
+24
-24
transfer_test.go
plugin/dapp/mix/executor/transfer_test.go
+27
-0
No files found.
plugin/dapp/mix/cmd/gnark/circuit/authorize.go
View file @
0baa7ba6
...
@@ -5,6 +5,7 @@ import (
...
@@ -5,6 +5,7 @@ import (
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/gadgets/hash/mimc"
"github.com/consensys/gnark/gadgets/hash/mimc"
"github.com/consensys/gurvy"
"github.com/consensys/gurvy"
"strconv"
)
)
func
main
()
{
func
main
()
{
...
@@ -38,53 +39,69 @@ func NewAuth() *frontend.R1CS {
...
@@ -38,53 +39,69 @@ func NewAuth() *frontend.R1CS {
// create root constraint system
// create root constraint system
circuit
:=
frontend
.
New
()
circuit
:=
frontend
.
New
()
spend
Value
:=
circuit
.
SECRET_INPUT
(
"spendAmount"
)
spend
Amount
:=
circuit
.
SECRET_INPUT
(
"spendAmount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spendPubKey"
)
spendPubKey
:=
circuit
.
SECRET_INPUT
(
"spendPubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubKey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"authorizePriKey"
)
authorizePrikey
:=
circuit
.
SECRET_INPUT
(
"authorizePriKey"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
authPubKey
:=
circuit
.
PUBLIC_INPUT
(
"authorizePubKey"
)
authorizeHash
:=
circuit
.
PUBLIC_INPUT
(
"authorizeHash"
)
authPubHashInput
:=
circuit
.
PUBLIC_INPUT
(
"authorizePubKey"
)
// hash function
// hash function
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
calcAuthPubHash
:=
mimc
.
Hash
(
&
circuit
,
authorizePrikey
)
calcAuthPubKey
:=
mimc
.
Hash
(
&
circuit
,
authorizePriKey
)
circuit
.
MUSTBE_EQ
(
authPubkey
,
calcAuthPubHash
)
circuit
.
MUSTBE_EQ
(
authPubKey
,
calcAuthPubKey
)
circuit
.
MUSTBE_EQ
(
authPubHashInput
,
mimc
.
Hash
(
&
circuit
,
authPubkey
))
circuit
.
MUSTBE_EQ
(
authorizeHash
,
mimc
.
Hash
(
&
circuit
,
authPubKey
,
noteRandom
))
//note hash random
//note hash random
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
authSpendHash
:=
circuit
.
PUBLIC_INPUT
(
"authorizeSpendHash"
)
authSpendHash
:=
circuit
.
PUBLIC_INPUT
(
"authorizeSpendHash"
)
//spend_flag 0:return_pubkey, 1: spend_pubkey
//spend_flag 0:return_pubkey, 1: spend_pubkey
spendFlag
:=
circuit
.
SECRET_INPUT
(
"spendFlag"
)
spendFlag
:=
circuit
.
SECRET_INPUT
(
"spendFlag"
)
circuit
.
MUSTBE_BOOLEAN
(
spendFlag
)
circuit
.
MUSTBE_BOOLEAN
(
spendFlag
)
targetPubHash
:=
circuit
.
SELECT
(
spendFlag
,
spendPub
key
,
returnPubk
ey
)
targetPubHash
:=
circuit
.
SELECT
(
spendFlag
,
spendPub
Key
,
returnPubK
ey
)
calcAuthSpendHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spend
Value
,
noteRandom
)
calcAuthSpendHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spend
Amount
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
authSpendHash
,
calcAuthSpendHash
)
circuit
.
MUSTBE_EQ
(
authSpendHash
,
calcAuthSpendHash
)
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
returnPubkey
,
authPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubKey
,
returnPubKey
,
authPubKey
,
spendAmount
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
mimc
.
Hash
(
&
circuit
,
preImage
))
merkelPathPart
(
&
circuit
,
mimc
,
preImage
)
merkelPathPart
(
&
circuit
,
mimc
,
noteHash
)
r1cs
:=
circuit
.
ToR1CS
()
r1cs
:=
circuit
.
ToR1CS
()
return
r1cs
return
r1cs
}
}
func
merkelPathPart
(
circuit
*
frontend
.
CS
,
mimc
mimc
.
MiMCGadget
,
noteHash
*
frontend
.
Constraint
)
{
var
proofSet
,
helper
,
valid
[]
*
frontend
.
Constraint
merkleRoot
:=
circuit
.
PUBLIC_INPUT
(
"treeRootHash"
)
proofSet
=
append
(
proofSet
,
noteHash
)
//helper[0],valid[0]占位, 方便接口只设置有效值
helper
=
append
(
helper
,
circuit
.
ALLOCATE
(
"1"
))
valid
=
append
(
valid
,
circuit
.
ALLOCATE
(
"1"
))
//depth:10, path num need be 9
for
i
:=
1
;
i
<
10
;
i
++
{
proofSet
=
append
(
proofSet
,
circuit
.
SECRET_INPUT
(
"path"
+
strconv
.
Itoa
(
i
)))
helper
=
append
(
helper
,
circuit
.
SECRET_INPUT
(
"helper"
+
strconv
.
Itoa
(
i
)))
valid
=
append
(
valid
,
circuit
.
SECRET_INPUT
(
"valid"
+
strconv
.
Itoa
(
i
)))
}
VerifyMerkleProof
(
circuit
,
mimc
,
merkleRoot
,
proofSet
,
helper
,
valid
)
}
func
VerifyMerkleProof
(
circuit
*
frontend
.
CS
,
h
mimc
.
MiMCGadget
,
merkleRoot
*
frontend
.
Constraint
,
proofSet
,
helper
,
valid
[]
*
frontend
.
Constraint
)
{
func
VerifyMerkleProof
(
circuit
*
frontend
.
CS
,
h
mimc
.
MiMCGadget
,
merkleRoot
*
frontend
.
Constraint
,
proofSet
,
helper
,
valid
[]
*
frontend
.
Constraint
)
{
sum
:=
leafSum
(
circuit
,
h
,
proofSet
[
0
])
sum
:=
leafSum
(
circuit
,
h
,
proofSet
[
0
])
for
i
:=
1
;
i
<
len
(
proofSet
);
i
++
{
for
i
:=
1
;
i
<
len
(
proofSet
);
i
++
{
circuit
.
MUSTBE_BOOLEAN
(
helper
[
i
-
1
])
circuit
.
MUSTBE_BOOLEAN
(
helper
[
i
])
d1
:=
circuit
.
SELECT
(
helper
[
i
-
1
],
sum
,
proofSet
[
i
])
d1
:=
circuit
.
SELECT
(
helper
[
i
],
sum
,
proofSet
[
i
])
d2
:=
circuit
.
SELECT
(
helper
[
i
-
1
],
proofSet
[
i
],
sum
)
d2
:=
circuit
.
SELECT
(
helper
[
i
],
proofSet
[
i
],
sum
)
rst
:=
nodeSum
(
circuit
,
h
,
d1
,
d2
)
rst
:=
nodeSum
(
circuit
,
h
,
d1
,
d2
)
sum
=
circuit
.
SELECT
(
valid
[
i
],
rst
,
sum
)
sum
=
circuit
.
SELECT
(
valid
[
i
],
rst
,
sum
)
}
}
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize_test.go
0 → 100644
View file @
0baa7ba6
package
main
import
(
"testing"
backend_bn256
"github.com/consensys/gnark/backend/bn256"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/bn256/groth16"
)
/*
public:
treeRootHash
authorizePubKey
authorizeHash(=hash(authpubkey+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
private:
spendAmount
spendPubKey
returnPubKey
authorizePriKey
spendFlag
noteRandom
path...
helper...
valid...
*/
func
TestAuthorizeSpend
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewAuth
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Public
,
"authorizeHash"
,
"1267825436937766239630340333349685320927256968591056373125946583184548355070"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Secret
,
"spendAmount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePriKey"
,
"17822967620457187568904804290291537271142779717280482398091401115827760898835"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
//nodehash="16308793397024662832064523892418908145900866571524124093537199035808550255649"
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"19561523370160677851616596032513161448778901506614020103852017946679781620105"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"13898857070666440684265042188056372750257678232709763835292910585848522658637"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"15019169196974879571470243100379529757970866395477207575033769902587972032431"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid9"
,
"0"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/circuit/deposit.go
View file @
0baa7ba6
...
@@ -19,9 +19,9 @@ public:
...
@@ -19,9 +19,9 @@ public:
amount
amount
private:
private:
spendPub
k
ey
spendPub
K
ey
returnPub
k
ey
returnPub
K
ey
authorizePub
k
ey
authorizePub
K
ey
noteRandom
noteRandom
*/
*/
...
@@ -34,9 +34,9 @@ func NewDeposit() *frontend.R1CS {
...
@@ -34,9 +34,9 @@ func NewDeposit() *frontend.R1CS {
spendValue
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
spendValue
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spendPub
k
ey"
)
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spendPub
K
ey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPub
k
ey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPub
K
ey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePub
k
ey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePub
K
ey"
)
// hash function
// hash function
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
...
@@ -49,7 +49,7 @@ func NewDeposit() *frontend.R1CS {
...
@@ -49,7 +49,7 @@ func NewDeposit() *frontend.R1CS {
noteHash
:=
circuit
.
PUBLIC_INPUT
(
"noteHash"
)
noteHash
:=
circuit
.
PUBLIC_INPUT
(
"noteHash"
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
returnPubkey
,
authPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
returnPubkey
,
authPubkey
,
spendValue
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
mimc
.
Hash
(
&
circuit
,
preImage
)
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
r1cs
:=
circuit
.
ToR1CS
()
r1cs
:=
circuit
.
ToR1CS
()
...
...
plugin/dapp/mix/cmd/gnark/circuit/deposit_test.go
0 → 100644
View file @
0baa7ba6
package
main
import
(
"testing"
backend_bn256
"github.com/consensys/gnark/backend/bn256"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/bn256/groth16"
)
/*
public:
nodeHash
amount
private:
spendPubkey
returnPubkey
authorizePubkey
noteRandom
*/
func
TestDeposit
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
//spend prikey="10190477835300927557649934238820360529458681672073866116232821892325659279502"
//spend pubkey="13735985067536865723202617343666111332145536963656464451727087263423649028705"
//return prikey="7969140283216448215269095418467361784159407896899334866715345504515077887397"
//return pubkey="16067249407809359746114321133992130903102335882983385972747813693681808870497"
//authorize prikey="17822967620457187568904804290291537271142779717280482398091401115827760898835"
//authorize pubkey="13519883267141251871527102103999205179714486518503885909948192364772977661583"
r1cs
:=
NewDeposit
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/circuit/transferInput.go
View file @
0baa7ba6
package
main
package
main
import
(
import
(
"strconv"
"github.com/consensys/gnark/encoding/gob"
"github.com/consensys/gnark/encoding/gob"
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/frontend"
twistededwards_gadget
"github.com/consensys/gnark/gadgets/algebra/twistededwards"
twistededwards_gadget
"github.com/consensys/gnark/gadgets/algebra/twistededwards"
...
@@ -48,10 +46,10 @@ func NewTransferInput() *frontend.R1CS {
...
@@ -48,10 +46,10 @@ func NewTransferInput() *frontend.R1CS {
spendValue
:=
circuit
.
SECRET_INPUT
(
"spendAmount"
)
spendValue
:=
circuit
.
SECRET_INPUT
(
"spendAmount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spendPub
k
ey"
)
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spendPub
K
ey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPub
k
ey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPub
K
ey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePub
k
ey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePub
K
ey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPri
k
ey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPri
K
ey"
)
//spend_flag 0:return_pubkey, 1: spend_pubkey
//spend_flag 0:return_pubkey, 1: spend_pubkey
spendFlag
:=
circuit
.
SECRET_INPUT
(
"spendFlag"
)
spendFlag
:=
circuit
.
SECRET_INPUT
(
"spendFlag"
)
circuit
.
MUSTBE_BOOLEAN
(
spendFlag
)
circuit
.
MUSTBE_BOOLEAN
(
spendFlag
)
...
@@ -69,25 +67,29 @@ func NewTransferInput() *frontend.R1CS {
...
@@ -69,25 +67,29 @@ func NewTransferInput() *frontend.R1CS {
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
//need check in database if not null
//need check in database if not null
authHash
:=
circuit
.
PUBLIC_INPUT
(
"authorizeHash"
)
authHash
:=
circuit
.
PUBLIC_INPUT
(
"authorize
Spend
Hash"
)
nullValue
:=
circuit
.
ALLOCATE
(
"null"
)
nullValue
:=
circuit
.
ALLOCATE
(
0
)
// specify auth hash constraint
//
//
specify auth hash constraint
calcAuthHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spendValue
,
noteRandom
)
calcAuth
Spend
Hash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spendValue
,
noteRandom
)
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuth
Spend
Hash
,
nullValue
)
circuit
.
MUSTBE_EQ
(
authHash
,
targetAuthHash
)
circuit
.
MUSTBE_EQ
(
authHash
,
targetAuthHash
)
//need check in database if not null
nullifierHash
:=
circuit
.
PUBLIC_INPUT
(
"nullifierHash"
)
calcNullifierHash
:=
mimc
.
Hash
(
&
circuit
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
nullifierHash
,
calcNullifierHash
)
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
calcReturnPubkey
:=
circuit
.
SELECT
(
authFlag
,
returnPubkey
,
nullValue
)
calcReturnPubkey
:=
circuit
.
SELECT
(
authFlag
,
returnPubkey
,
nullValue
)
calcAuthPubkey
:=
circuit
.
SELECT
(
authFlag
,
authPubkey
,
nullValue
)
calcAuthPubkey
:=
circuit
.
SELECT
(
authFlag
,
authPubkey
,
nullValue
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
mimc
.
Hash
(
&
circuit
,
preImage
)
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
commitValuePart
(
&
circuit
,
spendValue
)
commitValuePart
(
&
circuit
,
spendValue
)
merkelPathPart
(
&
circuit
,
mimc
,
noteHash
)
merkelPathPart
(
&
circuit
,
mimc
,
preImage
)
r1cs
:=
circuit
.
ToR1CS
()
r1cs
:=
circuit
.
ToR1CS
()
...
@@ -131,18 +133,3 @@ func commitValuePart(circuit *frontend.CS, spendValue *frontend.Constraint) {
...
@@ -131,18 +133,3 @@ func commitValuePart(circuit *frontend.CS, spendValue *frontend.Constraint) {
circuit
.
MUSTBE_EQ
(
cmtvalueX
,
pointSumSnark
.
X
)
circuit
.
MUSTBE_EQ
(
cmtvalueX
,
pointSumSnark
.
X
)
circuit
.
MUSTBE_EQ
(
cmtvalueY
,
pointSumSnark
.
Y
)
circuit
.
MUSTBE_EQ
(
cmtvalueY
,
pointSumSnark
.
Y
)
}
}
func
merkelPathPart
(
circuit
*
frontend
.
CS
,
mimc
mimc
.
MiMCGadget
,
noteHash
*
frontend
.
Constraint
)
{
var
proofSet
,
helper
,
valid
[]
*
frontend
.
Constraint
merkleRoot
:=
circuit
.
PUBLIC_INPUT
(
"treeRootHash"
)
proofSet
=
append
(
proofSet
,
noteHash
)
//depth:10, path num need be 9
for
i
:=
1
;
i
<
10
;
i
++
{
proofSet
=
append
(
proofSet
,
circuit
.
SECRET_INPUT
(
"path"
+
strconv
.
Itoa
(
i
)))
helper
=
append
(
helper
,
circuit
.
SECRET_INPUT
(
"helper"
+
strconv
.
Itoa
(
i
)))
valid
=
append
(
valid
,
circuit
.
SECRET_INPUT
(
"valid"
+
strconv
.
Itoa
(
i
)))
}
VerifyMerkleProof
(
circuit
,
mimc
,
merkleRoot
,
proofSet
,
helper
,
valid
)
}
plugin/dapp/mix/cmd/gnark/circuit/transferOutput.go
View file @
0baa7ba6
...
@@ -51,7 +51,7 @@ func NewTransferOutput() *frontend.R1CS {
...
@@ -51,7 +51,7 @@ func NewTransferOutput() *frontend.R1CS {
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
returnPubkey
,
authPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
returnPubkey
,
authPubkey
,
spendValue
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
mimc
.
Hash
(
&
circuit
,
preImage
)
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
commitValuePart
(
&
circuit
,
spendValue
)
commitValuePart
(
&
circuit
,
spendValue
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferOutput_test.go
0 → 100644
View file @
0baa7ba6
package
main
import
(
"testing"
backend_bn256
"github.com/consensys/gnark/backend/bn256"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/bn256/groth16"
)
/*
public:
commitValueX
commitValueY
nodeHash
private:
spendAmount
spendRandom
spendPubKey
returnPubKey
authorizePubKey
noteRandom
*/
func
TestTransferOutput
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewTransferOutput
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"commitValueX"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"commitValueY"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"nodeHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Secret
,
"spendAmount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendRandom"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/circuit/transferinput_test.go
0 → 100644
View file @
0baa7ba6
package
main
import
(
"testing"
backend_bn256
"github.com/consensys/gnark/backend/bn256"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/bn256/groth16"
)
/*
public:
treeRootHash
commitValueX
commitValueY
authorizeHash
nullifierHash
private:
spendAmount
spendRandom
spendPubKey
returnPubKey
authorizePubKey
spendPriKey
spendFlag
authorizeFlag
noteRandom
path...
helper...
valid...
*/
func
TestTransferInputAuth
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewTransferInput
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"commitValueX"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"commitValueY"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Secret
,
"spendAmount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendRandom"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"spendPriKey"
,
"10190477835300927557649934238820360529458681672073866116232821892325659279502"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"authorizeFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
//nodehash="16308793397024662832064523892418908145900866571524124093537199035808550255649"
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"19561523370160677851616596032513161448778901506614020103852017946679781620105"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"13898857070666440684265042188056372750257678232709763835292910585848522658637"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"15019169196974879571470243100379529757970866395477207575033769902587972032431"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid9"
,
"0"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
func
TestTransferInputReturnKey
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewTransferInput
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"commitValueX"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"commitValueY"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"6026163592877030954825395224309219861774131411806846860652261047183070579370"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Secret
,
"spendAmount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendRandom"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"spendPriKey"
,
"7969140283216448215269095418467361784159407896899334866715345504515077887397"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"0"
)
//not need authorize
good
.
Assign
(
backend
.
Secret
,
"authorizeFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
//nodehash="16308793397024662832064523892418908145900866571524124093537199035808550255649"
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"19561523370160677851616596032513161448778901506614020103852017946679781620105"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"13898857070666440684265042188056372750257678232709763835292910585848522658637"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"15019169196974879571470243100379529757970866395477207575033769902587972032431"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid9"
,
"0"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/circuit/withdraw.go
View file @
0baa7ba6
...
@@ -16,7 +16,7 @@ func main() {
...
@@ -16,7 +16,7 @@ func main() {
/*
/*
public:
public:
treeRootHash
treeRootHash
authorizeHash
authorize
Spend
Hash
nullifierHash
nullifierHash
amount
amount
...
@@ -62,9 +62,9 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -62,9 +62,9 @@ func NewWithdraw() *frontend.R1CS {
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
//need check in database if not null
//need check in database if not null
authHash
:=
circuit
.
PUBLIC_INPUT
(
"authorizeHash"
)
authHash
:=
circuit
.
PUBLIC_INPUT
(
"authorize
Spend
Hash"
)
nullValue
:=
circuit
.
ALLOCATE
(
"null"
)
nullValue
:=
circuit
.
ALLOCATE
(
0
)
// specify auth hash constraint
// specify auth hash constraint
calcAuthHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spendValue
,
noteRandom
)
calcAuthHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spendValue
,
noteRandom
)
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
...
@@ -77,9 +77,9 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -77,9 +77,9 @@ func NewWithdraw() *frontend.R1CS {
calcAuthPubkey
:=
circuit
.
SELECT
(
authFlag
,
authPubkey
,
nullValue
)
calcAuthPubkey
:=
circuit
.
SELECT
(
authFlag
,
authPubkey
,
nullValue
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubkey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
mimc
.
Hash
(
&
circuit
,
preImage
)
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
merkelPathPart
(
&
circuit
,
mimc
,
noteHash
)
merkelPathPart
(
&
circuit
,
mimc
,
preImage
)
r1cs
:=
circuit
.
ToR1CS
()
r1cs
:=
circuit
.
ToR1CS
()
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw_test.go
0 → 100644
View file @
0baa7ba6
package
main
import
(
"testing"
backend_bn256
"github.com/consensys/gnark/backend/bn256"
"github.com/consensys/gnark/backend"
"github.com/consensys/gnark/backend/bn256/groth16"
)
/*
public:
treeRootHash
authorizeHash
nullifierHash
amount
private:
spendPubKey
returnPubKey
authorizePubKey
spendPriKey
spendFlag
authorizeFlag
noteRandom
path...
helper...
valid...
*/
func
TestWithdraw
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewWithdraw
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"spendPriKey"
,
"10190477835300927557649934238820360529458681672073866116232821892325659279502"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"authorizeFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
//nodehash="16308793397024662832064523892418908145900866571524124093537199035808550255649"
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"19561523370160677851616596032513161448778901506614020103852017946679781620105"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"13898857070666440684265042188056372750257678232709763835292910585848522658637"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"15019169196974879571470243100379529757970866395477207575033769902587972032431"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid7"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid9"
,
"0"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/input/transferInput
View file @
0baa7ba6
public, treeRootHash,
0x2afea5c28f761f42f35cca471170ca072cbe4b69b6b18c4a3b45637e974783c4
public, treeRootHash,
10531321614990797034921282585661869614556487056951485265320464926630499341310
public, commitValueX,
9940039130125917226477779823200431190767730273667531970219395440191717439673
public, commitValueX,
14087975867275911077371231345227824611951436822132762463787130558957838320348
public, commitValueY,
9940039130125917226477779823200431190767730273667531970219395440191717439673
public, commitValueY,
15113519960384204624879642069520481336224311978035289236693658603675385299879
public, authorize
Hash,0x2afea5c28f761f42f35cca471170ca072cbe4b69b6b18c4a3b45637e974783c4
public, authorize
SpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
public, nullifierHash,
0x2afea5c28f761f42f35cca471170ca072cbe4b69b6b18c4a3b45637e974783c4
public, nullifierHash,
6747518781649068310795677405858353007442326529625450860668944156162052335195
secret, spendAmount,28242048
secret, spendAmount,28242048
secret, spendRandom,
1000
secret, spendRandom,
35
secret, spendPubKey,
9940039130125917226477779823200431190767730273667531970219395440191717439673
secret, spendPubKey,
13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,
9940039130125917226477779823200431190767730273667531970219395440191717439673
secret, returnPubKey,
16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePubKey,
994003913012591722647777982320043119076773027366753197021939544019171743967
3
secret, authorizePubKey,
1351988326714125187152710210399920517971448651850388590994819236477297766158
3
secret, spendPriKey,1
9226210204356004706765360050059680583735587569269469539941275797408975356275
secret, spendPriKey,1
0190477835300927557649934238820360529458681672073866116232821892325659279502
secret, spendFlag,
0
secret, spendFlag,
1
secret, authorizeFlag,
0
secret, authorizeFlag,
1
secret, noteRandom,28242048
secret, noteRandom,28242048
35
secret, noteHash,16308793397024662832064523892418908145900866571524124093537199035808550255649
secret, path0,1e44c73ba7980b0450a8e997c9d9c78be5a9d7ceaf597df781469a1c9db4e4c9
secret, path1,19
1a80e377af9e0d04e1d75e8d702d4c2db21b952b9fff6bcca31f9e9fd5de00
secret, path1,19
561523370160677851616596032513161448778901506614020103852017946679781620105
secret, path2,
220dc2041a8c81086a9bc8084e7f9ee0788ae2c8b7928e0b2e2672339b2933b3
secret, path2,
13898857070666440684265042188056372750257678232709763835292910585848522658637
secret, path3,
295d631fcf0ed0d34742ac560fe7a0c0585225cff9194806d4d9d8e1f00e1747
secret, path3,
15019169196974879571470243100379529757970866395477207575033769902587972032431
secret, path4,
215849ad7bd4344a807f4f0c9aefd2131572e3cb21a8b21aa96e8a11c4a214e5
secret, path4,
0
secret, path5,0
secret, path5,0
secret, path6,0
secret, path6,0
secret, path7,0
secret, path7,0
secret, path8,0
secret, path8,0
secret, path9,0
secret, path9,0
secret, path10,0
secret, helper1,1
secret, helper1,1
secret, helper2,1
secret, helper2,1
...
@@ -36,19 +36,19 @@ secret, helper6,1
...
@@ -36,19 +36,19 @@ secret, helper6,1
secret, helper7,1
secret, helper7,1
secret, helper8,1
secret, helper8,1
secret, helper9,1
secret, helper9,1
secret, helper10,1
secret, valid0,1
secret, valid1,1
secret, valid1,1
secret, valid2,1
secret, valid2,1
secret, valid3,1
secret, valid3,1
secret, valid4,
1
secret, valid4,
0
secret, valid5,0
secret, valid5,0
secret, valid6,0
secret, valid6,0
secret, valid7,0
secret, valid7,0
secret, valid8,0
secret, valid8,0
secret, valid9,0
secret, valid9,0
secret, valid10,0
plugin/dapp/mix/executor/transfer_test.go
View file @
0baa7ba6
...
@@ -37,3 +37,30 @@ func TestVerifyCommitValues(t *testing.T) {
...
@@ -37,3 +37,30 @@ func TestVerifyCommitValues(t *testing.T) {
assert
.
Equal
(
t
,
true
,
ret
)
assert
.
Equal
(
t
,
true
,
ret
)
}
}
func
TestVerifyCommitValues2
(
t
*
testing
.
T
)
{
input1
:=
&
mixTy
.
TransferInputPublicInput
{
CommitValueX
:
"10190477835300927557649934238820360529458681672073866116232821892325659279502"
,
CommitValueY
:
"7969140283216448215269095418467361784159407896899334866715345504515077887397"
,
}
input2
:=
&
mixTy
.
TransferInputPublicInput
{
CommitValueX
:
"17822967620457187568904804290291537271142779717280482398091401115827760898835"
,
CommitValueY
:
"17714526567340249480661526843742175665966437069228179299143955140199226385576"
,
}
var
inputs
[]
*
mixTy
.
TransferInputPublicInput
inputs
=
append
(
inputs
,
input1
)
inputs
=
append
(
inputs
,
input2
)
output1
:=
&
mixTy
.
TransferOutputPublicInput
{
CommitValueX
:
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
,
CommitValueY
:
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
,
}
var
outputs
[]
*
mixTy
.
TransferOutputPublicInput
outputs
=
append
(
outputs
,
output1
)
ret
:=
verifyCommitValues
(
inputs
,
outputs
)
assert
.
Equal
(
t
,
true
,
ret
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment