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
d5900775
Commit
d5900775
authored
Jan 26, 2021
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debug transfer pass
parent
4073c798
Show whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
649 additions
and
550 deletions
+649
-550
docker-compose.sh
build/docker-compose.sh
+1
-0
authorize.go
plugin/dapp/mix/cmd/gnark/circuit/authorize/authorize.go
+7
-8
authorize_test.go
...in/dapp/mix/cmd/gnark/circuit/authorize/authorize_test.go
+4
-4
input
plugin/dapp/mix/cmd/gnark/circuit/authorize/input
+2
-2
deposit.go
plugin/dapp/mix/cmd/gnark/circuit/deposit/deposit.go
+3
-3
deposit_test.go
plugin/dapp/mix/cmd/gnark/circuit/deposit/deposit_test.go
+2
-2
input
plugin/dapp/mix/cmd/gnark/circuit/deposit/input
+1
-1
input
plugin/dapp/mix/cmd/gnark/circuit/transferInput/input
+5
-5
transferInput.go
...dapp/mix/cmd/gnark/circuit/transferInput/transferInput.go
+8
-8
transferinput_test.go
...mix/cmd/gnark/circuit/transferInput/transferinput_test.go
+31
-31
input
plugin/dapp/mix/cmd/gnark/circuit/transferOutput/input
+5
-5
transferOutput.go
...pp/mix/cmd/gnark/circuit/transferOutput/transferOutput.go
+8
-8
transferOutput_test.go
...x/cmd/gnark/circuit/transferOutput/transferOutput_test.go
+64
-12
util.go
plugin/dapp/mix/cmd/gnark/circuit/util.go
+3
-3
input
plugin/dapp/mix/cmd/gnark/circuit/withdraw/input
+1
-1
withdraw.go
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw.go
+4
-4
withdraw_test.go
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw_test.go
+2
-2
mix.go
plugin/dapp/mix/commands/mix.go
+29
-29
committree.go
plugin/dapp/mix/executor/committree.go
+1
-0
config.go
plugin/dapp/mix/executor/config.go
+3
-3
mix.go
plugin/dapp/mix/executor/mix.go
+3
-3
transfer.go
plugin/dapp/mix/executor/transfer.go
+9
-8
mix.proto
plugin/dapp/mix/proto/mix.proto
+31
-32
mix.pb.go
plugin/dapp/mix/types/mix.pb.go
+280
-280
mix.go
plugin/dapp/mix/wallet/mix.go
+23
-14
mixbizdb.go
plugin/dapp/mix/wallet/mixbizdb.go
+17
-14
mixbiztable.go
plugin/dapp/mix/wallet/mixbiztable.go
+1
-1
mixsignature.go
plugin/dapp/mix/wallet/mixsignature.go
+10
-11
mixstore.go
plugin/dapp/mix/wallet/mixstore.go
+8
-0
proof.go
plugin/dapp/mix/wallet/proof.go
+83
-56
No files found.
build/docker-compose.sh
View file @
d5900775
...
@@ -245,6 +245,7 @@ function miner() {
...
@@ -245,6 +245,7 @@ function miner() {
fi
fi
}
}
function
block_wait
()
{
function
block_wait
()
{
if
[
"$#"
-lt
2
]
;
then
if
[
"$#"
-lt
2
]
;
then
echo
"wrong block_wait params"
echo
"wrong block_wait params"
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize/authorize.go
View file @
d5900775
...
@@ -22,10 +22,9 @@ public:
...
@@ -22,10 +22,9 @@ public:
authorizeSpendHash(=hash(spendpub+value+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
private:
private:
spendA
mount
a
mount
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePriKey
authorizePriKey
spendFlag
spendFlag
noteRandom
noteRandom
...
@@ -40,10 +39,10 @@ func NewAuth() *frontend.R1CS {
...
@@ -40,10 +39,10 @@ func NewAuth() *frontend.R1CS {
// create root constraint system
// create root constraint system
circuit
:=
frontend
.
New
()
circuit
:=
frontend
.
New
()
spendAmount
:=
circuit
.
SECRET_INPUT
(
"spendA
mount"
)
amount
:=
circuit
.
SECRET_INPUT
(
"a
mount"
)
//spend pubkey
//spend pubkey
spendPubKey
:=
circuit
.
SECRET_INPUT
(
"spend
PubKey"
)
receiverPubKey
:=
circuit
.
SECRET_INPUT
(
"receiver
PubKey"
)
returnPubKey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubKey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"authorizePriKey"
)
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"authorizePriKey"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"noteRandom"
)
...
@@ -63,13 +62,13 @@ func NewAuth() *frontend.R1CS {
...
@@ -63,13 +62,13 @@ func NewAuth() *frontend.R1CS {
//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
,
spend
PubKey
,
returnPubKey
)
targetPubHash
:=
circuit
.
SELECT
(
spendFlag
,
receiver
PubKey
,
returnPubKey
)
calcAuthSpendHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
spendA
mount
,
noteRandom
)
calcAuthSpendHash
:=
mimc
.
Hash
(
&
circuit
,
targetPubHash
,
a
mount
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
authSpendHash
,
calcAuthSpendHash
)
circuit
.
MUSTBE_EQ
(
authSpendHash
,
calcAuthSpendHash
)
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubKey
,
returnPubKey
,
authPubKey
,
spendA
mount
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
receiverPubKey
,
returnPubKey
,
authPubKey
,
a
mount
,
noteRandom
)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
noteHash
:=
circuit
.
SECRET_INPUT
(
"noteHash"
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize/authorize_test.go
View file @
d5900775
...
@@ -17,8 +17,8 @@ public:
...
@@ -17,8 +17,8 @@ public:
authorizeSpendHash(=hash(spendpub+value+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
private:
private:
spendA
mount
a
mount
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePriKey
authorizePriKey
spendFlag
spendFlag
...
@@ -41,8 +41,8 @@ func TestAuthorizeSpend(t *testing.T) {
...
@@ -41,8 +41,8 @@ func TestAuthorizeSpend(t *testing.T) {
good
.
Assign
(
backend
.
Public
,
"authorizeHash"
,
"1267825436937766239630340333349685320927256968591056373125946583184548355070"
)
good
.
Assign
(
backend
.
Public
,
"authorizeHash"
,
"1267825436937766239630340333349685320927256968591056373125946583184548355070"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Secret
,
"
spendA
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
a
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePriKey"
,
"17822967620457187568904804290291537271142779717280482398091401115827760898835"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePriKey"
,
"17822967620457187568904804290291537271142779717280482398091401115827760898835"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize/input
View file @
d5900775
...
@@ -4,8 +4,8 @@ public, authorizeHash,1267825436937766239630340333349685320927256968591056373125
...
@@ -4,8 +4,8 @@ public, authorizeHash,1267825436937766239630340333349685320927256968591056373125
public, authorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
public, authorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
secret,
spendA
mount,28242048
secret,
a
mount,28242048
secret,
spend
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret,
receiver
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePriKey,17822967620457187568904804290291537271142779717280482398091401115827760898835
secret, authorizePriKey,17822967620457187568904804290291537271142779717280482398091401115827760898835
secret, spendFlag,1
secret, spendFlag,1
...
...
plugin/dapp/mix/cmd/gnark/circuit/deposit/deposit.go
View file @
d5900775
...
@@ -19,7 +19,7 @@ public:
...
@@ -19,7 +19,7 @@ public:
amount
amount
private:
private:
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
noteRandom
noteRandom
...
@@ -34,7 +34,7 @@ func NewDeposit() *frontend.R1CS {
...
@@ -34,7 +34,7 @@ func NewDeposit() *frontend.R1CS {
amount
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
amount
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spend
PubKey"
)
receiverPubKey
:=
circuit
.
SECRET_INPUT
(
"receiver
PubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
...
@@ -48,7 +48,7 @@ func NewDeposit() *frontend.R1CS {
...
@@ -48,7 +48,7 @@ func NewDeposit() *frontend.R1CS {
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
noteHash
:=
circuit
.
PUBLIC_INPUT
(
"noteHash"
)
noteHash
:=
circuit
.
PUBLIC_INPUT
(
"noteHash"
)
// specify note hash constraint
// specify note hash constraint
preImage
:=
mimc
.
Hash
(
&
circuit
,
spendPubk
ey
,
returnPubkey
,
authPubkey
,
amount
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
receiverPubK
ey
,
returnPubkey
,
authPubkey
,
amount
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
r1cs
:=
circuit
.
ToR1CS
()
r1cs
:=
circuit
.
ToR1CS
()
...
...
plugin/dapp/mix/cmd/gnark/circuit/deposit/deposit_test.go
View file @
d5900775
...
@@ -15,7 +15,7 @@ public:
...
@@ -15,7 +15,7 @@ public:
amount
amount
private:
private:
spendPubk
ey
receiverPubK
ey
returnPubkey
returnPubkey
authorizePubkey
authorizePubkey
noteRandom
noteRandom
...
@@ -45,7 +45,7 @@ func TestDeposit(t *testing.T) {
...
@@ -45,7 +45,7 @@ func TestDeposit(t *testing.T) {
good
.
Assign
(
backend
.
Public
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Public
,
"noteHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"2824204835"
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/deposit/input
View file @
d5900775
...
@@ -2,7 +2,7 @@ public, noteHash,163087933970246628320645238924189081459008665715241240935371990
...
@@ -2,7 +2,7 @@ public, noteHash,163087933970246628320645238924189081459008665715241240935371990
public, amount,28242048
public, amount,28242048
secret,
spend
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret,
receiver
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, noteRandom,2824204835
secret, noteRandom,2824204835
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferInput/input
View file @
d5900775
public, treeRootHash,10531321614990797034921282585661869614556487056951485265320464926630499341310
public, treeRootHash,10531321614990797034921282585661869614556487056951485265320464926630499341310
public,
commitValue
X,14087975867275911077371231345227824611951436822132762463787130558957838320348
public,
shieldAmount
X,14087975867275911077371231345227824611951436822132762463787130558957838320348
public,
commitValue
Y,15113519960384204624879642069520481336224311978035289236693658603675385299879
public,
shieldAmount
Y,15113519960384204624879642069520481336224311978035289236693658603675385299879
public, authorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
public, authorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
public, nullifierHash,6747518781649068310795677405858353007442326529625450860668944156162052335195
public, nullifierHash,6747518781649068310795677405858353007442326529625450860668944156162052335195
secret,
spendA
mount,28242048
secret,
a
mount,28242048
secret,
spend
Random,35
secret,
amount
Random,35
secret,
spend
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret,
receiver
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, spendPriKey,10190477835300927557649934238820360529458681672073866116232821892325659279502
secret, spendPriKey,10190477835300927557649934238820360529458681672073866116232821892325659279502
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferInput/transferInput.go
View file @
d5900775
...
@@ -17,15 +17,15 @@ func main() {
...
@@ -17,15 +17,15 @@ func main() {
/*
/*
public:
public:
treeRootHash
treeRootHash
commitValue
X
shieldAmount
X
commitValue
Y
shieldAmount
Y
authorizeHash
authorize
Spend
Hash
nullifierHash
nullifierHash
private:
private:
spendA
mount
a
mount
spend
Random
amount
Random
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
spendPriKey
spendPriKey
...
@@ -42,10 +42,10 @@ func NewTransferInput() *frontend.R1CS {
...
@@ -42,10 +42,10 @@ func NewTransferInput() *frontend.R1CS {
// create root constraint system
// create root constraint system
circuit
:=
frontend
.
New
()
circuit
:=
frontend
.
New
()
spendValue
:=
circuit
.
SECRET_INPUT
(
"
spendA
mount"
)
spendValue
:=
circuit
.
SECRET_INPUT
(
"
a
mount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"
spend
PubKey"
)
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"
receiver
PubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPriKey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPriKey"
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferInput/transferinput_test.go
View file @
d5900775
...
@@ -12,15 +12,15 @@ import (
...
@@ -12,15 +12,15 @@ import (
/*
/*
public:
public:
treeRootHash
treeRootHash
commitValue
X
shieldAmount
X
commitValue
Y
shieldAmount
Y
authorizeHash
authorizeHash
nullifierHash
nullifierHash
private:
private:
spendA
mount
a
mount
spend
Random
amount
Random
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
spendPriKey
spendPriKey
...
@@ -41,15 +41,15 @@ func TestTransferInputAuth(t *testing.T) {
...
@@ -41,15 +41,15 @@ func TestTransferInputAuth(t *testing.T) {
{
{
good
:=
backend
.
NewAssignment
()
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"
commitValue
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
commitValue
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"14468512365438613046028281588661351435476168610934165547900473609197783547663"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Secret
,
"
spendA
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
a
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
amount
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
...
@@ -106,15 +106,15 @@ func TestTransferInputReturnKey(t *testing.T) {
...
@@ -106,15 +106,15 @@ func TestTransferInputReturnKey(t *testing.T) {
{
{
good
:=
backend
.
NewAssignment
()
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"10531321614990797034921282585661869614556487056951485265320464926630499341310"
)
good
.
Assign
(
backend
.
Public
,
"
commitValue
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
commitValue
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"6026163592877030954825395224309219861774131411806846860652261047183070579370"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"6026163592877030954825395224309219861774131411806846860652261047183070579370"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Secret
,
"
spendA
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
a
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
amount
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
...
@@ -172,31 +172,31 @@ func TestTransferInputNoAuthorize(t *testing.T) {
...
@@ -172,31 +172,31 @@ func TestTransferInputNoAuthorize(t *testing.T) {
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
{
good
:=
backend
.
NewAssignment
()
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"
12759256930628441934094267209403003086804595141527597228422519500766117029056
"
)
good
.
Assign
(
backend
.
Public
,
"treeRootHash"
,
"
8924377726623516198388981994706612588174229761660626844219523809311621081152
"
)
good
.
Assign
(
backend
.
Public
,
"
commitValueX"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348
"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmountX"
,
"20026900249169569699397829614948056401416692452575929785554743563301443795984
"
)
good
.
Assign
(
backend
.
Public
,
"
commitValueY"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879
"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmountY"
,
"11443294504840468048882645872852838384649876010412151915870299030068051779303
"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"0"
)
good
.
Assign
(
backend
.
Public
,
"authorizeSpendHash"
,
"0"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"
6747518781649068310795677405858353007442326529625450860668944156162052335195
"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"
4493238794492517147695618716694376637191823831910850819304582851540887491471
"
)
good
.
Assign
(
backend
.
Secret
,
"
spendAmount"
,
"28242048
"
)
good
.
Assign
(
backend
.
Secret
,
"
amount"
,
"500000000
"
)
good
.
Assign
(
backend
.
Secret
,
"
spendRandom"
,
"35
"
)
good
.
Assign
(
backend
.
Secret
,
"
amountRandom"
,
"103649245823269378598256096359743803233
"
)
good
.
Assign
(
backend
.
Secret
,
"
spendPubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705
"
)
good
.
Assign
(
backend
.
Secret
,
"
receiverPubKey"
,
"7244551457692363731356498279463138379576484998878425864678733206990733443457
"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"spendPriKey"
,
"1
0190477835300927557649934238820360529458681672073866116232821892325659279502
"
)
good
.
Assign
(
backend
.
Secret
,
"spendPriKey"
,
"1
9115616183616714814727844928908633989028519974595353009754871398745087846141
"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"spendFlag"
,
"1"
)
//not need authorize
//not need authorize
good
.
Assign
(
backend
.
Secret
,
"authorizeFlag"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"authorizeFlag"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"
2824204835
"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"
16855817802811010832998322637530013398737002960466904173163094025121554818471
"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"
8225571890661960751046682712125507843232543630686326316665478955306869111251
"
)
good
.
Assign
(
backend
.
Secret
,
"noteHash"
,
"
4757455985754753449547885621755931629265767091930770913671501411452663313694
"
)
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"
14187514855908861960780770215596905690354960378277143432325960729637725182251
"
)
good
.
Assign
(
backend
.
Secret
,
"path1"
,
"
21609869341494920403470153054548069228540665950349313465330160010270609674984
"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"
6182134257436688306324731906502075484313942414837318361329615447955128796497
"
)
good
.
Assign
(
backend
.
Secret
,
"path2"
,
"
0
"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"
11546648745105756958663742750618707757021496913774959001736226397442926254652
"
)
good
.
Assign
(
backend
.
Secret
,
"path3"
,
"
0
"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path6"
,
"0"
)
...
@@ -204,7 +204,7 @@ func TestTransferInputNoAuthorize(t *testing.T) {
...
@@ -204,7 +204,7 @@ func TestTransferInputNoAuthorize(t *testing.T) {
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path8"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"path9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"
1
"
)
good
.
Assign
(
backend
.
Secret
,
"helper1"
,
"
0
"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper2"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper3"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper4"
,
"0"
)
...
@@ -215,8 +215,8 @@ func TestTransferInputNoAuthorize(t *testing.T) {
...
@@ -215,8 +215,8 @@ func TestTransferInputNoAuthorize(t *testing.T) {
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"helper9"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid1"
,
"1"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"
1
"
)
good
.
Assign
(
backend
.
Secret
,
"valid2"
,
"
0
"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"
1
"
)
good
.
Assign
(
backend
.
Secret
,
"valid3"
,
"
0
"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid4"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid5"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"valid6"
,
"0"
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferOutput/input
View file @
d5900775
public,
commitValue
X,14087975867275911077371231345227824611951436822132762463787130558957838320348
public,
shieldAmount
X,14087975867275911077371231345227824611951436822132762463787130558957838320348
public,
commitValue
Y,15113519960384204624879642069520481336224311978035289236693658603675385299879
public,
shieldAmount
Y,15113519960384204624879642069520481336224311978035289236693658603675385299879
public, noteHash,16308793397024662832064523892418908145900866571524124093537199035808550255649
public, noteHash,16308793397024662832064523892418908145900866571524124093537199035808550255649
secret,
spendA
mount,28242048
secret,
a
mount,28242048
secret,
spend
Random,35
secret,
amount
Random,35
secret,
spend
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret,
receiver
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, noteRandom,2824204835
secret, noteRandom,2824204835
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferOutput/transferOutput.go
View file @
d5900775
...
@@ -16,14 +16,14 @@ func main() {
...
@@ -16,14 +16,14 @@ func main() {
//spend commit hash the circuit implementing
//spend commit hash the circuit implementing
/*
/*
public:
public:
commitValue
X
shieldAmount
X
commitValue
Y
shieldAmount
Y
no
d
eHash
no
t
eHash
private:
private:
spendA
mount
a
mount
spend
Random
amount
Random
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
noteRandom
noteRandom
...
@@ -34,10 +34,10 @@ func NewTransferOutput() *frontend.R1CS {
...
@@ -34,10 +34,10 @@ func NewTransferOutput() *frontend.R1CS {
// create root constraint system
// create root constraint system
circuit
:=
frontend
.
New
()
circuit
:=
frontend
.
New
()
spendValue
:=
circuit
.
SECRET_INPUT
(
"
spendA
mount"
)
spendValue
:=
circuit
.
SECRET_INPUT
(
"
a
mount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"
spend
PubKey"
)
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"
receiver
PubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/transferOutput/transferOutput_test.go
View file @
d5900775
...
@@ -11,14 +11,14 @@ import (
...
@@ -11,14 +11,14 @@ import (
/*
/*
public:
public:
commitValue
X
shieldAmount
X
commitValue
Y
shieldAmount
Y
no
d
eHash
no
t
eHash
private:
private:
spendA
mount
a
mount
spend
Random
amount
Random
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
noteRandom
noteRandom
...
@@ -32,14 +32,14 @@ func TestTransferOutput(t *testing.T) {
...
@@ -32,14 +32,14 @@ func TestTransferOutput(t *testing.T) {
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
{
good
:=
backend
.
NewAssignment
()
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"
commitValue
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
X"
,
"14087975867275911077371231345227824611951436822132762463787130558957838320348"
)
good
.
Assign
(
backend
.
Public
,
"
commitValue
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"
shieldAmount
Y"
,
"15113519960384204624879642069520481336224311978035289236693658603675385299879"
)
good
.
Assign
(
backend
.
Public
,
"no
d
eHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Public
,
"no
t
eHash"
,
"16308793397024662832064523892418908145900866571524124093537199035808550255649"
)
good
.
Assign
(
backend
.
Secret
,
"
spendA
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
a
mount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
amount
Random"
,
"35"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
...
@@ -49,3 +49,55 @@ func TestTransferOutput(t *testing.T) {
...
@@ -49,3 +49,55 @@ func TestTransferOutput(t *testing.T) {
}
}
}
}
func
TestTransferOutputTemp
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewTransferOutput
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"shieldAmountX"
,
"3403754862862244121869403834818720211897208891381676574399662060838495940078"
)
good
.
Assign
(
backend
.
Public
,
"shieldAmountY"
,
"21401902064308935591303802598664246616585474010691469717860664156067228175223"
)
good
.
Assign
(
backend
.
Public
,
"noteHash"
,
"13610259753835165822431524149670478281864477297016371975012414049080268826331"
)
good
.
Assign
(
backend
.
Secret
,
"amount"
,
"300000000"
)
good
.
Assign
(
backend
.
Secret
,
"amountRandom"
,
"17199160520698273243343882915453578587"
)
good
.
Assign
(
backend
.
Secret
,
"receiverPubKey"
,
"18829345085195922012068709111582461121107908772422825655963168999800303848486"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"5029847585956946251661044349066579681630691396824473307862642244158835326399"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
func
TestTransferOutputChange
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
r1cs
:=
NewTransferOutput
()
r1csBN256
:=
backend_bn256
.
Cast
(
r1cs
)
{
good
:=
backend
.
NewAssignment
()
good
.
Assign
(
backend
.
Public
,
"shieldAmountX"
,
"10703086269439751873106176219875739041896146845566831131812760688039385779519"
)
good
.
Assign
(
backend
.
Public
,
"shieldAmountY"
,
"19139103177181062461420753508628290808191900352948606822559796252948653071734"
)
good
.
Assign
(
backend
.
Public
,
"noteHash"
,
"13134546856103113099750783399130805737503059294172727906371169345876474249458"
)
good
.
Assign
(
backend
.
Secret
,
"amount"
,
"199900000"
)
good
.
Assign
(
backend
.
Secret
,
"amountRandom"
,
"86450085302571105354912213444290224646"
)
good
.
Assign
(
backend
.
Secret
,
"receiverPubKey"
,
"7244551457692363731356498279463138379576484998878425864678733206990733443457"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"0"
)
good
.
Assign
(
backend
.
Secret
,
"noteRandom"
,
"7266395330102686861165120582739238575545854195882356283931287331463151808870"
)
assert
.
Solved
(
&
r1csBN256
,
good
,
nil
)
}
}
plugin/dapp/mix/cmd/gnark/circuit/util.go
View file @
d5900775
...
@@ -65,8 +65,8 @@ func leafSum(circuit *frontend.CS, h mimc.MiMCGadget, data *frontend.Constraint)
...
@@ -65,8 +65,8 @@ func leafSum(circuit *frontend.CS, h mimc.MiMCGadget, data *frontend.Constraint)
func
CommitValuePart
(
circuit
*
frontend
.
CS
,
spendValue
*
frontend
.
Constraint
)
{
func
CommitValuePart
(
circuit
*
frontend
.
CS
,
spendValue
*
frontend
.
Constraint
)
{
//cmt=transfer_value*G + random_value*H
//cmt=transfer_value*G + random_value*H
cmtvalueX
:=
circuit
.
PUBLIC_INPUT
(
"
commitValue
X"
)
cmtvalueX
:=
circuit
.
PUBLIC_INPUT
(
"
shieldAmount
X"
)
cmtvalueY
:=
circuit
.
PUBLIC_INPUT
(
"
commitValue
Y"
)
cmtvalueY
:=
circuit
.
PUBLIC_INPUT
(
"
shieldAmount
Y"
)
// set curve parameters
// set curve parameters
edgadget
,
_
:=
twistededwards_gadget
.
NewEdCurveGadget
(
gurvy
.
BN256
)
edgadget
,
_
:=
twistededwards_gadget
.
NewEdCurveGadget
(
gurvy
.
BN256
)
...
@@ -84,7 +84,7 @@ func CommitValuePart(circuit *frontend.CS, spendValue *frontend.Constraint) {
...
@@ -84,7 +84,7 @@ func CommitValuePart(circuit *frontend.CS, spendValue *frontend.Constraint) {
pointGSnark
.
X
.
Tag
(
"xg"
)
pointGSnark
.
X
.
Tag
(
"xg"
)
pointGSnark
.
Y
.
Tag
(
"yg"
)
pointGSnark
.
Y
.
Tag
(
"yg"
)
transfer_random
:=
circuit
.
SECRET_INPUT
(
"
spend
Random"
)
transfer_random
:=
circuit
.
SECRET_INPUT
(
"
amount
Random"
)
//circuit.MUSTBE_LESS_OR_EQ(random_value,10000000000,256)
//circuit.MUSTBE_LESS_OR_EQ(random_value,10000000000,256)
//H is not G, H should be a point that no one know the prikey
//H is not G, H should be a point that no one know the prikey
var
baseX_H
,
baseY_H
fr_bn256
.
Element
var
baseX_H
,
baseY_H
fr_bn256
.
Element
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw/input
View file @
d5900775
...
@@ -4,7 +4,7 @@ public, nullifierHash,6747518781649068310795677405858353007442326529625450860668
...
@@ -4,7 +4,7 @@ public, nullifierHash,6747518781649068310795677405858353007442326529625450860668
public, amount,28242048
public, amount,28242048
secret,
spend
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret,
receiver
PubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, returnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, authorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, spendPriKey,10190477835300927557649934238820360529458681672073866116232821892325659279502
secret, spendPriKey,10190477835300927557649934238820360529458681672073866116232821892325659279502
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw.go
View file @
d5900775
...
@@ -22,7 +22,7 @@ public:
...
@@ -22,7 +22,7 @@ public:
amount
amount
private:
private:
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
spendPriKey
spendPriKey
...
@@ -43,7 +43,7 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -43,7 +43,7 @@ func NewWithdraw() *frontend.R1CS {
spendValue
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
spendValue
:=
circuit
.
PUBLIC_INPUT
(
"amount"
)
//spend pubkey
//spend pubkey
spendPubkey
:=
circuit
.
SECRET_INPUT
(
"spend
PubKey"
)
receiverPubKey
:=
circuit
.
SECRET_INPUT
(
"receiver
PubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
returnPubkey
:=
circuit
.
SECRET_INPUT
(
"returnPubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
authPubkey
:=
circuit
.
SECRET_INPUT
(
"authorizePubKey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPriKey"
)
spendPrikey
:=
circuit
.
SECRET_INPUT
(
"spendPriKey"
)
...
@@ -57,7 +57,7 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -57,7 +57,7 @@ func NewWithdraw() *frontend.R1CS {
// hash function
// hash function
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
mimc
,
_
:=
mimc
.
NewMiMCGadget
(
"seed"
,
gurvy
.
BN256
)
calcPubHash
:=
mimc
.
Hash
(
&
circuit
,
spendPrikey
)
calcPubHash
:=
mimc
.
Hash
(
&
circuit
,
spendPrikey
)
targetPubHash
:=
circuit
.
SELECT
(
spendFlag
,
spendPubk
ey
,
returnPubkey
)
targetPubHash
:=
circuit
.
SELECT
(
spendFlag
,
receiverPubK
ey
,
returnPubkey
)
circuit
.
MUSTBE_EQ
(
targetPubHash
,
calcPubHash
)
circuit
.
MUSTBE_EQ
(
targetPubHash
,
calcPubHash
)
//note hash random
//note hash random
...
@@ -78,7 +78,7 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -78,7 +78,7 @@ func NewWithdraw() *frontend.R1CS {
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
,
spendPubk
ey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
preImage
:=
mimc
.
Hash
(
&
circuit
,
receiverPubK
ey
,
calcReturnPubkey
,
calcAuthPubkey
,
spendValue
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
circuit
.
MUSTBE_EQ
(
noteHash
,
preImage
)
util
.
MerkelPathPart
(
&
circuit
,
mimc
,
preImage
)
util
.
MerkelPathPart
(
&
circuit
,
mimc
,
preImage
)
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw_test.go
View file @
d5900775
...
@@ -17,7 +17,7 @@ public:
...
@@ -17,7 +17,7 @@ public:
amount
amount
private:
private:
spend
PubKey
receiver
PubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePubKey
spendPriKey
spendPriKey
...
@@ -42,7 +42,7 @@ func TestWithdraw(t *testing.T) {
...
@@ -42,7 +42,7 @@ func TestWithdraw(t *testing.T) {
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Public
,
"nullifierHash"
,
"6747518781649068310795677405858353007442326529625450860668944156162052335195"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Public
,
"amount"
,
"28242048"
)
good
.
Assign
(
backend
.
Secret
,
"
spend
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"
receiver
PubKey"
,
"13735985067536865723202617343666111332145536963656464451727087263423649028705"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"returnPubKey"
,
"16067249407809359746114321133992130903102335882983385972747813693681808870497"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
good
.
Assign
(
backend
.
Secret
,
"authorizePubKey"
,
"13519883267141251871527102103999205179714486518503885909948192364772977661583"
)
...
...
plugin/dapp/mix/commands/mix.go
View file @
d5900775
...
@@ -60,8 +60,8 @@ func addCreateDepositFlags(cmd *cobra.Command) {
...
@@ -60,8 +60,8 @@ func addCreateDepositFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"m"
,
0
,
"deposit amount"
)
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"m"
,
0
,
"deposit amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
Flags
()
.
StringP
(
"secret
Payment"
,
"p"
,
""
,
"secret for payment
addr"
)
cmd
.
Flags
()
.
StringP
(
"secret
Receiver"
,
"p"
,
""
,
"secret for receiver
addr"
)
cmd
.
MarkFlagRequired
(
"secret
Payment
"
)
cmd
.
MarkFlagRequired
(
"secret
Receiver
"
)
cmd
.
Flags
()
.
StringP
(
"secretAuth"
,
"a"
,
""
,
"secret for authorize addr"
)
cmd
.
Flags
()
.
StringP
(
"secretAuth"
,
"a"
,
""
,
"secret for authorize addr"
)
...
@@ -102,7 +102,7 @@ func createDeposit(cmd *cobra.Command, args []string) {
...
@@ -102,7 +102,7 @@ func createDeposit(cmd *cobra.Command, args []string) {
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
proofsPara
,
_
:=
cmd
.
Flags
()
.
GetString
(
"proofs"
)
proofsPara
,
_
:=
cmd
.
Flags
()
.
GetString
(
"proofs"
)
secret
Payment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretPayment
"
)
secret
Receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReceiver
"
)
secretAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretAuth"
)
secretAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretAuth"
)
secretReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReturn"
)
secretReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReturn"
)
...
@@ -112,7 +112,7 @@ func createDeposit(cmd *cobra.Command, args []string) {
...
@@ -112,7 +112,7 @@ func createDeposit(cmd *cobra.Command, args []string) {
}
}
proofInputs
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
proofInputs
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
Payment
:
secretPayment
,
Receiver
:
secretReceiver
,
Authorize
:
secretAuth
,
Authorize
:
secretAuth
,
Returner
:
secretReturn
,
Returner
:
secretReturn
,
}
}
...
@@ -194,8 +194,8 @@ func addCreateTransferFlags(cmd *cobra.Command) {
...
@@ -194,8 +194,8 @@ func addCreateTransferFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"output"
,
"o"
,
""
,
"output 'proof-pubinput' pair"
)
cmd
.
Flags
()
.
StringP
(
"output"
,
"o"
,
""
,
"output 'proof-pubinput' pair"
)
cmd
.
MarkFlagRequired
(
"output"
)
cmd
.
MarkFlagRequired
(
"output"
)
cmd
.
Flags
()
.
StringP
(
"secret
Payment"
,
"p"
,
""
,
"secret for payment
addr"
)
cmd
.
Flags
()
.
StringP
(
"secret
Receiver"
,
"p"
,
""
,
"secret for receiver
addr"
)
cmd
.
MarkFlagRequired
(
"secret
Payment
"
)
cmd
.
MarkFlagRequired
(
"secret
Receiver
"
)
cmd
.
Flags
()
.
StringP
(
"secretAuth"
,
"a"
,
""
,
"secret for authorize addr"
)
cmd
.
Flags
()
.
StringP
(
"secretAuth"
,
"a"
,
""
,
"secret for authorize addr"
)
...
@@ -204,8 +204,8 @@ func addCreateTransferFlags(cmd *cobra.Command) {
...
@@ -204,8 +204,8 @@ func addCreateTransferFlags(cmd *cobra.Command) {
cmd
.
Flags
()
.
StringP
(
"change"
,
"c"
,
""
,
"output change 'proof-pubinput' pair"
)
cmd
.
Flags
()
.
StringP
(
"change"
,
"c"
,
""
,
"output change 'proof-pubinput' pair"
)
cmd
.
MarkFlagRequired
(
"change"
)
cmd
.
MarkFlagRequired
(
"change"
)
cmd
.
Flags
()
.
StringP
(
"change
Payment"
,
"t"
,
""
,
"secret for change payment
addr"
)
cmd
.
Flags
()
.
StringP
(
"change
Receiver"
,
"t"
,
""
,
"secret for change receiver
addr"
)
cmd
.
MarkFlagRequired
(
"change
Payment
"
)
cmd
.
MarkFlagRequired
(
"change
Receiver
"
)
cmd
.
Flags
()
.
StringP
(
"changeAuth"
,
"u"
,
""
,
"secret for change authorize addr"
)
cmd
.
Flags
()
.
StringP
(
"changeAuth"
,
"u"
,
""
,
"secret for change authorize addr"
)
...
@@ -218,10 +218,10 @@ func createTransfer(cmd *cobra.Command, args []string) {
...
@@ -218,10 +218,10 @@ func createTransfer(cmd *cobra.Command, args []string) {
proofsInput
,
_
:=
cmd
.
Flags
()
.
GetString
(
"input"
)
proofsInput
,
_
:=
cmd
.
Flags
()
.
GetString
(
"input"
)
proofsOutput
,
_
:=
cmd
.
Flags
()
.
GetString
(
"output"
)
proofsOutput
,
_
:=
cmd
.
Flags
()
.
GetString
(
"output"
)
proofsChange
,
_
:=
cmd
.
Flags
()
.
GetString
(
"change"
)
proofsChange
,
_
:=
cmd
.
Flags
()
.
GetString
(
"change"
)
secret
Payment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretPayment
"
)
secret
Receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReceiver
"
)
secretAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretAuth"
)
secretAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretAuth"
)
secretReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReturn"
)
secretReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"secretReturn"
)
change
Payment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changePayment
"
)
change
Receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changeReceiver
"
)
changeAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changeAuth"
)
changeAuth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changeAuth"
)
changeReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changeReturn"
)
changeReturn
,
_
:=
cmd
.
Flags
()
.
GetString
(
"changeReturn"
)
...
@@ -236,7 +236,7 @@ func createTransfer(cmd *cobra.Command, args []string) {
...
@@ -236,7 +236,7 @@ func createTransfer(cmd *cobra.Command, args []string) {
return
return
}
}
proofOutputs
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
proofOutputs
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
Payment
:
secretPayment
,
Receiver
:
secretReceiver
,
Returner
:
secretAuth
,
Returner
:
secretAuth
,
Authorize
:
secretReturn
,
Authorize
:
secretReturn
,
}
}
...
@@ -247,7 +247,7 @@ func createTransfer(cmd *cobra.Command, args []string) {
...
@@ -247,7 +247,7 @@ func createTransfer(cmd *cobra.Command, args []string) {
return
return
}
}
proofChanges
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
proofChanges
.
Secrets
=
&
mixTy
.
DHSecretGroup
{
Payment
:
changePayment
,
Receiver
:
changeReceiver
,
Returner
:
changeAuth
,
Returner
:
changeAuth
,
Authorize
:
changeReturn
,
Authorize
:
changeReturn
,
}
}
...
@@ -331,7 +331,7 @@ func mixConfigVerifyKeyParaCmd() *cobra.Command {
...
@@ -331,7 +331,7 @@ func mixConfigVerifyKeyParaCmd() *cobra.Command {
}
}
func
addVkConfigFlags
(
cmd
*
cobra
.
Command
)
{
func
addVkConfigFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
Uint32P
(
"circuit"
,
"c"
,
0
,
"mix circuit type,0:deposit,1:withdraw,2:
payinput,3:pay
output,4:authorize"
)
cmd
.
Flags
()
.
Uint32P
(
"circuit"
,
"c"
,
0
,
"mix circuit type,0:deposit,1:withdraw,2:
tansferinput,3:transfer
output,4:authorize"
)
cmd
.
MarkFlagRequired
(
"circuit"
)
cmd
.
MarkFlagRequired
(
"circuit"
)
cmd
.
Flags
()
.
StringP
(
"zkey"
,
"z"
,
""
,
"zk proof verify key"
)
cmd
.
Flags
()
.
StringP
(
"zkey"
,
"z"
,
""
,
"zk proof verify key"
)
...
@@ -419,8 +419,8 @@ func mixConfigPaymentPubKeyParaCmd() *cobra.Command {
...
@@ -419,8 +419,8 @@ func mixConfigPaymentPubKeyParaCmd() *cobra.Command {
}
}
func
addPayPubKeyConfigFlags
(
cmd
*
cobra
.
Command
)
{
func
addPayPubKeyConfigFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"
paying"
,
"p"
,
""
,
"paying
key"
)
cmd
.
Flags
()
.
StringP
(
"
receiver"
,
"r"
,
""
,
"receiver
key"
)
cmd
.
MarkFlagRequired
(
"
paying
"
)
cmd
.
MarkFlagRequired
(
"
receiver
"
)
cmd
.
Flags
()
.
StringP
(
"keyX"
,
"x"
,
""
,
"receiving pub key X"
)
cmd
.
Flags
()
.
StringP
(
"keyX"
,
"x"
,
""
,
"receiving pub key X"
)
cmd
.
MarkFlagRequired
(
"keyX"
)
cmd
.
MarkFlagRequired
(
"keyX"
)
...
@@ -431,16 +431,16 @@ func addPayPubKeyConfigFlags(cmd *cobra.Command) {
...
@@ -431,16 +431,16 @@ func addPayPubKeyConfigFlags(cmd *cobra.Command) {
func
createConfigPayPubKey
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
createConfigPayPubKey
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paying
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paying
"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver
"
)
keyx
,
_
:=
cmd
.
Flags
()
.
GetString
(
"keyX"
)
keyx
,
_
:=
cmd
.
Flags
()
.
GetString
(
"keyX"
)
keyy
,
_
:=
cmd
.
Flags
()
.
GetString
(
"keyY"
)
keyy
,
_
:=
cmd
.
Flags
()
.
GetString
(
"keyY"
)
payload
:=
&
mixTy
.
MixConfigAction
{}
payload
:=
&
mixTy
.
MixConfigAction
{}
payload
.
Ty
=
mixTy
.
MixConfigType_PaymentPubKey
payload
.
Ty
=
mixTy
.
MixConfigType_PaymentPubKey
receiving
Key
:=
&
mixTy
.
PubKey
{
X
:
keyx
,
Y
:
keyy
}
secret
Key
:=
&
mixTy
.
PubKey
{
X
:
keyx
,
Y
:
keyy
}
payload
.
Value
=
&
mixTy
.
MixConfigAction_PaymentKey
{
PaymentKey
:
&
mixTy
.
PaymentKey
{
PayingKey
:
paying
,
ReceivingKey
:
receiving
Key
}}
payload
.
Value
=
&
mixTy
.
MixConfigAction_PaymentKey
{
PaymentKey
:
&
mixTy
.
PaymentKey
{
ReceiverKey
:
receiver
,
SecretKey
:
secret
Key
}}
params
:=
&
rpctypes
.
CreateTxIn
{
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
...
@@ -847,8 +847,8 @@ func EncodeSecretDataCmd() *cobra.Command {
...
@@ -847,8 +847,8 @@ func EncodeSecretDataCmd() *cobra.Command {
}
}
func
encodeSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
encodeSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"
payment"
,
"p"
,
""
,
"payment
key"
)
cmd
.
Flags
()
.
StringP
(
"
receiver"
,
"p"
,
""
,
"receiver
key"
)
cmd
.
MarkFlagRequired
(
"
payment
"
)
cmd
.
MarkFlagRequired
(
"
receiver
"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"r"
,
""
,
"return key"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"r"
,
""
,
"return key"
)
...
@@ -861,13 +861,13 @@ func encodeSecretCmdFlags(cmd *cobra.Command) {
...
@@ -861,13 +861,13 @@ func encodeSecretCmdFlags(cmd *cobra.Command) {
func
encodeSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
encodeSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
payment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"payment
"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver
"
)
returnKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
returnKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetString
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetString
(
"amount"
)
req
:=
mixTy
.
SecretData
{
req
:=
mixTy
.
SecretData
{
PaymentPubKey
:
payment
,
ReceiverPubKey
:
receiver
,
ReturnPubKey
:
returnKey
,
ReturnPubKey
:
returnKey
,
AuthorizePubKey
:
authorize
,
AuthorizePubKey
:
authorize
,
Amount
:
amount
,
Amount
:
amount
,
...
@@ -911,7 +911,7 @@ func encryptSecret(cmd *cobra.Command, args []string) {
...
@@ -911,7 +911,7 @@ func encryptSecret(cmd *cobra.Command, args []string) {
req
:=
mixTy
.
EncryptSecretData
{
req
:=
mixTy
.
EncryptSecretData
{
Secret
:
secret
,
Secret
:
secret
,
ReceivingPk
:
pubkey
,
SecretPubKey
:
pubkey
,
}
}
var
res
mixTy
.
DHSecret
var
res
mixTy
.
DHSecret
...
@@ -958,7 +958,7 @@ func decryptSecret(cmd *cobra.Command, args []string) {
...
@@ -958,7 +958,7 @@ func decryptSecret(cmd *cobra.Command, args []string) {
req
:=
mixTy
.
DecryptSecretData
{
req
:=
mixTy
.
DecryptSecretData
{
Secret
:
secret
,
Secret
:
secret
,
Epk
:
pubkey
,
Epk
:
pubkey
,
Receiving
PriKey
:
prikey
,
Secret
PriKey
:
prikey
,
}
}
var
res
mixTy
.
SecretData
var
res
mixTy
.
SecretData
...
@@ -991,10 +991,10 @@ func DepositInputsCmd() *cobra.Command {
...
@@ -991,10 +991,10 @@ func DepositInputsCmd() *cobra.Command {
}
}
func
depositSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
depositSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"
payment"
,
"p"
,
""
,
"payment
addr"
)
cmd
.
Flags
()
.
StringP
(
"
receiver"
,
"r"
,
""
,
"receiver
addr"
)
cmd
.
MarkFlagRequired
(
"
payment
"
)
cmd
.
MarkFlagRequired
(
"
receiver
"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"
r
"
,
""
,
"return addr"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"
n
"
,
""
,
"return addr"
)
cmd
.
Flags
()
.
StringP
(
"authorize"
,
"a"
,
""
,
"authorize addr"
)
cmd
.
Flags
()
.
StringP
(
"authorize"
,
"a"
,
""
,
"authorize addr"
)
...
@@ -1005,13 +1005,13 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
...
@@ -1005,13 +1005,13 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
func
depositSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
depositSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
payment
,
_
:=
cmd
.
Flags
()
.
GetString
(
"payment
"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver
"
)
returnKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
returnKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"amount"
)
req
:=
&
mixTy
.
DepositProofReq
{
req
:=
&
mixTy
.
DepositProofReq
{
PaymentAddr
:
payment
,
ReceiverAddr
:
receiver
,
ReturnAddr
:
returnKey
,
ReturnAddr
:
returnKey
,
AuthorizeAddr
:
authorize
,
AuthorizeAddr
:
authorize
,
Amount
:
amount
,
Amount
:
amount
,
...
...
plugin/dapp/mix/executor/committree.go
View file @
d5900775
...
@@ -6,6 +6,7 @@ package executor
...
@@ -6,6 +6,7 @@ package executor
import
(
import
(
"bytes"
"bytes"
dbm
"github.com/33cn/chain33/common/db"
dbm
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
"github.com/33cn/plugin/plugin/dapp/mix/executor/merkletree"
"github.com/33cn/plugin/plugin/dapp/mix/executor/merkletree"
...
...
plugin/dapp/mix/executor/config.go
View file @
d5900775
...
@@ -187,13 +187,13 @@ func GetPaymentPubKey(db dbm.KV, addr string) (*mixTy.PaymentKey, error) {
...
@@ -187,13 +187,13 @@ func GetPaymentPubKey(db dbm.KV, addr string) (*mixTy.PaymentKey, error) {
}
}
func
(
a
*
action
)
ConfigPaymentPubKey
(
paykey
*
mixTy
.
PaymentKey
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
ConfigPaymentPubKey
(
paykey
*
mixTy
.
PaymentKey
)
(
*
types
.
Receipt
,
error
)
{
if
paykey
==
nil
||
len
(
paykey
.
PayingKey
)
==
0
||
len
(
paykey
.
ReceivingKey
.
X
)
==
0
||
len
(
paykey
.
Receiving
Key
.
Y
)
==
0
{
if
paykey
==
nil
||
len
(
paykey
.
ReceiverKey
)
==
0
||
len
(
paykey
.
SecretKey
.
X
)
==
0
||
len
(
paykey
.
Secret
Key
.
Y
)
==
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"pubkey=%v"
,
paykey
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"pubkey=%v"
,
paykey
)
}
}
//直接覆盖
//直接覆盖
return
makeConfigPaymentKeyReceipt
(
&
mixTy
.
PaymentKey
{
return
makeConfigPaymentKeyReceipt
(
&
mixTy
.
PaymentKey
{
Addr
:
a
.
fromaddr
,
Addr
:
a
.
fromaddr
,
PayingKey
:
paykey
.
Paying
Key
,
ReceiverKey
:
paykey
.
Receiver
Key
,
ReceivingKey
:
paykey
.
Receiving
Key
}),
nil
SecretKey
:
paykey
.
Secret
Key
}),
nil
}
}
plugin/dapp/mix/executor/mix.go
View file @
d5900775
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
package
executor
package
executor
import
(
import
(
"github.com/33cn/chain33/common"
log
"github.com/33cn/chain33/common/log/log15"
log
"github.com/33cn/chain33/common/log/log15"
drivers
"github.com/33cn/chain33/system/dapp"
drivers
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
...
@@ -62,10 +63,9 @@ func (m *Mix) CheckTx(tx *types.Transaction, index int) error {
...
@@ -62,10 +63,9 @@ func (m *Mix) CheckTx(tx *types.Transaction, index int) error {
// mix隐私交易,只私对私需要特殊签名验证
// mix隐私交易,只私对私需要特殊签名验证
return
m
.
DriverBase
.
CheckTx
(
tx
,
index
)
return
m
.
DriverBase
.
CheckTx
(
tx
,
index
)
}
}
minTxFee
:=
m
.
GetAPI
()
.
GetConfig
()
.
GInt
(
"wallet.minFee"
)
_
,
_
,
err
:=
MixTransferInfoVerify
(
m
.
GetAPI
()
.
GetConfig
(),
m
.
GetStateDB
(),
action
.
GetTransfer
())
_
,
_
,
err
:=
MixTransferInfoVerify
(
m
.
GetStateDB
(),
action
.
GetTransfer
(),
minTxFee
)
if
err
!=
nil
{
if
err
!=
nil
{
mlog
.
Error
(
"checkTx"
,
"err"
,
err
)
mlog
.
Error
(
"checkTx"
,
"err"
,
err
,
"txhash"
,
common
.
ToHex
(
tx
.
Hash
())
)
return
err
return
err
}
}
return
nil
return
nil
...
...
plugin/dapp/mix/executor/transfer.go
View file @
d5900775
...
@@ -7,6 +7,7 @@ package executor
...
@@ -7,6 +7,7 @@ package executor
import
(
import
(
"encoding/hex"
"encoding/hex"
"encoding/json"
"encoding/json"
"fmt"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
mixTy
"github.com/33cn/plugin/plugin/dapp/mix/types"
mixTy
"github.com/33cn/plugin/plugin/dapp/mix/types"
...
@@ -75,15 +76,15 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
...
@@ -75,15 +76,15 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
var
inputPoints
,
outputPoints
[]
*
twistededwards
.
Point
var
inputPoints
,
outputPoints
[]
*
twistededwards
.
Point
for
_
,
in
:=
range
inputs
{
for
_
,
in
:=
range
inputs
{
var
p
twistededwards
.
Point
var
p
twistededwards
.
Point
p
.
X
.
SetString
(
in
.
AmountX
)
p
.
X
.
SetString
(
in
.
Shield
AmountX
)
p
.
Y
.
SetString
(
in
.
AmountY
)
p
.
Y
.
SetString
(
in
.
Shield
AmountY
)
inputPoints
=
append
(
inputPoints
,
&
p
)
inputPoints
=
append
(
inputPoints
,
&
p
)
}
}
for
_
,
out
:=
range
outputs
{
for
_
,
out
:=
range
outputs
{
var
p
twistededwards
.
Point
var
p
twistededwards
.
Point
p
.
X
.
SetString
(
out
.
AmountX
)
p
.
X
.
SetString
(
out
.
Shield
AmountX
)
p
.
Y
.
SetString
(
out
.
AmountY
)
p
.
Y
.
SetString
(
out
.
Shield
AmountY
)
outputPoints
=
append
(
outputPoints
,
&
p
)
outputPoints
=
append
(
outputPoints
,
&
p
)
}
}
//out value add fee
//out value add fee
...
@@ -107,7 +108,7 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
...
@@ -107,7 +108,7 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
return
false
return
false
}
}
func
MixTransferInfoVerify
(
db
dbm
.
KV
,
transfer
*
mixTy
.
MixTransferAction
,
minFee
int64
)
([]
*
mixTy
.
TransferInputPublicInput
,
[]
*
mixTy
.
TransferOutputPublicInput
,
error
)
{
func
MixTransferInfoVerify
(
cfg
*
types
.
Chain33Config
,
db
dbm
.
KV
,
transfer
*
mixTy
.
MixTransferAction
)
([]
*
mixTy
.
TransferInputPublicInput
,
[]
*
mixTy
.
TransferOutputPublicInput
,
error
)
{
var
inputs
[]
*
mixTy
.
TransferInputPublicInput
var
inputs
[]
*
mixTy
.
TransferInputPublicInput
var
outputs
[]
*
mixTy
.
TransferOutputPublicInput
var
outputs
[]
*
mixTy
.
TransferOutputPublicInput
...
@@ -128,7 +129,8 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction, minFee
...
@@ -128,7 +129,8 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction, minFee
}
}
outputs
=
append
(
outputs
,
change
)
outputs
=
append
(
outputs
,
change
)
if
!
VerifyCommitValues
(
inputs
,
outputs
,
minFee
)
{
minTxFee
:=
types
.
Conf
(
cfg
,
"config.wallet"
)
.
GInt
(
"minFee"
)
if
!
VerifyCommitValues
(
inputs
,
outputs
,
minTxFee
)
{
return
nil
,
nil
,
errors
.
Wrap
(
mixTy
.
ErrSpendInOutValueNotMatch
,
"verifyValue"
)
return
nil
,
nil
,
errors
.
Wrap
(
mixTy
.
ErrSpendInOutValueNotMatch
,
"verifyValue"
)
}
}
...
@@ -141,8 +143,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction, minFee
...
@@ -141,8 +143,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction, minFee
3. add nullifier to pool
3. add nullifier to pool
*/
*/
func
(
a
*
action
)
Transfer
(
transfer
*
mixTy
.
MixTransferAction
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
Transfer
(
transfer
*
mixTy
.
MixTransferAction
)
(
*
types
.
Receipt
,
error
)
{
minTxFee
:=
a
.
api
.
GetConfig
()
.
GInt
(
"wallet.minFee"
)
inputs
,
outputs
,
err
:=
MixTransferInfoVerify
(
a
.
api
.
GetConfig
(),
a
.
db
,
transfer
)
inputs
,
outputs
,
err
:=
MixTransferInfoVerify
(
a
.
db
,
transfer
,
minTxFee
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"Transfer.MixTransferInfoVerify"
)
return
nil
,
errors
.
Wrap
(
err
,
"Transfer.MixTransferInfoVerify"
)
}
}
...
...
plugin/dapp/mix/proto/mix.proto
View file @
d5900775
...
@@ -32,8 +32,8 @@ message AuthPubKeys{
...
@@ -32,8 +32,8 @@ message AuthPubKeys{
message
PaymentKey
{
message
PaymentKey
{
string
addr
=
1
;
string
addr
=
1
;
string
paying
Key
=
2
;
string
receiver
Key
=
2
;
PubKey
receiving
Key
=
3
;
PubKey
secret
Key
=
3
;
}
}
enum
MixConfigType
{
enum
MixConfigType
{
...
@@ -72,7 +72,7 @@ message DHSecret{
...
@@ -72,7 +72,7 @@ message DHSecret{
//Diff-Helman 加密group, for spender, returner, authorizer to decrypt
//Diff-Helman 加密group, for spender, returner, authorizer to decrypt
message
DHSecretGroup
{
message
DHSecretGroup
{
string
payment
=
1
;
string
receiver
=
1
;
string
returner
=
2
;
string
returner
=
2
;
string
authorize
=
3
;
string
authorize
=
3
;
}
}
...
@@ -140,16 +140,16 @@ message WithdrawPublicInput {
...
@@ -140,16 +140,16 @@ message WithdrawPublicInput {
message
TransferInputPublicInput
{
message
TransferInputPublicInput
{
string
treeRootHash
=
1
;
string
treeRootHash
=
1
;
string
a
mountX
=
2
;
string
shieldA
mountX
=
2
;
string
a
mountY
=
3
;
string
shieldA
mountY
=
3
;
string
authorizeSpendHash
=
4
;
string
authorizeSpendHash
=
4
;
string
nullifierHash
=
5
;
string
nullifierHash
=
5
;
}
}
message
TransferOutputPublicInput
{
message
TransferOutputPublicInput
{
string
noteHash
=
1
;
string
noteHash
=
1
;
string
a
mountX
=
2
;
string
shieldA
mountX
=
2
;
string
a
mountY
=
3
;
string
shieldA
mountY
=
3
;
DHSecretGroup
dhSecrets
=
4
;
DHSecretGroup
dhSecrets
=
4
;
}
}
...
@@ -194,11 +194,10 @@ message TreeListResp{
...
@@ -194,11 +194,10 @@ message TreeListResp{
}
}
// mix wallet part
// mix wallet part
// payKey = hash(spendKey) for zk-snark note spend
// receiverPubKey = hash(spendPriKey) for zk-snark note spend
// 用在note内部的payment key
message
PaymentKeyPair
{
message
PaymentKeyPair
{
string
pay
Key
=
1
;
string
receiverPub
Key
=
1
;
string
spendKey
=
2
;
string
spend
Pri
Key
=
2
;
}
}
// pub = priv*G for diff-helman crypto
// pub = priv*G for diff-helman crypto
...
@@ -232,7 +231,7 @@ message WalletAddrPrivacy {
...
@@ -232,7 +231,7 @@ message WalletAddrPrivacy {
message
SecretData
{
message
SecretData
{
string
payment
PubKey
=
1
;
string
receiver
PubKey
=
1
;
string
returnPubKey
=
2
;
string
returnPubKey
=
2
;
string
authorizePubKey
=
3
;
string
authorizePubKey
=
3
;
string
amount
=
4
;
string
amount
=
4
;
...
@@ -246,19 +245,19 @@ message EncodedSecretData{
...
@@ -246,19 +245,19 @@ message EncodedSecretData{
message
EncryptSecretData
{
message
EncryptSecretData
{
string
secret
=
1
;
string
secret
=
1
;
PubKey
receivingPk
=
2
;
PubKey
SecretPubKey
=
2
;
}
}
message
DecryptSecretData
{
message
DecryptSecretData
{
string
secret
=
1
;
string
secret
=
1
;
PrivKey
receiving
PriKey
=
2
;
PrivKey
Secret
PriKey
=
2
;
PubKey
epk
=
3
;
PubKey
epk
=
3
;
}
}
//一键式获取加密数据
//一键式获取加密数据
message
DepositProofReq
{
message
DepositProofReq
{
string
payment
Addr
=
1
;
string
receiver
Addr
=
1
;
string
returnAddr
=
2
;
string
returnAddr
=
2
;
string
authorizeAddr
=
3
;
string
authorizeAddr
=
3
;
uint64
amount
=
4
;
uint64
amount
=
4
;
...
@@ -286,13 +285,13 @@ message WithdrawProofReq{
...
@@ -286,13 +285,13 @@ message WithdrawProofReq{
message
WithdrawProofResp
{
message
WithdrawProofResp
{
SecretData
proof
=
1
;
SecretData
secret
=
1
;
string
nullifierHash
=
2
;
string
nullifierHash
=
2
;
string
authSpendHash
=
3
;
string
auth
orize
SpendHash
=
3
;
string
noteHash
=
4
;
string
noteHash
=
4
;
string
spendPrivKey
=
5
;
string
spendPrivKey
=
5
;
uint32
spendFlag
=
6
;
uint32
spendFlag
=
6
;
uint32
authFlag
=
7
;
uint32
auth
orize
Flag
=
7
;
TreePathProof
treeProof
=
8
;
TreePathProof
treeProof
=
8
;
}
}
...
@@ -306,7 +305,7 @@ message AuthProofResp{
...
@@ -306,7 +305,7 @@ message AuthProofResp{
string
authPubKey
=
2
;
string
authPubKey
=
2
;
string
authPrivKey
=
3
;
string
authPrivKey
=
3
;
string
authHash
=
4
;
string
authHash
=
4
;
string
authSpendHash
=
5
;
string
auth
orize
SpendHash
=
5
;
string
noteHash
=
6
;
string
noteHash
=
6
;
uint32
spendFlag
=
7
;
uint32
spendFlag
=
7
;
TreePathProof
treeProof
=
8
;
TreePathProof
treeProof
=
8
;
...
@@ -322,7 +321,7 @@ message TransferProofReq{
...
@@ -322,7 +321,7 @@ message TransferProofReq{
}
}
//加密了的input/output amount
//加密了的input/output amount
message
commitValue
{
message
ShieldAmount
{
string
X
=
1
;
string
X
=
1
;
string
Y
=
2
;
string
Y
=
2
;
}
}
...
@@ -330,22 +329,22 @@ message commitValue{
...
@@ -330,22 +329,22 @@ message commitValue{
message
TransferInputProof
{
message
TransferInputProof
{
SecretData
proof
=
1
;
SecretData
proof
=
1
;
string
nullifierHash
=
2
;
string
nullifierHash
=
2
;
string
authSpendHash
=
3
;
string
auth
orize
SpendHash
=
3
;
string
noteHash
=
4
;
string
noteHash
=
4
;
string
spendPrivKey
=
5
;
string
spendPrivKey
=
5
;
uint32
spendFlag
=
6
;
uint32
spendFlag
=
6
;
uint32
authFlag
=
7
;
uint32
auth
orize
Flag
=
7
;
TreePathProof
treeProof
=
8
;
TreePathProof
treeProof
=
8
;
commitValue
commitValue
=
9
;
ShieldAmount
shieldAmount
=
9
;
string
spend
Random
=
10
;
string
amount
Random
=
10
;
}
}
message
TransferOutputProof
{
message
TransferOutputProof
{
SecretData
proof
=
1
;
SecretData
proof
=
1
;
string
noteHash
=
2
;
string
noteHash
=
2
;
DHSecretGroup
secrets
=
3
;
DHSecretGroup
secrets
=
3
;
commitValue
commitValue
=
4
;
ShieldAmount
shieldAmount
=
4
;
string
spend
Random
=
5
;
string
amount
Random
=
5
;
}
}
...
@@ -357,13 +356,13 @@ message TransferProofResp{
...
@@ -357,13 +356,13 @@ message TransferProofResp{
}
}
message
CommitValue
Rst
{
message
ShieldAmount
Rst
{
string
noteRandom
=
1
;
string
noteRandom
=
1
;
string
transferRandom
=
2
;
string
transferRandom
=
2
;
string
changeRandom
=
3
;
string
changeRandom
=
3
;
commitValue
note
=
4
;
ShieldAmount
note
=
4
;
commitValue
transfer
=
5
;
ShieldAmount
transfer
=
5
;
commitValue
change
=
6
;
ShieldAmount
change
=
6
;
}
}
...
@@ -377,7 +376,7 @@ enum NoteStatus{
...
@@ -377,7 +376,7 @@ enum NoteStatus{
message
WalletIndexInfo
{
message
WalletIndexInfo
{
string
noteHash
=
1
;
string
noteHash
=
1
;
string
nullifier
=
2
;
string
nullifier
=
2
;
string
authSpendHash
=
3
;
string
auth
orize
SpendHash
=
3
;
bool
isReturner
=
4
;
bool
isReturner
=
4
;
string
account
=
5
;
//账户地址
string
account
=
5
;
//账户地址
NoteStatus
status
=
6
;
NoteStatus
status
=
6
;
...
@@ -394,7 +393,7 @@ message WalletDbMixInfo {
...
@@ -394,7 +393,7 @@ message WalletDbMixInfo {
message
WalletMixIndexReq
{
message
WalletMixIndexReq
{
string
noteHash
=
1
;
string
noteHash
=
1
;
string
nullifier
=
2
;
string
nullifier
=
2
;
string
authSpendHash
=
3
;
string
auth
orize
SpendHash
=
3
;
string
account
=
5
;
string
account
=
5
;
int32
status
=
6
;
int32
status
=
6
;
int32
count
=
7
;
int32
count
=
7
;
...
...
plugin/dapp/mix/types/mix.pb.go
View file @
d5900775
...
@@ -303,8 +303,8 @@ func (m *AuthPubKeys) GetData() []string {
...
@@ -303,8 +303,8 @@ func (m *AuthPubKeys) GetData() []string {
type
PaymentKey
struct
{
type
PaymentKey
struct
{
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Addr
string
`protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
PayingKey
string
`protobuf:"bytes,2,opt,name=payingKey,proto3" json:"paying
Key,omitempty"`
ReceiverKey
string
`protobuf:"bytes,2,opt,name=receiverKey,proto3" json:"receiver
Key,omitempty"`
ReceivingKey
*
PubKey
`protobuf:"bytes,3,opt,name=receivingKey,proto3" json:"receiving
Key,omitempty"`
SecretKey
*
PubKey
`protobuf:"bytes,3,opt,name=secretKey,proto3" json:"secret
Key,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -342,16 +342,16 @@ func (m *PaymentKey) GetAddr() string {
...
@@ -342,16 +342,16 @@ func (m *PaymentKey) GetAddr() string {
return
""
return
""
}
}
func
(
m
*
PaymentKey
)
Get
Paying
Key
()
string
{
func
(
m
*
PaymentKey
)
Get
Receiver
Key
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Paying
Key
return
m
.
Receiver
Key
}
}
return
""
return
""
}
}
func
(
m
*
PaymentKey
)
Get
Receiving
Key
()
*
PubKey
{
func
(
m
*
PaymentKey
)
Get
Secret
Key
()
*
PubKey
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Receiving
Key
return
m
.
Secret
Key
}
}
return
nil
return
nil
}
}
...
@@ -519,7 +519,7 @@ func (m *DHSecret) GetSecret() string {
...
@@ -519,7 +519,7 @@ func (m *DHSecret) GetSecret() string {
//Diff-Helman 加密group, for spender, returner, authorizer to decrypt
//Diff-Helman 加密group, for spender, returner, authorizer to decrypt
type
DHSecretGroup
struct
{
type
DHSecretGroup
struct
{
Payment
string
`protobuf:"bytes,1,opt,name=payment,proto3" json:"payment
,omitempty"`
Receiver
string
`protobuf:"bytes,1,opt,name=receiver,proto3" json:"receiver
,omitempty"`
Returner
string
`protobuf:"bytes,2,opt,name=returner,proto3" json:"returner,omitempty"`
Returner
string
`protobuf:"bytes,2,opt,name=returner,proto3" json:"returner,omitempty"`
Authorize
string
`protobuf:"bytes,3,opt,name=authorize,proto3" json:"authorize,omitempty"`
Authorize
string
`protobuf:"bytes,3,opt,name=authorize,proto3" json:"authorize,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -552,9 +552,9 @@ func (m *DHSecretGroup) XXX_DiscardUnknown() {
...
@@ -552,9 +552,9 @@ func (m *DHSecretGroup) XXX_DiscardUnknown() {
var
xxx_messageInfo_DHSecretGroup
proto
.
InternalMessageInfo
var
xxx_messageInfo_DHSecretGroup
proto
.
InternalMessageInfo
func
(
m
*
DHSecretGroup
)
Get
Payment
()
string
{
func
(
m
*
DHSecretGroup
)
Get
Receiver
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Payment
return
m
.
Receiver
}
}
return
""
return
""
}
}
...
@@ -1061,8 +1061,8 @@ func (m *WithdrawPublicInput) GetAmount() string {
...
@@ -1061,8 +1061,8 @@ func (m *WithdrawPublicInput) GetAmount() string {
type
TransferInputPublicInput
struct
{
type
TransferInputPublicInput
struct
{
TreeRootHash
string
`protobuf:"bytes,1,opt,name=treeRootHash,proto3" json:"treeRootHash,omitempty"`
TreeRootHash
string
`protobuf:"bytes,1,opt,name=treeRootHash,proto3" json:"treeRootHash,omitempty"`
AmountX
string
`protobuf:"bytes,2,opt,name=amountX,proto3" json:"a
mountX,omitempty"`
ShieldAmountX
string
`protobuf:"bytes,2,opt,name=shieldAmountX,proto3" json:"shieldA
mountX,omitempty"`
AmountY
string
`protobuf:"bytes,3,opt,name=amountY,proto3" json:"a
mountY,omitempty"`
ShieldAmountY
string
`protobuf:"bytes,3,opt,name=shieldAmountY,proto3" json:"shieldA
mountY,omitempty"`
AuthorizeSpendHash
string
`protobuf:"bytes,4,opt,name=authorizeSpendHash,proto3" json:"authorizeSpendHash,omitempty"`
AuthorizeSpendHash
string
`protobuf:"bytes,4,opt,name=authorizeSpendHash,proto3" json:"authorizeSpendHash,omitempty"`
NullifierHash
string
`protobuf:"bytes,5,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
NullifierHash
string
`protobuf:"bytes,5,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -1102,16 +1102,16 @@ func (m *TransferInputPublicInput) GetTreeRootHash() string {
...
@@ -1102,16 +1102,16 @@ func (m *TransferInputPublicInput) GetTreeRootHash() string {
return
""
return
""
}
}
func
(
m
*
TransferInputPublicInput
)
GetAmountX
()
string
{
func
(
m
*
TransferInputPublicInput
)
Get
Shield
AmountX
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AmountX
return
m
.
Shield
AmountX
}
}
return
""
return
""
}
}
func
(
m
*
TransferInputPublicInput
)
GetAmountY
()
string
{
func
(
m
*
TransferInputPublicInput
)
Get
Shield
AmountY
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AmountY
return
m
.
Shield
AmountY
}
}
return
""
return
""
}
}
...
@@ -1132,8 +1132,8 @@ func (m *TransferInputPublicInput) GetNullifierHash() string {
...
@@ -1132,8 +1132,8 @@ func (m *TransferInputPublicInput) GetNullifierHash() string {
type
TransferOutputPublicInput
struct
{
type
TransferOutputPublicInput
struct
{
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
AmountX
string
`protobuf:"bytes,2,opt,name=amountX,proto3" json:"a
mountX,omitempty"`
ShieldAmountX
string
`protobuf:"bytes,2,opt,name=shieldAmountX,proto3" json:"shieldA
mountX,omitempty"`
AmountY
string
`protobuf:"bytes,3,opt,name=amountY,proto3" json:"a
mountY,omitempty"`
ShieldAmountY
string
`protobuf:"bytes,3,opt,name=shieldAmountY,proto3" json:"shieldA
mountY,omitempty"`
DhSecrets
*
DHSecretGroup
`protobuf:"bytes,4,opt,name=dhSecrets,proto3" json:"dhSecrets,omitempty"`
DhSecrets
*
DHSecretGroup
`protobuf:"bytes,4,opt,name=dhSecrets,proto3" json:"dhSecrets,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
...
@@ -1172,16 +1172,16 @@ func (m *TransferOutputPublicInput) GetNoteHash() string {
...
@@ -1172,16 +1172,16 @@ func (m *TransferOutputPublicInput) GetNoteHash() string {
return
""
return
""
}
}
func
(
m
*
TransferOutputPublicInput
)
GetAmountX
()
string
{
func
(
m
*
TransferOutputPublicInput
)
Get
Shield
AmountX
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AmountX
return
m
.
Shield
AmountX
}
}
return
""
return
""
}
}
func
(
m
*
TransferOutputPublicInput
)
GetAmountY
()
string
{
func
(
m
*
TransferOutputPublicInput
)
Get
Shield
AmountY
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AmountY
return
m
.
Shield
AmountY
}
}
return
""
return
""
}
}
...
@@ -1532,11 +1532,10 @@ func (m *TreeListResp) GetDatas() []string {
...
@@ -1532,11 +1532,10 @@ func (m *TreeListResp) GetDatas() []string {
}
}
// mix wallet part
// mix wallet part
// payKey = hash(spendKey) for zk-snark note spend
// receiverPubKey = hash(spendPriKey) for zk-snark note spend
// 用在note内部的payment key
type
PaymentKeyPair
struct
{
type
PaymentKeyPair
struct
{
PayKey
string
`protobuf:"bytes,1,opt,name=payKey,proto3" json:"pay
Key,omitempty"`
ReceiverPubKey
string
`protobuf:"bytes,1,opt,name=receiverPubKey,proto3" json:"receiverPub
Key,omitempty"`
Spend
Key
string
`protobuf:"bytes,2,opt,name=spendKey,proto3" json:"spend
Key,omitempty"`
Spend
PriKey
string
`protobuf:"bytes,2,opt,name=spendPriKey,proto3" json:"spendPri
Key,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -1567,16 +1566,16 @@ func (m *PaymentKeyPair) XXX_DiscardUnknown() {
...
@@ -1567,16 +1566,16 @@ func (m *PaymentKeyPair) XXX_DiscardUnknown() {
var
xxx_messageInfo_PaymentKeyPair
proto
.
InternalMessageInfo
var
xxx_messageInfo_PaymentKeyPair
proto
.
InternalMessageInfo
func
(
m
*
PaymentKeyPair
)
Get
Pay
Key
()
string
{
func
(
m
*
PaymentKeyPair
)
Get
ReceiverPub
Key
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Pay
Key
return
m
.
ReceiverPub
Key
}
}
return
""
return
""
}
}
func
(
m
*
PaymentKeyPair
)
GetSpendKey
()
string
{
func
(
m
*
PaymentKeyPair
)
GetSpend
Pri
Key
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
SpendKey
return
m
.
Spend
Pri
Key
}
}
return
""
return
""
}
}
...
@@ -1814,7 +1813,7 @@ func (m *WalletAddrPrivacy) GetAddr() string {
...
@@ -1814,7 +1813,7 @@ func (m *WalletAddrPrivacy) GetAddr() string {
}
}
type
SecretData
struct
{
type
SecretData
struct
{
PaymentPubKey
string
`protobuf:"bytes,1,opt,name=paymentPubKey,proto3" json:"payment
PubKey,omitempty"`
ReceiverPubKey
string
`protobuf:"bytes,1,opt,name=receiverPubKey,proto3" json:"receiver
PubKey,omitempty"`
ReturnPubKey
string
`protobuf:"bytes,2,opt,name=returnPubKey,proto3" json:"returnPubKey,omitempty"`
ReturnPubKey
string
`protobuf:"bytes,2,opt,name=returnPubKey,proto3" json:"returnPubKey,omitempty"`
AuthorizePubKey
string
`protobuf:"bytes,3,opt,name=authorizePubKey,proto3" json:"authorizePubKey,omitempty"`
AuthorizePubKey
string
`protobuf:"bytes,3,opt,name=authorizePubKey,proto3" json:"authorizePubKey,omitempty"`
Amount
string
`protobuf:"bytes,4,opt,name=amount,proto3" json:"amount,omitempty"`
Amount
string
`protobuf:"bytes,4,opt,name=amount,proto3" json:"amount,omitempty"`
...
@@ -1849,9 +1848,9 @@ func (m *SecretData) XXX_DiscardUnknown() {
...
@@ -1849,9 +1848,9 @@ func (m *SecretData) XXX_DiscardUnknown() {
var
xxx_messageInfo_SecretData
proto
.
InternalMessageInfo
var
xxx_messageInfo_SecretData
proto
.
InternalMessageInfo
func
(
m
*
SecretData
)
Get
Payment
PubKey
()
string
{
func
(
m
*
SecretData
)
Get
Receiver
PubKey
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Payment
PubKey
return
m
.
Receiver
PubKey
}
}
return
""
return
""
}
}
...
@@ -1933,7 +1932,7 @@ func (m *EncodedSecretData) GetRawData() *SecretData {
...
@@ -1933,7 +1932,7 @@ func (m *EncodedSecretData) GetRawData() *SecretData {
type
EncryptSecretData
struct
{
type
EncryptSecretData
struct
{
Secret
string
`protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"`
Secret
string
`protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"`
ReceivingPk
*
PubKey
`protobuf:"bytes,2,opt,name=receivingPk,proto3" json:"receivingPk
,omitempty"`
SecretPubKey
*
PubKey
`protobuf:"bytes,2,opt,name=SecretPubKey,proto3" json:"SecretPubKey
,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -1971,16 +1970,16 @@ func (m *EncryptSecretData) GetSecret() string {
...
@@ -1971,16 +1970,16 @@ func (m *EncryptSecretData) GetSecret() string {
return
""
return
""
}
}
func
(
m
*
EncryptSecretData
)
Get
ReceivingPk
()
*
PubKey
{
func
(
m
*
EncryptSecretData
)
Get
SecretPubKey
()
*
PubKey
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
ReceivingPk
return
m
.
SecretPubKey
}
}
return
nil
return
nil
}
}
type
DecryptSecretData
struct
{
type
DecryptSecretData
struct
{
Secret
string
`protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"`
Secret
string
`protobuf:"bytes,1,opt,name=secret,proto3" json:"secret,omitempty"`
ReceivingPriKey
*
PrivKey
`protobuf:"bytes,2,opt,name=receivingPriKey,proto3" json:"receiving
PriKey,omitempty"`
SecretPriKey
*
PrivKey
`protobuf:"bytes,2,opt,name=SecretPriKey,proto3" json:"Secret
PriKey,omitempty"`
Epk
*
PubKey
`protobuf:"bytes,3,opt,name=epk,proto3" json:"epk,omitempty"`
Epk
*
PubKey
`protobuf:"bytes,3,opt,name=epk,proto3" json:"epk,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
...
@@ -2019,9 +2018,9 @@ func (m *DecryptSecretData) GetSecret() string {
...
@@ -2019,9 +2018,9 @@ func (m *DecryptSecretData) GetSecret() string {
return
""
return
""
}
}
func
(
m
*
DecryptSecretData
)
Get
Receiving
PriKey
()
*
PrivKey
{
func
(
m
*
DecryptSecretData
)
Get
Secret
PriKey
()
*
PrivKey
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Receiving
PriKey
return
m
.
Secret
PriKey
}
}
return
nil
return
nil
}
}
...
@@ -2035,7 +2034,7 @@ func (m *DecryptSecretData) GetEpk() *PubKey {
...
@@ -2035,7 +2034,7 @@ func (m *DecryptSecretData) GetEpk() *PubKey {
//一键式获取加密数据
//一键式获取加密数据
type
DepositProofReq
struct
{
type
DepositProofReq
struct
{
PaymentAddr
string
`protobuf:"bytes,1,opt,name=paymentAddr,proto3" json:"payment
Addr,omitempty"`
ReceiverAddr
string
`protobuf:"bytes,1,opt,name=receiverAddr,proto3" json:"receiver
Addr,omitempty"`
ReturnAddr
string
`protobuf:"bytes,2,opt,name=returnAddr,proto3" json:"returnAddr,omitempty"`
ReturnAddr
string
`protobuf:"bytes,2,opt,name=returnAddr,proto3" json:"returnAddr,omitempty"`
AuthorizeAddr
string
`protobuf:"bytes,3,opt,name=authorizeAddr,proto3" json:"authorizeAddr,omitempty"`
AuthorizeAddr
string
`protobuf:"bytes,3,opt,name=authorizeAddr,proto3" json:"authorizeAddr,omitempty"`
Amount
uint64
`protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"`
Amount
uint64
`protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"`
...
@@ -2069,9 +2068,9 @@ func (m *DepositProofReq) XXX_DiscardUnknown() {
...
@@ -2069,9 +2068,9 @@ func (m *DepositProofReq) XXX_DiscardUnknown() {
var
xxx_messageInfo_DepositProofReq
proto
.
InternalMessageInfo
var
xxx_messageInfo_DepositProofReq
proto
.
InternalMessageInfo
func
(
m
*
DepositProofReq
)
Get
Payment
Addr
()
string
{
func
(
m
*
DepositProofReq
)
Get
Receiver
Addr
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Payment
Addr
return
m
.
Receiver
Addr
}
}
return
""
return
""
}
}
...
@@ -2255,13 +2254,13 @@ func (m *WithdrawProofReq) GetNoteHash() string {
...
@@ -2255,13 +2254,13 @@ func (m *WithdrawProofReq) GetNoteHash() string {
}
}
type
WithdrawProofResp
struct
{
type
WithdrawProofResp
struct
{
Proof
*
SecretData
`protobuf:"bytes,1,opt,name=proof,proto3" json:"proof
,omitempty"`
Secret
*
SecretData
`protobuf:"bytes,1,opt,name=secret,proto3" json:"secret
,omitempty"`
NullifierHash
string
`protobuf:"bytes,2,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
NullifierHash
string
`protobuf:"bytes,2,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
Auth
SpendHash
string
`protobuf:"bytes,3,opt,name=authSpendHash,proto3" json:"auth
SpendHash,omitempty"`
Auth
orizeSpendHash
string
`protobuf:"bytes,3,opt,name=authorizeSpendHash,proto3" json:"authorize
SpendHash,omitempty"`
NoteHash
string
`protobuf:"bytes,4,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,4,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
SpendPrivKey
string
`protobuf:"bytes,5,opt,name=spendPrivKey,proto3" json:"spendPrivKey,omitempty"`
SpendPrivKey
string
`protobuf:"bytes,5,opt,name=spendPrivKey,proto3" json:"spendPrivKey,omitempty"`
SpendFlag
uint32
`protobuf:"varint,6,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
SpendFlag
uint32
`protobuf:"varint,6,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
Auth
Flag
uint32
`protobuf:"varint,7,opt,name=authFlag,proto3" json:"auth
Flag,omitempty"`
Auth
orizeFlag
uint32
`protobuf:"varint,7,opt,name=authorizeFlag,proto3" json:"authorize
Flag,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
...
@@ -2293,9 +2292,9 @@ func (m *WithdrawProofResp) XXX_DiscardUnknown() {
...
@@ -2293,9 +2292,9 @@ func (m *WithdrawProofResp) XXX_DiscardUnknown() {
var
xxx_messageInfo_WithdrawProofResp
proto
.
InternalMessageInfo
var
xxx_messageInfo_WithdrawProofResp
proto
.
InternalMessageInfo
func
(
m
*
WithdrawProofResp
)
Get
Proof
()
*
SecretData
{
func
(
m
*
WithdrawProofResp
)
Get
Secret
()
*
SecretData
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Proof
return
m
.
Secret
}
}
return
nil
return
nil
}
}
...
@@ -2307,9 +2306,9 @@ func (m *WithdrawProofResp) GetNullifierHash() string {
...
@@ -2307,9 +2306,9 @@ func (m *WithdrawProofResp) GetNullifierHash() string {
return
""
return
""
}
}
func
(
m
*
WithdrawProofResp
)
GetAuthSpendHash
()
string
{
func
(
m
*
WithdrawProofResp
)
GetAuth
orize
SpendHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthSpendHash
return
m
.
Auth
orize
SpendHash
}
}
return
""
return
""
}
}
...
@@ -2335,9 +2334,9 @@ func (m *WithdrawProofResp) GetSpendFlag() uint32 {
...
@@ -2335,9 +2334,9 @@ func (m *WithdrawProofResp) GetSpendFlag() uint32 {
return
0
return
0
}
}
func
(
m
*
WithdrawProofResp
)
GetAuthFlag
()
uint32
{
func
(
m
*
WithdrawProofResp
)
GetAuth
orize
Flag
()
uint32
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthFlag
return
m
.
Auth
orize
Flag
}
}
return
0
return
0
}
}
...
@@ -2401,7 +2400,7 @@ type AuthProofResp struct {
...
@@ -2401,7 +2400,7 @@ type AuthProofResp struct {
AuthPubKey
string
`protobuf:"bytes,2,opt,name=authPubKey,proto3" json:"authPubKey,omitempty"`
AuthPubKey
string
`protobuf:"bytes,2,opt,name=authPubKey,proto3" json:"authPubKey,omitempty"`
AuthPrivKey
string
`protobuf:"bytes,3,opt,name=authPrivKey,proto3" json:"authPrivKey,omitempty"`
AuthPrivKey
string
`protobuf:"bytes,3,opt,name=authPrivKey,proto3" json:"authPrivKey,omitempty"`
AuthHash
string
`protobuf:"bytes,4,opt,name=authHash,proto3" json:"authHash,omitempty"`
AuthHash
string
`protobuf:"bytes,4,opt,name=authHash,proto3" json:"authHash,omitempty"`
Auth
SpendHash
string
`protobuf:"bytes,5,opt,name=authSpendHash,proto3" json:"auth
SpendHash,omitempty"`
Auth
orizeSpendHash
string
`protobuf:"bytes,5,opt,name=authorizeSpendHash,proto3" json:"authorize
SpendHash,omitempty"`
NoteHash
string
`protobuf:"bytes,6,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,6,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
SpendFlag
uint32
`protobuf:"varint,7,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
SpendFlag
uint32
`protobuf:"varint,7,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
...
@@ -2463,9 +2462,9 @@ func (m *AuthProofResp) GetAuthHash() string {
...
@@ -2463,9 +2462,9 @@ func (m *AuthProofResp) GetAuthHash() string {
return
""
return
""
}
}
func
(
m
*
AuthProofResp
)
GetAuthSpendHash
()
string
{
func
(
m
*
AuthProofResp
)
GetAuth
orize
SpendHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthSpendHash
return
m
.
Auth
orize
SpendHash
}
}
return
""
return
""
}
}
...
@@ -2563,7 +2562,7 @@ func (m *TransferProofReq) GetAmount() uint64 {
...
@@ -2563,7 +2562,7 @@ func (m *TransferProofReq) GetAmount() uint64 {
}
}
//加密了的input/output amount
//加密了的input/output amount
type
CommitValue
struct
{
type
ShieldAmount
struct
{
X
string
`protobuf:"bytes,1,opt,name=X,proto3" json:"X,omitempty"`
X
string
`protobuf:"bytes,1,opt,name=X,proto3" json:"X,omitempty"`
Y
string
`protobuf:"bytes,2,opt,name=Y,proto3" json:"Y,omitempty"`
Y
string
`protobuf:"bytes,2,opt,name=Y,proto3" json:"Y,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -2571,39 +2570,39 @@ type CommitValue struct {
...
@@ -2571,39 +2570,39 @@ type CommitValue struct {
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
}
func
(
m
*
CommitValue
)
Reset
()
{
*
m
=
CommitValue
{}
}
func
(
m
*
ShieldAmount
)
Reset
()
{
*
m
=
ShieldAmount
{}
}
func
(
m
*
CommitValue
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ShieldAmount
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
CommitValue
)
ProtoMessage
()
{}
func
(
*
ShieldAmount
)
ProtoMessage
()
{}
func
(
*
CommitValue
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ShieldAmount
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_5c21d519a9be369a
,
[]
int
{
42
}
return
fileDescriptor_5c21d519a9be369a
,
[]
int
{
42
}
}
}
func
(
m
*
CommitValue
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ShieldAmount
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_
CommitValue
.
Unmarshal
(
m
,
b
)
return
xxx_messageInfo_
ShieldAmount
.
Unmarshal
(
m
,
b
)
}
}
func
(
m
*
CommitValue
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
func
(
m
*
ShieldAmount
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_
CommitValue
.
Marshal
(
b
,
m
,
deterministic
)
return
xxx_messageInfo_
ShieldAmount
.
Marshal
(
b
,
m
,
deterministic
)
}
}
func
(
m
*
CommitValue
)
XXX_Merge
(
src
proto
.
Message
)
{
func
(
m
*
ShieldAmount
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_
CommitValue
.
Merge
(
m
,
src
)
xxx_messageInfo_
ShieldAmount
.
Merge
(
m
,
src
)
}
}
func
(
m
*
CommitValue
)
XXX_Size
()
int
{
func
(
m
*
ShieldAmount
)
XXX_Size
()
int
{
return
xxx_messageInfo_
CommitValue
.
Size
(
m
)
return
xxx_messageInfo_
ShieldAmount
.
Size
(
m
)
}
}
func
(
m
*
CommitValue
)
XXX_DiscardUnknown
()
{
func
(
m
*
ShieldAmount
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_
CommitValue
.
DiscardUnknown
(
m
)
xxx_messageInfo_
ShieldAmount
.
DiscardUnknown
(
m
)
}
}
var
xxx_messageInfo_
CommitValue
proto
.
InternalMessageInfo
var
xxx_messageInfo_
ShieldAmount
proto
.
InternalMessageInfo
func
(
m
*
CommitValue
)
GetX
()
string
{
func
(
m
*
ShieldAmount
)
GetX
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
X
return
m
.
X
}
}
return
""
return
""
}
}
func
(
m
*
CommitValue
)
GetY
()
string
{
func
(
m
*
ShieldAmount
)
GetY
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Y
return
m
.
Y
}
}
...
@@ -2613,14 +2612,14 @@ func (m *CommitValue) GetY() string {
...
@@ -2613,14 +2612,14 @@ func (m *CommitValue) GetY() string {
type
TransferInputProof
struct
{
type
TransferInputProof
struct
{
Proof
*
SecretData
`protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
Proof
*
SecretData
`protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
NullifierHash
string
`protobuf:"bytes,2,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
NullifierHash
string
`protobuf:"bytes,2,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
Auth
SpendHash
string
`protobuf:"bytes,3,opt,name=authSpendHash,proto3" json:"auth
SpendHash,omitempty"`
Auth
orizeSpendHash
string
`protobuf:"bytes,3,opt,name=authorizeSpendHash,proto3" json:"authorize
SpendHash,omitempty"`
NoteHash
string
`protobuf:"bytes,4,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,4,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
SpendPrivKey
string
`protobuf:"bytes,5,opt,name=spendPrivKey,proto3" json:"spendPrivKey,omitempty"`
SpendPrivKey
string
`protobuf:"bytes,5,opt,name=spendPrivKey,proto3" json:"spendPrivKey,omitempty"`
SpendFlag
uint32
`protobuf:"varint,6,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
SpendFlag
uint32
`protobuf:"varint,6,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
Auth
Flag
uint32
`protobuf:"varint,7,opt,name=authFlag,proto3" json:"auth
Flag,omitempty"`
Auth
orizeFlag
uint32
`protobuf:"varint,7,opt,name=authorizeFlag,proto3" json:"authorize
Flag,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
TreeProof
*
TreePathProof
`protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
CommitValue
*
CommitValue
`protobuf:"bytes,9,opt,name=commitValue,proto3" json:"commitValue
,omitempty"`
ShieldAmount
*
ShieldAmount
`protobuf:"bytes,9,opt,name=shieldAmount,proto3" json:"shieldAmount
,omitempty"`
SpendRandom
string
`protobuf:"bytes,10,opt,name=spendRandom,proto3" json:"spend
Random,omitempty"`
AmountRandom
string
`protobuf:"bytes,10,opt,name=amountRandom,proto3" json:"amount
Random,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -2665,9 +2664,9 @@ func (m *TransferInputProof) GetNullifierHash() string {
...
@@ -2665,9 +2664,9 @@ func (m *TransferInputProof) GetNullifierHash() string {
return
""
return
""
}
}
func
(
m
*
TransferInputProof
)
GetAuthSpendHash
()
string
{
func
(
m
*
TransferInputProof
)
GetAuth
orize
SpendHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthSpendHash
return
m
.
Auth
orize
SpendHash
}
}
return
""
return
""
}
}
...
@@ -2693,9 +2692,9 @@ func (m *TransferInputProof) GetSpendFlag() uint32 {
...
@@ -2693,9 +2692,9 @@ func (m *TransferInputProof) GetSpendFlag() uint32 {
return
0
return
0
}
}
func
(
m
*
TransferInputProof
)
GetAuthFlag
()
uint32
{
func
(
m
*
TransferInputProof
)
GetAuth
orize
Flag
()
uint32
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthFlag
return
m
.
Auth
orize
Flag
}
}
return
0
return
0
}
}
...
@@ -2707,16 +2706,16 @@ func (m *TransferInputProof) GetTreeProof() *TreePathProof {
...
@@ -2707,16 +2706,16 @@ func (m *TransferInputProof) GetTreeProof() *TreePathProof {
return
nil
return
nil
}
}
func
(
m
*
TransferInputProof
)
Get
CommitValue
()
*
CommitValue
{
func
(
m
*
TransferInputProof
)
Get
ShieldAmount
()
*
ShieldAmount
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
CommitValue
return
m
.
ShieldAmount
}
}
return
nil
return
nil
}
}
func
(
m
*
TransferInputProof
)
Get
Spend
Random
()
string
{
func
(
m
*
TransferInputProof
)
Get
Amount
Random
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Spend
Random
return
m
.
Amount
Random
}
}
return
""
return
""
}
}
...
@@ -2725,8 +2724,8 @@ type TransferOutputProof struct {
...
@@ -2725,8 +2724,8 @@ type TransferOutputProof struct {
Proof
*
SecretData
`protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
Proof
*
SecretData
`protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
NoteHash
string
`protobuf:"bytes,2,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,2,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
Secrets
*
DHSecretGroup
`protobuf:"bytes,3,opt,name=secrets,proto3" json:"secrets,omitempty"`
Secrets
*
DHSecretGroup
`protobuf:"bytes,3,opt,name=secrets,proto3" json:"secrets,omitempty"`
CommitValue
*
CommitValue
`protobuf:"bytes,4,opt,name=commitValue,proto3" json:"commitValue
,omitempty"`
ShieldAmount
*
ShieldAmount
`protobuf:"bytes,4,opt,name=shieldAmount,proto3" json:"shieldAmount
,omitempty"`
SpendRandom
string
`protobuf:"bytes,5,opt,name=spendRandom,proto3" json:"spend
Random,omitempty"`
AmountRandom
string
`protobuf:"bytes,5,opt,name=amountRandom,proto3" json:"amount
Random,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -2778,16 +2777,16 @@ func (m *TransferOutputProof) GetSecrets() *DHSecretGroup {
...
@@ -2778,16 +2777,16 @@ func (m *TransferOutputProof) GetSecrets() *DHSecretGroup {
return
nil
return
nil
}
}
func
(
m
*
TransferOutputProof
)
Get
CommitValue
()
*
CommitValue
{
func
(
m
*
TransferOutputProof
)
Get
ShieldAmount
()
*
ShieldAmount
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
CommitValue
return
m
.
ShieldAmount
}
}
return
nil
return
nil
}
}
func
(
m
*
TransferOutputProof
)
Get
Spend
Random
()
string
{
func
(
m
*
TransferOutputProof
)
Get
Amount
Random
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Spend
Random
return
m
.
Amount
Random
}
}
return
""
return
""
}
}
...
@@ -2847,79 +2846,79 @@ func (m *TransferProofResp) GetChangeOutput() *TransferOutputProof {
...
@@ -2847,79 +2846,79 @@ func (m *TransferProofResp) GetChangeOutput() *TransferOutputProof {
return
nil
return
nil
}
}
type
CommitValue
Rst
struct
{
type
ShieldAmount
Rst
struct
{
NoteRandom
string
`protobuf:"bytes,1,opt,name=noteRandom,proto3" json:"noteRandom,omitempty"`
NoteRandom
string
`protobuf:"bytes,1,opt,name=noteRandom,proto3" json:"noteRandom,omitempty"`
TransferRandom
string
`protobuf:"bytes,2,opt,name=transferRandom,proto3" json:"transferRandom,omitempty"`
TransferRandom
string
`protobuf:"bytes,2,opt,name=transferRandom,proto3" json:"transferRandom,omitempty"`
ChangeRandom
string
`protobuf:"bytes,3,opt,name=changeRandom,proto3" json:"changeRandom,omitempty"`
ChangeRandom
string
`protobuf:"bytes,3,opt,name=changeRandom,proto3" json:"changeRandom,omitempty"`
Note
*
CommitValue
`protobuf:"bytes,4,opt,name=note,proto3" json:"note,omitempty"`
Note
*
ShieldAmount
`protobuf:"bytes,4,opt,name=note,proto3" json:"note,omitempty"`
Transfer
*
CommitValue
`protobuf:"bytes,5,opt,name=transfer,proto3" json:"transfer,omitempty"`
Transfer
*
ShieldAmount
`protobuf:"bytes,5,opt,name=transfer,proto3" json:"transfer,omitempty"`
Change
*
CommitValue
`protobuf:"bytes,6,opt,name=change,proto3" json:"change,omitempty"`
Change
*
ShieldAmount
`protobuf:"bytes,6,opt,name=change,proto3" json:"change,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
}
}
func
(
m
*
CommitValueRst
)
Reset
()
{
*
m
=
CommitValue
Rst
{}
}
func
(
m
*
ShieldAmountRst
)
Reset
()
{
*
m
=
ShieldAmount
Rst
{}
}
func
(
m
*
CommitValue
Rst
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ShieldAmount
Rst
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
CommitValue
Rst
)
ProtoMessage
()
{}
func
(
*
ShieldAmount
Rst
)
ProtoMessage
()
{}
func
(
*
CommitValue
Rst
)
Descriptor
()
([]
byte
,
[]
int
)
{
func
(
*
ShieldAmount
Rst
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor_5c21d519a9be369a
,
[]
int
{
46
}
return
fileDescriptor_5c21d519a9be369a
,
[]
int
{
46
}
}
}
func
(
m
*
CommitValue
Rst
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
func
(
m
*
ShieldAmount
Rst
)
XXX_Unmarshal
(
b
[]
byte
)
error
{
return
xxx_messageInfo_
CommitValue
Rst
.
Unmarshal
(
m
,
b
)
return
xxx_messageInfo_
ShieldAmount
Rst
.
Unmarshal
(
m
,
b
)
}
}
func
(
m
*
CommitValue
Rst
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
func
(
m
*
ShieldAmount
Rst
)
XXX_Marshal
(
b
[]
byte
,
deterministic
bool
)
([]
byte
,
error
)
{
return
xxx_messageInfo_
CommitValue
Rst
.
Marshal
(
b
,
m
,
deterministic
)
return
xxx_messageInfo_
ShieldAmount
Rst
.
Marshal
(
b
,
m
,
deterministic
)
}
}
func
(
m
*
CommitValue
Rst
)
XXX_Merge
(
src
proto
.
Message
)
{
func
(
m
*
ShieldAmount
Rst
)
XXX_Merge
(
src
proto
.
Message
)
{
xxx_messageInfo_
CommitValue
Rst
.
Merge
(
m
,
src
)
xxx_messageInfo_
ShieldAmount
Rst
.
Merge
(
m
,
src
)
}
}
func
(
m
*
CommitValue
Rst
)
XXX_Size
()
int
{
func
(
m
*
ShieldAmount
Rst
)
XXX_Size
()
int
{
return
xxx_messageInfo_
CommitValue
Rst
.
Size
(
m
)
return
xxx_messageInfo_
ShieldAmount
Rst
.
Size
(
m
)
}
}
func
(
m
*
CommitValue
Rst
)
XXX_DiscardUnknown
()
{
func
(
m
*
ShieldAmount
Rst
)
XXX_DiscardUnknown
()
{
xxx_messageInfo_
CommitValue
Rst
.
DiscardUnknown
(
m
)
xxx_messageInfo_
ShieldAmount
Rst
.
DiscardUnknown
(
m
)
}
}
var
xxx_messageInfo_
CommitValue
Rst
proto
.
InternalMessageInfo
var
xxx_messageInfo_
ShieldAmount
Rst
proto
.
InternalMessageInfo
func
(
m
*
CommitValue
Rst
)
GetNoteRandom
()
string
{
func
(
m
*
ShieldAmount
Rst
)
GetNoteRandom
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
NoteRandom
return
m
.
NoteRandom
}
}
return
""
return
""
}
}
func
(
m
*
CommitValue
Rst
)
GetTransferRandom
()
string
{
func
(
m
*
ShieldAmount
Rst
)
GetTransferRandom
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
TransferRandom
return
m
.
TransferRandom
}
}
return
""
return
""
}
}
func
(
m
*
CommitValue
Rst
)
GetChangeRandom
()
string
{
func
(
m
*
ShieldAmount
Rst
)
GetChangeRandom
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
ChangeRandom
return
m
.
ChangeRandom
}
}
return
""
return
""
}
}
func
(
m
*
CommitValueRst
)
GetNote
()
*
CommitValue
{
func
(
m
*
ShieldAmountRst
)
GetNote
()
*
ShieldAmount
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Note
return
m
.
Note
}
}
return
nil
return
nil
}
}
func
(
m
*
CommitValueRst
)
GetTransfer
()
*
CommitValue
{
func
(
m
*
ShieldAmountRst
)
GetTransfer
()
*
ShieldAmount
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Transfer
return
m
.
Transfer
}
}
return
nil
return
nil
}
}
func
(
m
*
CommitValueRst
)
GetChange
()
*
CommitValue
{
func
(
m
*
ShieldAmountRst
)
GetChange
()
*
ShieldAmount
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Change
return
m
.
Change
}
}
...
@@ -2929,7 +2928,7 @@ func (m *CommitValueRst) GetChange() *CommitValue {
...
@@ -2929,7 +2928,7 @@ func (m *CommitValueRst) GetChange() *CommitValue {
type
WalletIndexInfo
struct
{
type
WalletIndexInfo
struct
{
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
Nullifier
string
`protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"`
Nullifier
string
`protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"`
Auth
SpendHash
string
`protobuf:"bytes,3,opt,name=authSpendHash,proto3" json:"auth
SpendHash,omitempty"`
Auth
orizeSpendHash
string
`protobuf:"bytes,3,opt,name=authorizeSpendHash,proto3" json:"authorize
SpendHash,omitempty"`
IsReturner
bool
`protobuf:"varint,4,opt,name=isReturner,proto3" json:"isReturner,omitempty"`
IsReturner
bool
`protobuf:"varint,4,opt,name=isReturner,proto3" json:"isReturner,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Status
NoteStatus
`protobuf:"varint,6,opt,name=status,proto3,enum=types.NoteStatus" json:"status,omitempty"`
Status
NoteStatus
`protobuf:"varint,6,opt,name=status,proto3,enum=types.NoteStatus" json:"status,omitempty"`
...
@@ -2978,9 +2977,9 @@ func (m *WalletIndexInfo) GetNullifier() string {
...
@@ -2978,9 +2977,9 @@ func (m *WalletIndexInfo) GetNullifier() string {
return
""
return
""
}
}
func
(
m
*
WalletIndexInfo
)
GetAuthSpendHash
()
string
{
func
(
m
*
WalletIndexInfo
)
GetAuth
orize
SpendHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthSpendHash
return
m
.
Auth
orize
SpendHash
}
}
return
""
return
""
}
}
...
@@ -3063,7 +3062,7 @@ func (m *WalletDbMixInfo) GetTxIndex() string {
...
@@ -3063,7 +3062,7 @@ func (m *WalletDbMixInfo) GetTxIndex() string {
type
WalletMixIndexReq
struct
{
type
WalletMixIndexReq
struct
{
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
NoteHash
string
`protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
Nullifier
string
`protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"`
Nullifier
string
`protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"`
Auth
SpendHash
string
`protobuf:"bytes,3,opt,name=authSpendHash,proto3" json:"auth
SpendHash,omitempty"`
Auth
orizeSpendHash
string
`protobuf:"bytes,3,opt,name=authorizeSpendHash,proto3" json:"authorize
SpendHash,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Account
string
`protobuf:"bytes,5,opt,name=account,proto3" json:"account,omitempty"`
Status
int32
`protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
Status
int32
`protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"`
Count
int32
`protobuf:"varint,7,opt,name=count,proto3" json:"count,omitempty"`
Count
int32
`protobuf:"varint,7,opt,name=count,proto3" json:"count,omitempty"`
...
@@ -3112,9 +3111,9 @@ func (m *WalletMixIndexReq) GetNullifier() string {
...
@@ -3112,9 +3111,9 @@ func (m *WalletMixIndexReq) GetNullifier() string {
return
""
return
""
}
}
func
(
m
*
WalletMixIndexReq
)
GetAuthSpendHash
()
string
{
func
(
m
*
WalletMixIndexReq
)
GetAuth
orize
SpendHash
()
string
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
AuthSpendHash
return
m
.
Auth
orize
SpendHash
}
}
return
""
return
""
}
}
...
@@ -3634,11 +3633,11 @@ func init() {
...
@@ -3634,11 +3633,11 @@ func init() {
proto
.
RegisterType
((
*
AuthProofReq
)(
nil
),
"types.AuthProofReq"
)
proto
.
RegisterType
((
*
AuthProofReq
)(
nil
),
"types.AuthProofReq"
)
proto
.
RegisterType
((
*
AuthProofResp
)(
nil
),
"types.AuthProofResp"
)
proto
.
RegisterType
((
*
AuthProofResp
)(
nil
),
"types.AuthProofResp"
)
proto
.
RegisterType
((
*
TransferProofReq
)(
nil
),
"types.TransferProofReq"
)
proto
.
RegisterType
((
*
TransferProofReq
)(
nil
),
"types.TransferProofReq"
)
proto
.
RegisterType
((
*
CommitValue
)(
nil
),
"types.commitValue
"
)
proto
.
RegisterType
((
*
ShieldAmount
)(
nil
),
"types.ShieldAmount
"
)
proto
.
RegisterType
((
*
TransferInputProof
)(
nil
),
"types.TransferInputProof"
)
proto
.
RegisterType
((
*
TransferInputProof
)(
nil
),
"types.TransferInputProof"
)
proto
.
RegisterType
((
*
TransferOutputProof
)(
nil
),
"types.TransferOutputProof"
)
proto
.
RegisterType
((
*
TransferOutputProof
)(
nil
),
"types.TransferOutputProof"
)
proto
.
RegisterType
((
*
TransferProofResp
)(
nil
),
"types.TransferProofResp"
)
proto
.
RegisterType
((
*
TransferProofResp
)(
nil
),
"types.TransferProofResp"
)
proto
.
RegisterType
((
*
CommitValueRst
)(
nil
),
"types.CommitValue
Rst"
)
proto
.
RegisterType
((
*
ShieldAmountRst
)(
nil
),
"types.ShieldAmount
Rst"
)
proto
.
RegisterType
((
*
WalletIndexInfo
)(
nil
),
"types.WalletIndexInfo"
)
proto
.
RegisterType
((
*
WalletIndexInfo
)(
nil
),
"types.WalletIndexInfo"
)
proto
.
RegisterType
((
*
WalletDbMixInfo
)(
nil
),
"types.WalletDbMixInfo"
)
proto
.
RegisterType
((
*
WalletDbMixInfo
)(
nil
),
"types.WalletDbMixInfo"
)
proto
.
RegisterType
((
*
WalletMixIndexReq
)(
nil
),
"types.WalletMixIndexReq"
)
proto
.
RegisterType
((
*
WalletMixIndexReq
)(
nil
),
"types.WalletMixIndexReq"
)
...
@@ -3658,164 +3657,165 @@ func init() {
...
@@ -3658,164 +3657,165 @@ func init() {
}
}
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
var
fileDescriptor_5c21d519a9be369a
=
[]
byte
{
// 2504 bytes of a gzipped FileDescriptorProto
// 2515 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xec
,
0x59
,
0x4b
,
0x93
,
0x23
,
0x47
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xec
,
0x59
,
0xcd
,
0x6e
,
0x1b
,
0xc9
,
0x11
,
0x56
,
0xeb
,
0xad
,
0xd4
,
0x63
,
0xa4
,
0xda
,
0xf5
,
0x58
,
0x9e
,
0xc0
,
0x66
,
0x28
,
0xaf
,
0x97
,
0x11
,
0xd6
,
0xf0
,
0x57
,
0x2c
,
0x91
,
0x12
,
0xd5
,
0xf6
,
0x6a
,
0x69
,
0x21
,
0xeb
,
0x28
,
0xbd
,
0x5e
,
0xf1
,
0x98
,
0x18
,
0xcc
,
0xec
,
0xe2
,
0x30
,
0x07
,
0xec
,
0x10
,
0x2b
,
0xcd
,
0x4a
,
0xde
,
0x1d
,
0x8d
,
0xaf
,
0x22
,
0x07
,
0xda
,
0x0d
,
0xed
,
0x38
,
0xc9
,
0x21
,
0xbb
,
0x60
,
0x4c
,
0xca
,
0xe4
,
0xda
,
0xa2
,
0xa2
,
0xa4
,
0x7d
,
0x02
,
0x87
,
0x5e
,
0xa9
,
0x66
,
0xd4
,
0xb1
,
0x92
,
0xba
,
0xa7
,
0xbb
,
0x35
,
0x2b
,
0x88
,
0x26
,
0xfd
,
0x1b
,
0x24
,
0xc0
,
0x98
,
0x6c
,
0x89
,
0x03
,
0x93
,
0x9c
,
0xf1
,
0xcc
,
0x50
,
0xa6
,
0x71
,
0x82
,
0x0b
,
0x3e
,
0x11
,
0x04
,
0x07
,
0xae
,
0x10
,
0x9c
,
0x88
,
0xe0
,
0x4c
,
0x10
,
0x04
,
0xbf
,
0x72
,
0xca
,
0x21
,
0xc0
,
0x1e
,
0x82
,
0x9c
,
0x82
,
0x5c
,
0x03
,
0xe4
,
0x94
,
0x3c
,
0xc0
,
0x22
,
0x01
,
0x80
,
0x1f
,
0xc0
,
0x85
,
0x2b
,
0xbf
,
0x80
,
0x9f
,
0x40
,
0xd4
,
0xab
,
0xbb
,
0xba
,
0x25
,
0xcd
,
0x63
,
0xf2
,
0x0c
,
0x39
,
0xe6
,
0x01
,
0x02
,
0xe4
,
0x90
,
0x6b
,
0x1e
,
0x21
,
0xe8
,
0xbf
,
0x99
,
0xee
,
0x21
,
0xe1
,
0xc8
,
0xad
,
0x33
,
0x2b
,
0xab
,
0x2a
,
0xf3
,
0xcb
,
0x47
,
0x65
,
0x55
,
0x43
,
0x61
,
0x6a
,
0x2d
,
0xa9
,
0x1f
,
0x67
,
0x73
,
0xdb
,
0x1b
,
0xab
,
0xe6
,
0xeb
,
0xee
,
0xaa
,
0xaf
,
0xaa
,
0xab
,
0xab
,
0x9b
,
0x0e
,
0x1c
,
0xd7
,
0xf6
,
0x6d
,
0x94
,
0xf1
,
0x97
,
0x0e
,
0xf5
,
0x76
,
0x4a
,
0x43
,
0x7b
,
0x3a
,
0xb5
,
0x50
,
0x18
,
0x3b
,
0xb3
,
0x7d
,
0xcf
,
0x77
,
0x43
,
0x17
,
0x65
,
0xc3
,
0x33
,
0x8f
,
0x06
,
0xdb
,
0xc5
,
0x67
,
0x82
,
0xb9
,
0x53
,
0xf3
,
0x5d
,
0x73
,
0xe6
,
0x99
,
0x43
,
0xdf
,
0x52
,
0x2c
,
0xfc
,
0x15
,
0x14
,
0xbe
,
0x3b
,
0x1e
,
0xbb
,
0x13
,
0xa1
,
0xdc
,
0xde
,
0x0c
,
0x7d
,
0x7b
,
0x12
,
0xd8
,
0xfd
,
0xd0
,
0x51
,
0x5f
,
0xbe
,
0x7e
,
0x4a
,
0x5d
,
0xeb
,
0x74
,
0xf9
,
0x88
,
0x2e
,
0xd1
,
0x47
,
0x90
,
0x66
,
0x13
,
0xeb
,
0x2a
,
0xfc
,
0x05
,
0xac
,
0xbd
,
0x7c
,
0xfd
,
0x94
,
0xfa
,
0xce
,
0xf1
,
0xd9
,
0x23
,
0x7a
,
0x86
,
0x3e
,
0xc6
,
0xae
,
0xb1
,
0x57
,
0x39
,
0xac
,
0x1d
,
0xf0
,
0x55
,
0x0e
,
0xc4
,
0xf8
,
0x60
,
0xe9
,
0x50
,
0xc2
,
0x82
,
0x0c
,
0x1b
,
0x58
,
0xb1
,
0x76
,
0xac
,
0xdd
,
0xf5
,
0xea
,
0xe6
,
0x3e
,
0x9f
,
0x65
,
0x5f
,
0x7c
,
0x87
,
0xd1
,
0x6d
,
0xc8
,
0x5c
,
0x98
,
0x93
,
0x39
,
0xad
,
0x27
,
0x77
,
0x8d
,
0xbd
,
0x02
,
0x11
,
0x04
,
0xef
,
0x9d
,
0x79
,
0x94
,
0xf0
,
0xcf
,
0xe8
,
0x3a
,
0x64
,
0x4f
,
0xed
,
0xd1
,
0x94
,
0x56
,
0x52
,
0x3b
,
0xfe
,
0x0c
,
0x4a
,
0xda
,
0x5a
,
0x1e
,
0xba
,
0x0b
,
0xe9
,
0x91
,
0xe9
,
0x9b
,
0x75
,
0x63
,
0x37
,
0xb5
,
0xd6
,
0x6e
,
0x81
,
0x08
,
0x01
,
0xdf
,
0x87
,
0xa2
,
0x36
,
0x57
,
0x80
,
0x6e
,
0x43
,
0x66
,
0x60
,
0x87
,
0x57
,
0x3c
,
0x44
,
0x72
,
0x31
,
0x4d
,
0x84
,
0xf0
,
0x71
,
0xfc
,
0x2d
,
0x28
,
0x36
,
0xe6
,
0xfe
,
0xb8
,
0x76
,
0xc5
,
0xda
,
0x49
,
0xef
,
0xae
,
0x55
,
0x91
,
0x9c
,
0x4c
,
0x83
,
0x10
,
0xfe
,
0x1d
,
0x7f
,
0x07
,
0x37
,
0x7f
,
0xc5
,
0xa7
,
0x21
,
0x6d
,
0x5a
,
0x41
,
0x8a
,
0x9c
,
0x03
,
0xf4
,
0xcc
,
0xe5
,
0x94
,
0xce
,
0xd6
,
0x6a
,
0xd3
,
0x70
,
0xd8
,
0x99
,
0xbe
,
0xe2
,
0xc3
,
0x90
,
0x36
,
0xac
,
0x20
,
0x21
,
0x2e
,
0x40
,
0x7c
,
0xa6
,
0x25
,
0x82
,
0xb4
,
0x39
,
0x1a
,
0xb9
,
0x5c
,
0xcb
,
0x02
,
0xe1
,
0xdf
,
0xe8
,
0x1b
,
0x50
,
0xc7
,
0x3e
,
0x1b
,
0xd3
,
0x49
,
0xc8
,
0xac
,
0x44
,
0x90
,
0xb1
,
0x07
,
0x03
,
0x9f
,
0x5b
,
0x59
,
0x20
,
0x70
,
0xcc
,
0xa5
,
0x35
,
0x3b
,
0x7b
,
0x44
,
0x97
,
0x52
,
0xad
,
0x90
,
0x81
,
0xbe
,
0x07
,
0x25
,
0x97
,
0xfc
,
0x37
,
0xda
,
0x81
,
0x35
,
0x9f
,
0xf6
,
0xa9
,
0x73
,
0x4a
,
0xfd
,
0x47
,
0xf4
,
0x4c
,
0x1a
,
0xa6
,
0x0e
,
0xa9
,
0x75
,
0x21
,
0x05
,
0x52
,
0xbb
,
0xc6
,
0x5e
,
0xf1
,
0xb0
,
0x2c
,
0x55
,
0x12
,
0x3b
,
0x93
,
0xab
,
0xd0
,
0x1d
,
0x28
,
0x04
,
0xb4
,
0xef
,
0x53
,
0x36
,
0x45
,
0x25
,
0xbd
,
0x63
,
0xed
,
0xae
,
0x55
,
0x88
,
0x08
,
0xfe
,
0xb7
,
0x01
,
0x5b
,
0xc7
,
0xd6
,
0xe2
,
0x81
,
0x3d
,
0x3b
,
0xb5
,
0xce
,
0x1a
,
0x1c
,
0x4b
,
0xd2
,
0x26
,
0xb1
,
0x34
,
0x89
,
0xbf
,
0xe3
,
0xff
,
0x58
,
0xb0
,
0x71
,
0xe8
,
0xcc
,
0x1e
,
0xb8
,
0x33
,
0x74
,
0x07
,
0x92
,
0x83
,
0xa5
,
0x04
,
0xe7
,
0xb6
,
0x9c
,
0x1c
,
0xc8
,
0x70
,
0x7c
,
0x92
,
0x83
,
0x93
,
0x63
,
0xe7
,
0xa4
,
0xc6
,
0x19
,
0x43
,
0xb7
,
0x20
,
0xd5
,
0x3b
,
0x93
,
0xd4
,
0x5c
,
0x97
,
0x23
,
0x25
,
0xfa
,
0x04
,
0xb2
,
0x42
,
0x9e
,
0xeb
,
0x51
,
0x39
,
0xbc
,
0x15
,
0x97
,
0x6c
,
0x0c
,
0x7d
,
0x22
,
0x23
,
0x0c
,
0x67
,
0x27
,
0xd5
,
0x63
,
0xcb
,
0xe4
,
0x04
,
0x9e
,
0xdb
,
0xb0
,
0x5e
,
0xbd
,
0x96
,
0x44
,
0x45
,
0xd0
,
0x21
,
0x14
,
0x2e
,
0x14
,
0x1e
,
0x52
,
0xad
,
0x35
,
0x48
,
0xb5
,
0x13
,
0x24
,
0x14
,
0x43
,
0xd6
,
0xfa
,
0x21
,
0x91
,
0x10
,
0x54
,
0x85
,
0xc2
,
0xa9
,
0x62
,
0x43
,
0xda
,
0xb4
,
0x80
,
0xa7
,
0xe6
,
0x75
,
0xc8
,
0x9a
,
0x0c
,
0xb0
,
0xd7
,
0xf5
,
0x34
,
0x33
,
0xb4
,
0x9d
,
0x20
,
0x92
,
0x46
,
0xf7
,
0x00
,
0x0a
,
0x89
,
0x61
,
0xa8
,
0x02
,
0x39
,
0x9b
,
0xd1
,
0xf5
,
0xba
,
0x92
,
0x61
,
0x4e
,
0x36
,
0x57
,
0x88
,
0x9c
,
0x00
,
0xa7
,
0x7a
,
0x86
,
0x2f
,
0xa7
,
0xbc
,
0x18
,
0x02
,
0xd8
,
0x4e
,
0x10
,
0x4d
,
0xec
,
0x47
,
0x94
,
0xd1
,
0x5d
,
0x00
,
0x2f
,
0x62
,
0xa9
,
0x92
,
0xe5
,
0xd3
,
0xa9
,
0x18
,
0xc6
,
0xf4
,
0x35
,
0x57
,
0x39
,
0xe9
,
0x4d
,
0xfc
,
0x00
,
0xf2
,
0xcd
,
0x76
,
0x9f
,
0x0e
,
0x5d
,
0xea
,
0xa3
,
0x6f
,
0x42
,
0x8a
,
0x88
,
0x06
,
0xfb
,
0x69
,
0x5e
,
0xc6
,
0x12
,
0x3f
,
0x80
,
0xd5
,
0x7a
,
0xb3
,
0xcb
,
0x19
,
0x40
,
0xdf
,
0x3a
,
0xaf
,
0xb9
,
0xad
,
0x2b
,
0x40
,
0xb1
,
0x11
,
0xb4
,
0x0d
,
0x59
,
0x8f
,
0x8b
,
0x72
,
0xad
,
0x0b
,
0x86
,
0x34
,
0xf5
,
0x5e
,
0x73
,
0x5f
,
0xe7
,
0x58
,
0x62
,
0x5f
,
0xd0
,
0x16
,
0xe4
,
0x04
,
0x59
,
0xdc
,
0x44
,
0x52
,
0x78
,
0x08
,
0x65
,
0xb5
,
0xc8
,
0x43
,
0xd7
,
0x9e
,
0x3b
,
0xa8
,
0x0e
,
0x39
,
0xb9
,
0x99
,
0xea
,
0x02
,
0x91
,
0x12
,
0xa6
,
0x50
,
0x52
,
0x93
,
0x3c
,
0xf4
,
0xdd
,
0xa9
,
0x87
,
0xb6
,
0x61
,
0x55
,
0x74
,
0x98
,
0x22
,
0xd1
,
0x0e
,
0xe4
,
0x5d
,
0xea
,
0xcf
,
0xdd
,
0x19
,
0x75
,
0xa5
,
0xcb
,
0x02
,
0x9a
,
0x05
,
0x41
,
0xc6
,
0x2b
,
0x92
,
0xc5
,
0xb7
,
0x70
,
0xea
,
0x4f
,
0xa8
,
0x2f
,
0x03
,
0x16
,
0xc9
,
0xe8
,
0xf9
,
0x93
,
0xd9
,
0x64
,
0xbb
,
0xd6
,
0xcf
,
0xa8
,
0xdc
,
0x21
,
0x64
,
0xe0
,
0x39
,
0x0b
,
0xdb
,
0x9e
,
0x5b
,
0x50
,
0x60
,
0x5e
,
0xb9
,
0xbe
,
0xf3
,
0x4b
,
0x2a
,
0xd7
,
0x88
,
0x15
,
0x78
,
0xca
,
0xd2
,
0xb6
,
0x6b
,
0xdb
,
0xa7
,
0x9d
,
0xd9
,
0xa9
,
0xcd
,
0xe2
,
0xd1
,
0x61
,
0x84
,
0xdc
,
0x40
,
0x10
,
0x68
,
0x17
,
0xe3
,
0xbb
,
0xee
,
0x71
,
0x6b
,
0x72
,
0xec
,
0xb2
,
0x7c
,
0xf4
,
0x98
,
0x20
,
0x57
,
0x10
,
0x02
,
0x4b
,
0x8a
,
0xce
,
0xfc
,
0xd5
,
0xc4
,
0x1a
,
0x76
,
0x66
,
0xce
,
0xdc
,
0x97
,
0x3b
,
0xe8
,
0x2c
,
0x74
,
0x00
,
0x09
,
0x6f
,
0xfa
,
0x6a
,
0xe4
,
0xf4
,
0x5b
,
0x13
,
0x6f
,
0x1a
,
0xaa
,
0x94
,
0xd0
,
0x54
,
0x68
,
0x1f
,
0x39
,
0xa1
,
0xb5
,
0x27
,
0xa1
,
0x57
,
0x4e
,
0x8d
,
0x58
,
0x40
,
0x94
,
0x10
,
0x1e
,
0x40
,
0xf5
,
0xd8
,
0xf2
,
0xc2
,
0xee
,
0x40
,
0x92
,
0xaf
,
0xc2
,
0x6a
,
0xf8
,
0x40
,
0x14
,
0x08
,
0xf7
,
0xa0
,
0x7c
,
0xe8
,
0x5a
,
0x34
,
0xa9
,
0x63
,
0x7b
,
0x96
,
0x2f
,
0x1d
,
0xb8
,
0x0d
,
0x59
,
0x73
,
0x6a
,
0xcf
,
0xa5
,
0x75
,
0xcc
,
0xea
,
0xd4
,
0x73
,
0x03
,
0x27
,
0x94
,
0x21
,
0xdc
,
0x82
,
0x9c
,
0x3d
,
0x76
,
0xa7
,
0x93
,
0x90
,
0x69
,
0x22
,
0x29
,
0xb4
,
0xa7
,
0x74
,
0x4a
,
0xc6
,
0x9c
,
0x1a
,
0xa8
,
0x2d
,
0xf5
,
0xc4
,
0xbf
,
0x35
,
0x2f
,
0x9e
,
0x21
,
0x52
,
0x42
,
0xbb
,
0xca
,
0xa6
,
0x54
,
0x22
,
0xac
,
0x91
,
0xd9
,
0xd2
,
0x4e
,
0xfc
,
0xa0
,
0x76
,
0x6c
,
0x2d
,
0x06
,
0x2c
,
0x39
,
0x4f
,
0xa9
,
0x2b
,
0xd7
,
0xdd
,
0x83
,
0x8c
,
0xc5
,
0xf5
,
0x7b
,
0x0b
,
0x36
,
0x0f
,
0x9d
,
0x59
,
0x8f
,
0x6d
,
0xce
,
0x63
,
0xea
,
0xcb
,
0x79
,
0x77
,
0x21
,
0xeb
,
0x36
,
0x36
,
0xcf
,
0xe7
,
0x02
,
0x68
,
0x1f
,
0xb2
,
0xf6
,
0xdc
,
0x57
,
0x26
,
0xae
,
0x17
,
0x95
,
0x12
,
0x70
,
0xbb
,
0xad
,
0xe5
,
0xe3
,
0x39
,
0x00
,
0xed
,
0x41
,
0xce
,
0x9d
,
0x86
,
0xca
,
0xc5
,
0xc5
,
0x50
,
0x4c
,
0x76
,
0x38
,
0x36
,
0x67
,
0x67
,
0x74
,
0x25
,
0xd6
,
0x34
,
0x59
,
0x21
,
0x81
,
0x87
,
0x5c
,
0xad
,
0x89
,
0x60
,
0xd8
,
0xfe
,
0xd0
,
0x9e
,
0x9c
,
0xd0
,
0xb9
,
0x6c
,
0xd3
,
0xb0
,
0x02
,
0x81
,
0xfb
,
0xdc
,
0x67
,
0x96
,
0x3f
,
0x1e
,
0xb9
,
0xe6
,
0x9b
,
0x2b
,
0xcc
,
0xfd
,
0x0c
,
0x4a
,
0x9e
,
0x43
,
0x67
,
0xa3
,
0xac
,
0x67
,
0x4e
,
0x38
,
0x1c
,
0xf8
,
0xf6
,
0xdb
,
0x0b
,
0xdc
,
0xbd
,
0x0f
,
0xc5
,
0xc0
,
0xa3
,
0x93
,
0x07
,
0xf6
,
0x74
,
0x6a
,
0xf9
,
0x5e
,
0x3d
,
0x19
,
0x4b
,
0xfa
,
0x70
,
0xf9
,
0x88
,
0x1c
,
0xfe
,
0x0a
,
0xc1
,
0x03
,
0x77
,
0x3c
,
0x76
,
0xc2
,
0xa0
,
0x92
,
0x4a
,
0x6c
,
0xfa
,
0x78
,
0x7a
,
0x03
,
0x87
,
0xbf
,
0xd0
,
0xb1
,
0xb5
,
0x68
,
0x28
,
0xcf
,
0xca
,
0x5d
,
0xee
,
0x43
,
0x91
,
0x39
,
0x5b
,
0x2d
,
0x66
,
0x6c
,
0x00
,
0x74
,
0xe8
,
0xcc
,
0x6a
,
0x2a
,
0xb2
,
0x72
,
0x95
,
0x7b
,
0xb0
,
0xc6
,
0x82
,
0xad
,
0x26
,
0xb3
,
0x5c
,
0x4c
,
0x17
,
0xc3
,
0x7f
,
0x49
,
0x42
,
0x81
,
0x2d
,
0x26
,
0xd6
,
0xa8
,
0x40
,
0xd2
,
0x17
,
0xc9
,
0x96
,
0x4e
,
0xa6
,
0xc3
,
0xf0
,
0x5f
,
0x52
,
0x50
,
0x60
,
0x93
,
0x89
,
0x39
,
0xd6
,
0x21
,
0x15
,
0x8a
,
0x9a
,
0x21
,
0x49
,
0x7f
,
0x89
,
0x3e
,
0x85
,
0xec
,
0x90
,
0xa7
,
0x9f
,
0x84
,
0x69
,
0x7b
,
0x4d
,
0x5a
,
0xed
,
0x9a
,
0x25
,
0xa9
,
0xf0
,
0x0c
,
0x7d
,
0x0a
,
0xb9
,
0x3e
,
0xdf
,
0x80
,
0x92
,
0xa6
,
0xad
,
0x05
,
0x5a
,
0xf6
,
0x8c
,
0x65
,
0x93
,
0x90
,
0x43
,
0xf7
,
0x20
,
0x37
,
0x12
,
0xbe
,
0x96
,
0x68
,
0xbd
,
0x1b
,
0x1b
,
0xd3
,
0x71
,
0x27
,
0x6c
,
0x3f
,
0x09
,
0x1c
,
0xba
,
0x0b
,
0xf9
,
0x81
,
0x88
,
0xb5
,
0x64
,
0xeb
,
0x4e
,
0x89
,
0x04
,
0x41
,
0x3b
,
0x41
,
0x94
,
0x24
,
0xfa
,
0x0c
,
0xf2
,
0x6f
,
0x24
,
0x64
,
0x3c
,
0x3d
,
0xfd
,
0x78
,
0x88
,
0x91
,
0x04
,
0xcd
,
0x15
,
0xa2
,
0x90
,
0xe8
,
0x3e
,
0xac
,
0xbe
,
0x95
,
0x94
,
0xf1
,
0x8b
,
0x87
,
0xf5
,
0x70
,
0x56
,
0x14
,
0xcc
,
0x76
,
0x82
,
0x04
,
0xb2
,
0x6c
,
0x9e
,
0x2f
,
0x23
,
0x40
,
0x0d
,
0xba
,
0x56
,
0xad
,
0xc4
,
0xa3
,
0x4c
,
0x32
,
0x9b
,
0x2b
,
0x24
,
0xc2
,
0xb2
,
0x71
,
0xa1
,
0xcc
,
0x26
,
0xae
,
0x36
,
0x2f
,
0x1a
,
0x1b
,
0x6c
,
0x9e
,
0x92
,
0x45
,
0x3f
,
0xd0
,
0x13
,
0x25
,
0xcb
,
0x27
,
0x00
,
0xb9
,
0x75
,
0xb5
,
0x71
,
0x66
,
0x6e
,
0xb0
,
0x71
,
0x0a
,
0x8b
,
0x7e
,
0xac
,
0x6f
,
0x94
,
0x1c
,
0xbe
,
0x17
,
0x4e
,
0x8c
,
0x01
,
0xcb
,
0xea
,
0x48
,
0x20
,
0x1d
,
0x26
,
0x7e
,
0x1b
,
0x90
,
0xb4
,
0xa7
,
0x1f
,
0x78
,
0x23
,
0x1e
,
0x98
,
0x20
,
0x96
,
0x55
,
0x92
,
0x08
,
0x1d
,
0x6f
,
0xfd
,
0x26
,
0x20
,
0xe9
,
0xa7
,
0x65
,
0xc7
,
0x0e
,
0xe4
,
0x67
,
0xb6
,
0x4f
,
0xdb
,
0xa6
,
0x37
,
0x96
,
0x89
,
0x15
,
0xd0
,
0x5a
,
0x4f
,
0x47
,
0xdb
,
0x1d
,
0xdb
,
0xb0
,
0x3a
,
0x71
,
0x43
,
0xda
,
0xb4
,
0x83
,
0xa1
,
0xda
,
0xba
,
0x4a
,
0x18
,
0x88
,
0xb4
,
0x92
,
0x14
,
0xfe
,
0xa3
,
0x01
,
0xb7
,
0x94
,
0x91
,
0xfa
,
0x5a
,
0x18
,
0x4a
,
0xbe
,
0xd6
,
0xd2
,
0x40
,
0x6c
,
0x2b
,
0x29
,
0xe1
,
0x3f
,
0x59
,
0x70
,
0x4d
,
0x39
,
0xa9
,
0xcf
,
0x85
,
0xa1
,
0x4b
,
0x29
,
0xb1
,
0x6d
,
0x5f
,
0x5b
,
0x2f
,
0xc2
,
0x43
,
0x77
,
0xa0
,
0x3c
,
0x9b
,
0x4f
,
0x26
,
0xd6
,
0x18
,
0xfa
,
0x94
,
0x12
,
0xd7
,
0x0d
,
0xb5
,
0xf9
,
0x0c
,
0x1d
,
0xba
,
0x05
,
0xa5
,
0xc9
,
0x74
,
0x34
,
0xa9
,
0x45
,
0x5d
,
0x2e
,
0x24
,
0x96
,
0x8e
,
0x32
,
0xd1
,
0x01
,
0xa0
,
0xc0
,
0x82
,
0x3e
,
0x8b
,
0x24
,
0x72
,
0x8e
,
0x1d
,
0xea
,
0x73
,
0x90
,
0x98
,
0xda
,
0x54
,
0xa2
,
0x7d
,
0x40
,
0x91
,
0x07
,
0x5d
,
0x96
,
0x2e
,
0x2a
,
0x2a
,
0xc4
,
0x9a
,
0x11
,
0x4d
,
0xd3
,
0x74
,
0x44
,
0xd3
,
0xbf
,
0x1b
,
0x50
,
0x57
,
0xb0
,
0x49
,
0x1c
,
0x2a
,
0x2a
,
0xc4
,
0x82
,
0x2f
,
0x9a
,
0xa5
,
0x19
,
0xc3
,
0xd2
,
0x7f
,
0x5a
,
0x50
,
0x51
,
0x72
,
0x1d
,
0x6f
,
0xaa
,
0x6e
,
0x1d
,
0x72
,
0x62
,
0xa9
,
0xe7
,
0x52
,
0x51
,
0x45
,
0x86
,
0x23
,
0x2f
,
0xb4
,
0x72
,
0x1b
,
0xdf
,
0xc1
,
0xdc
,
0x60
,
0xe8
,
0xd0
,
0xd1
,
0xa0
,
0xc6
,
0x27
,
0x7c
,
0xae
,
0xcc
,
0xa4
,
0x5e
,
0x8a
,
0xdc
,
0xa0
,
0x7c
,
0x7a
,
0xa3
,
0xf2
,
0x2b
,
0x90
,
0x64
,
0xd6
,
0x40
,
0x82
,
0x7f
,
0x35
,
0x94
,
0x49
,
0xd4
,
0x0b
,
0x69
,
0xa9
,
0xa9
,
0x5c
,
0xe2
,
0x54
,
0x66
,
0xa9
,
0x53
,
0x73
,
0x54
,
0x6f
,
0xc0
,
0x7b
,
0xca
,
0x94
,
0x13
,
0x9e
,
0xe7
,
0xd7
,
0x75
,
0xe3
,
0xdb
,
0xd8
,
0x70
,
0x08
,
0x85
,
0x65
,
0x17
,
0x50
,
0x85
,
0xff
,
0x6a
,
0xc1
,
0x0d
,
0xe5
,
0xe2
,
0x11
,
0xdf
,
0xff
,
0x97
,
0x0d
,
0xef
,
0xd1
,
0xb8
,
0x2f
,
0xcb
,
0x66
,
0xfa
,
0x92
,
0xb2
,
0x19
,
0x8a
,
0xe1
,
0xbf
,
0x19
,
0x70
,
0x3b
,
0x08
,
0xd7
,
0xe9
,
0x5b
,
0x15
,
0x0a
,
0x83
,
0x61
,
0x57
,
0x96
,
0xd9
,
0xcc
,
0x39
,
0x65
,
0x36
,
0x86
,
0xe1
,
0xc5
,
0x9b
,
0x02
,
0xbd
,
0x07
,
0x5b
,
0xa6
,
0x36
,
0x37
,
0x3c
,
0xe0
,
0xe3
,
0x6c
,
0x06
,
0x57
,
0xc0
,
0xbf
,
0x59
,
0x70
,
0x3d
,
0x4a
,
0xdd
,
0xab
,
0x06
,
0x66
,
0x17
,
0x36
,
0x6c
,
0x6d
,
0x6c
,
0xdc
,
0x0e
,
0xd2
,
0xc2
,
0x22
,
0xca
,
0xbc
,
0xa9
,
0x13
,
0xf0
,
0x2e
,
0x40
,
0x6b
,
0x61
,
0x79
,
0xfe
,
0x53
,
0x96
,
0x24
,
0xd5
,
0xcc
,
0x81
,
0x48
,
0xa5
,
0xa5
,
0x91
,
0xa9
,
0xbc
,
0x6a
,
0x70
,
0xf0
,
0x0e
,
0x40
,
0x63
,
0x2b
,
0x5a
,
0x7b
,
0x62
,
0xec
,
0xe5
,
0x65
,
0x7b
,
0x72
,
0x17
,
0xaa
,
0xa2
,
0x06
,
0x0d
,
0x5c
,
0x4a
,
0xe6
,
0x04
,
0xe1
,
0x53
,
0xb6
,
0xb7
,
0xb4
,
0x76
,
0xc6
,
0xda
,
0x5d
,
0x95
,
0xed
,
0xcc
,
0x6d
,
0x28
,
0x1f
,
0x53
,
0xf3
,
0x82
,
0x46
,
0xdb
,
0x98
,
0x92
,
0x94
,
0xfb
,
0x08
,
0xb6
,
0x42
,
0x39
,
0x66
,
0xdf
,
0x8b
,
0x9a
,
0xd5
,
0xf3
,
0x29
,
0x7d
,
0x4c
,
0xed
,
0x53
,
0x6a
,
0xb6
,
0x3d
,
0x45
,
0x89
,
0xfb
,
0x08
,
0x7a
,
0xb1
,
0x3f
,
0x18
,
0xba
,
0x5c
,
0xcf
,
0xb5
,
0x2f
,
0x28
,
0x3f
,
0x2b
,
0xa3
,
0x20
,
0x05
,
0x34
,
0x36
,
0x62
,
0x1c
,
0xf3
,
0x6f
,
0x31
,
0xec
,
0x8f
,
0x96
,
0x8e
,
0xeb
,
0xf8
,
0xee
,
0x29
,
0xe5
,
0x67
,
0x1b
,
0xe3
,
0x27
,
0x49
,
0x9f
,
0xfa
,
0xbc
,
0xee
,
0x16
,
0x48
,
0x40
,
0xa3
,
0x0f
,
0x00
,
0x1c
,
0x51
,
0xab
,
0x49
,
0x52
,
0x24
,
0xb3
,
0x6f
,
0xfc
,
0xe4
,
0xe9
,
0xd2
,
0x90
,
0xd7
,
0xe9
,
0x02
,
0x89
,
0x64
,
0x2d
,
0x47
,
0x74
,
0xc1
,
0xf1
,
0x28
,
0x13
,
0x8d
,
0xc3
,
0xce
,
0xd9
,
0xd9
,
0x7c
,
0x2a
,
0x74
,
0xe6
,
0x74
,
0x13
,
0xc0
,
0x13
,
0xd5
,
0x75
,
0x40
,
0x67
,
0x9c
,
0x8f
,
0x12
,
0xd1
,
0x34
,
0xec
,
0x5c
,
0x9e
,
0x18
,
0x94
,
0x49
,
0xc8
,
0x60
,
0x51
,
0x30
,
0xa6
,
0x13
,
0x87
,
0xba
,
0x5e
,
0x3d
,
0xb3
,
0x9b
,
0xda
,
0x4c
,
0xc7
,
0xc2
,
0x66
,
0xce
,
0x41
,
0x89
,
0xc4
,
0x0a
,
0x54
,
0x81
,
0xfc
,
0x90
,
0x8e
,
0x3c
,
0xea
,
0x2b
,
0x13
,
0x45
,
0xe2
,
0x16
,
0x14
,
0x99
,
0x72
,
0xbc
,
0x08
,
0xd3
,
0xf3
,
0xab
,
0xd4
,
0x9b
,
0x50
,
0x07
,
0x95
,
0xec
,
0x4e
,
0x7a
,
0xb7
,
0x44
,
0x94
,
0x88
,
0x1b
,
0xb0
,
0xc6
,
0x8c
,
0xe3
,
0x45
,
0x9b
,
0xf3
,
0x54
,
0x4b
,
0xe9
,
0x80
,
0xc6
,
0x77
,
0xa0
,
0xc4
,
0x31
,
0xb3
,
0x3c
,
0x9f
,
0x50
,
0xcf
,
0x61
,
0xbe
,
0xb9
,
0xc8
,
0xbc
,
0x11
,
0xb5
,
0x8f
,
0xb5
,
0x12
,
0x10
,
0xc9
,
0xf8
,
0x16
,
0x14
,
0x39
,
0x67
,
0x27
,
0x39
,
0x83
,
0xc0
,
0x93
,
0xdd
,
0x9f
,
0x20
,
0x70
,
0x13
,
0x2a
,
0x61
,
0xf7
,
0xd2
,
0x33
,
0x2d
,
0x4e
,
0x10
,
0x12
,
0x1a
,
0x78
,
0xec
,
0xe4
,
0x67
,
0x14
,
0x04
,
0xb2
,
0x5b
,
0x14
,
0x02
,
0x7e
,
0x09
,
0x97
,
0x65
,
0xb5
,
0x63
,
0xf2
,
0x9e
,
0x49
,
0xec
,
0x26
,
0x29
,
0xb6
,
0x17
,
0x3f
,
0x5e
,
0xc2
,
0x20
,
0xeb
,
0x71
,
0xbf
,
0xd3
,
0xb1
,
0x1d
,
0x1f
,
0xdd
,
0x86
,
0x75
,
0xd5
,
0x76
,
0xc8
,
0x94
,
0x10
,
0xab
,
0x09
,
0x68
,
0x7c
,
0x07
,
0xb2
,
0x32
,
0x4e
,
0x4a
,
0x60
,
0x3c
,
0x97
,
0x13
,
0x8d
,
0xe7
,
0x8c
,
0x7a
,
0x26
,
0xb4
,
0xac
,
0x67
,
0xe0
,
0xc7
,
0x53
,
0xc7
,
0x77
,
0xb4
,
0x36
,
0x52
,
0x53
,
0xe1
,
0x5b
,
0x90
,
0x21
,
0x85
,
0x8d
,
0x17
,
0xf8
,
0x7d
,
0xc8
,
0xf5
,
0x5c
,
0xeb
,
0x42
,
0xf6
,
0x99
,
0x81
,
0xab
,
0x55
,
0x93
,
0xd8
,
0x22
,
0x58
,
0xcf
,
0xe5
,
0x34
,
0xd6
,
0x73
,
0x26
,
0xbd
,
0x90
,
0x78
,
0xeb
,
0x05
,
0xfe
,
0x27
,
0x6a
,
0x03
,
0xea
,
0x8f
,
0x4d
,
0x97
,
0x8a
,
0xc8
,
0x56
,
0xea
,
0xec
,
0x41
,
0xce
,
0x11
,
0x93
,
0x00
,
0xf2
,
0x1d
,
0xdf
,
0x39
,
0x95
,
0xdd
,
0x6a
,
0x94
,
0x00
,
0x71
,
0x3f
,
0x8b
,
0xba
,
0x43
,
0xdb
,
0xe4
,
0x71
,
0x5d
,
0x51
,
0x1d
,
0x93
,
0xe0
,
0x12
,
0x35
,
0x8c
,
0xbe
,
0x0b
,
0xc5
,
0xa0
,
0xcd
,
0xec
,
0xa7
,
0x5d
,
0xd5
,
0x70
,
0x72
,
0x23
,
0x77
,
0x21
,
0xef
,
0x89
,
0x41
,
0xf2
,
0xd0
,
0x5f
,
0x57
,
0x9d
,
0xbd
,
0x96
,
0x47
,
0x51
,
0xac
,
0xbf
,
0xd2
,
0x25
,
0xf0
,
0xaf
,
0x0c
,
0xa8
,
0x35
,
0x86
,
0x43
,
0x96
,
0x97
,
0xd0
,
0x12
,
0xf5
,
0x19
,
0x7d
,
0xa2
,
0xba
,
0x5d
,
0x67
,
0x72
,
0xd2
,
0x79
,
0x2d
,
0x0f
,
0xb4
,
0x7b
,
0x6c
,
0x31
,
0x73
,
0xc8
,
0xed
,
0xfc
,
0x7e
,
0xa4
,
0xd1
,
0x13
,
0x7b
,
0xbe
,
0xb3
,
0xd2
,
0xe8
,
0x44
,
0x9f
,
0xa6
,
0x23
,
0xf0
,
0x6f
,
0x2d
,
0xd8
,
0xac
,
0xf5
,
0xfb
,
0x6c
,
0x47
,
0xb2
,
0xc9
,
0xec
,
0x31
,
0xdd
,
0xf4
,
0x56
,
0x0f
,
0x35
,
0xa0
,
0xe2
,
0x45
,
0xb4
,
0x97
,
0x0a
,
0xa8
,
0x13
,
0x63
,
0xd5
,
0x3e
,
0x6f
,
0x25
,
0x7f
,
0x60
,
0x34
,
0x8c
,
0x62
,
0xcd
,
0xf7
,
0xe6
,
0x1a
,
0x46
,
0x66
,
0x9b
,
0xde
,
0x34
,
0x12
,
0x9b
,
0x80
,
0x7f
,
0x0c
,
0xb5
,
0x67
,
0xe6
,
0x64
,
0x42
,
0xfd
,
0xc6
,
0x68
,
0xe4
,
0x4a
,
0x32
,
0xa2
,
0x1a
,
0xac
,
0x07
,
0x86
,
0xf5
,
0xd2
,
0x00
,
0x75
,
0xee
,
0xcc
,
0xbb
,
0x46
,
0x12
,
0x03
,
0x8d
,
0xd0
,
0xa1
,
0xb0
,
0xdf
,
0x1c
,
0x2a
,
0x5d
,
0xd4
,
0xd9
,
0xb5
,
0xa2
,
0x39
,
0x51
,
0x82
,
0x41
,
0xf0
,
0xcf
,
0x60
,
0xf3
,
0x99
,
0x3d
,
0x1a
,
0xd1
,
0xb0
,
0x36
,
0x18
,
0xf8
,
0xd2
,
0x22
,
0x54
,
0x15
,
0x17
,
0x9f
,
0x0c
,
0xbb
,
0x78
,
0xfc
,
0x57
,
0x03
,
0x40
,
0x6c
,
0xd5
,
0x34
,
0x7d
,
0x93
,
0xe5
,
0xb3
,
0xfe
,
0xdb
,
0x7d
,
0x65
,
0x8b
,
0x3a
,
0x01
,
0xe7
,
0x2c
,
0x27
,
0x0a
,
0x18
,
0xdd
,
0x05
,
0x52
,
0xf1
,
0x54
,
0x5e
,
0xe6
,
0xbd
,
0xf0
,
0x44
,
0x94
,
0xc9
,
0x6a
,
0x88
,
0x68
,
0x1b
,
0x23
,
0xc5
,
0x21
,
0xc2
,
0x5d
,
0x80
,
0x55
,
0x0f
,
0x10
,
0x4b
,
0xd5
,
0xed
,
0xd0
,
0xbe
,
0x74
,
0xec
,
0x31
,
0x14
,
0x45
,
0xfb
,
0x5b
,
0x57
,
0x43
,
0x52
,
0xeb
,
0x6b
,
0xc8
,
0x86
,
0xf3
,
0x82
,
0x25
,
0x12
,
0x2b
,
0x9b
,
0xc4
,
0x9c
,
0x69
,
0x14
,
0x0d
,
0x43
,
0xb7
,
0xa8
,
0xb6
,
0xa4
,
0x17
,
0xd7
,
0x96
,
0x25
,
0xe7
,
0x0e
,
0xdb
,
0x60
,
0x8d
,
0xec
,
0xa9
,
0xac
,
0xc3
,
0x1a
,
0x07
,
0xbf
,
0x84
,
0x5a
,
0x6b
,
0x36
,
0xb4
,
0x47
,
0x74
,
0xa4
,
0xac
,
0xcc
,
0x12
,
0x7b
,
0x32
,
0x70
,
0xc7
,
0xb2
,
0x6e
,
0x6b
,
0x1a
,
0xfc
,
0x12
,
0x36
,
0x1b
,
0x93
,
0x19
,
0x50
,
0x87
,
0x1c
,
0x15
,
0x4c
,
0xd5
,
0xfb
,
0x4a
,
0x12
,
0x7d
,
0x02
,
0x39
,
0xd7
,
0x7c
,
0xc3
,
0xbe
,
0x3b
,
0xa0
,
0x03
,
0xcd
,
0x85
,
0x0a
,
0xe4
,
0xa9
,
0x50
,
0x4a
,
0xdb
,
0x95
,
0x88
,
0xee
,
0x40
,
0x84
,
0xa4
,
0x0b
,
0x54
,
0x9b
,
0x1e
,
0xce
,
0x26
,
0x4a
,
0x02
,
0xff
,
0x84
,
0xaf
,
0xed
,
0x2e
,
0x1d
,
0xde
,
0xb7
,
0xdf
,
0x32
,
0x90
,
0x0c
,
0x82
,
0x6a
,
0xf8
,
0xe3
,
0xd1
,
0x44
,
0x21
,
0xf0
,
0x2f
,
0xf8
,
0x5f
,
0x5b
,
0x3b
,
0x6c
,
0xc0
,
0x0d
,
0xbd
,
0x01
,
0xbf
,
0x79
,
0x84
,
0xfd
,
0xd2
,
0x80
,
0x5a
,
0x93
,
0xdc
,
0xfe
,
0x99
,
0x17
,
0x6a
,
0x73
,
0xc7
,
0xad
,
0xbc
,
0xa5
,
0xb7
,
0xf2
,
0xe8
,
0xfb
,
0x50
,
0x14
,
0x5e
,
0x77
,
0xf9
,
0xcf
,
0x61
,
0x2b
,
0x9c
,
0xec
,
0x5a
,
0x61
,
0x0c
,
0xc5
,
0x43
,
0x3e
,
0x2e
,
0xa6
,
0x28
,
0x8d
,
0x8e
,
0xb9
,
0x24
,
0x33
,
0x20
,
0xf8
,
0x57
,
0x16
,
0x6c
,
0xd6
,
0xe9
,
0x65
,
0x17
,
0xa8
,
0xae
,
0x14
,
0xa9
,
0x4d
,
0x57
,
0x0a
,
0xfc
,
0x1b
,
0x03
,
0xb6
,
0x54
,
0x1f
,
0xc2
,
0x2a
,
0x14
,
0x2b
,
0x46
,
0x0b
,
0xc4
,
0x9b
,
0x6d
,
0x3e
,
0xe7
,
0x0d
,
0x8c
,
0xba
,
0x98
,
0xa4
,
0x97
,
0x5d
,
0x4c
,
0xf0
,
0x2c
,
0xac
,
0x89
,
0x17
,
0xde
,
0x6e
,
0x84
,
0x57
,
0x3e
,
0x9d
,
0xc5
,
0x1c
,
0x23
,
0x5c
,
0xdd
,
0x08
,
0xef
,
0x2c
,
0xd8
,
0x50
,
0xbd
,
0x0c
,
0xab
,
0x5a
,
0xac
,
0xd8
,
0xf0
,
0xc0
,
0x8a
,
0x50
,
0xd7
,
0xe2
,
0xa3
,
0x49
,
0xe3
,
0x44
,
0x0e
,
0x05
,
0x2e
,
0x12
,
0x3f
,
0x14
,
0xb8
,
0x54
,
0xd4
,
0xed
,
0x41
,
0x5f
,
0x7b
,
0xa3
,
0xa1
,
0x63
,
0x61
,
0x11
,
0x81
,
0xae
,
0xc5
,
0xd9
,
0xa4
,
0x69
,
0x8c
,
0xa3
,
0x82
,
0x43
,
0x8b
,
0xbf
,
0x36
,
0xa0
,
0x1a
,
0xd5
,
0xc9
,
0x73
,
0x2e
,
0x3d
,
0x52
,
0xbf
,
0x1d
,
0xed
,
0xfb
,
0xd7
,
0x92
,
0x47
,
0x05
,
0x47
,
0x99
,
0x41
,
0x8f
,
0xba
,
0x63
,
0xfc
,
0xa5
,
0x05
,
0x65
,
0xd3
,
0xaa
,
0xc0
,
0xb8
,
0x55
,
0x5e
,
0x4f
,
0x6e
,
0x7a
,
0xf9
,
0xf8
,
0xda
,
0x80
,
0x32
,
0x3f
,
0x0f
,
0x4c
,
0x7f
,
0xcc
,
0x3b
,
0xf7
,
0x00
,
0xfe
,
0xd8
,
0xbc
,
0x3d
,
0x2c
,
0x08
,
0xaa
,
0xbc
,
0xe4
,
0x5c
,
0xf5
,
0x0a
,
0xf3
,
0x55
,
0xb9
,
0xd6
,
0xe1
,
0xb9
,
0xc3
,
0xda
,
0x4a
,
0x31
,
0x49
,
0x9d
,
0x0d
,
0x8a
,
0xd6
,
0xab
,
0x7b
,
0xa5
,
0x05
,
0x25
,
0x7e
,
0x4a
,
0xd8
,
0xe1
,
0x90
,
0x9b
,
0x72
,
0xa9
,
0x23
,
0x75
,
0x9b
,
0x35
,
0xa7
,
0x2a
,
0x52
,
0xdd
,
0xd9
,
0xa9
,
0x70
,
0x61
,
0x4e
,
0xac
,
0x11
,
0x9f
,
0x96
,
0xe6
,
0x63
,
0x21
,
0x03
,
0x62
,
0x90
,
0x3a
,
0x31
,
0x94
,
0xac
,
0xd7
,
0xfc
,
0xb4
,
0x51
,
0xf3
,
0xd9
,
0x59
,
0x71
,
0x6a
,
0x8f
,
0x1f
,
0x40
,
0x35
,
0xe8
,
0xf1
,
0x94
,
0x9f
,
0x2e
,
0x81
,
0x84
,
0xf5
,
0xe5
,
0xb5
,
0xd8
,
0x04
,
0xcf
,
0x9c
,
0x01
,
0x1f
,
0x96
,
0xe1
,
0xdf
,
0x62
,
0x05
,
0xde
,
0x87
,
0x72
,
0xd4
,
0x29
,
0xaa
,
0x48
,
0x9d
,
0x09
,
0x81
,
0x32
,
0xae
,
0x00
,
0xea
,
0x7a
,
0x7d
,
0xa1
,
0x74
,
0x73
,
0xbc
,
0x25
,
0x8c
,
0x32
,
0x23
,
0x43
,
0x09
,
0xfe
,
0x7b
,
0x0a
,
0x36
,
0x13
,
0x03
,
0x02
,
0x0f
,
0x7d
,
0xd7
,
0x48
,
0xae
,
0x85
,
0x4c
,
0x6a
,
0xa6
,
0x63
,
0x9e
,
0xc3
,
0xf2
,
0x0a
,
0x23
,
0x03
,
0x58
,
0xe6
,
0x78
,
0x84
,
0xc7
,
0x80
,
0xe1
,
0xa9
,
0x7c
,
0xfb
,
0xff
,
0xf4
,
0x97
,
0xba
,
0xc9
,
0x99
,
0x44
,
0x14
,
0xb1
,
0xbc
,
0x14
,
0xc9
,
0x5c
,
0xf4
,
0xd1
,
0xc4
,
0x3c
,
0xe3
,
0xdd
,
0x76
,
0x99
,
0x84
,
0x0c
,
0xb6
,
0x3a
,
0xdb
,
0x8e
,
0x0f
,
0xe6
,
0x96
,
0xbb
,
0xdd
,
0xd0
,
0x31
,
0x92
,
0xb8
,
0x7c
,
0x30
,
0xb2
,
0x4f
,
0x78
,
0xff
,
0x5e
,
0x22
,
0xb1
,
0xf8
,
0x60
,
0x40
,
0xb3
,
0xb6
,
0xc9
,
0x17
,
0xa7
,
0xb9
,
0x7d
,
0x5a
,
0xcf
,
0x47
,
0x1c
,
0x1e
,
0xf1
,
0xc2
,
0x48
,
0x3b
,
0x8e
,
0xc8
,
0x73
,
0x84
,
0xa9
,
0x64
,
0x2d
,
0x56
,
0x28
,
0x4e
,
0x7e
,
0xf7
,
0xb8
,
0x2a
,
0x09
,
0xc5
,
0xf0
,
0x11
,
0x94
,
0xf8
,
0xcb
,
0xc8
,
0x35
,
0x40
,
0xe6
,
0x8e
,
0xb6
,
0x09
,
0x0f
,
0xb2
,
0x6a
,
0xa4
,
0x81
,
0x11
,
0x6b
,
0x12
,
0xc3
,
0xf0
,
0x01
,
0x14
,
0xf9
,
0xab
,
0xcb
,
0x25
,
0xa8
,
0x7b
,
0x0e
,
0x50
,
0x99
,
0x04
,
0x34
,
0xfe
,
0x53
,
0x12
,
0xca
,
0xda
,
0x42
,
0x37
,
0x01
,
0xff
,
0x03
,
0xe7
,
0xe1
,
0x77
,
0x09
,
0xdf
,
0x0c
,
0x9c
,
0xb4
,
0x12
,
0x89
,
0x64
,
0xfc
,
0x55
,
0x0a
,
0x4a
,
0xda
,
0x00
,
0x33
,
0x78
,
0x9c
,
0x51
,
0xd9
,
0x15
,
0x72
,
0x58
,
0x7e
,
0x72
,
0x4a
,
0x62
,
0x26
,
0x40
,
0xd7
,
0x44
,
0x81
,
0x17
,
0xe7
,
0xae
,
0x75
,
0x41
,
0xee
,
0xde
,
0x04
,
0xb0
,
0xa3
,
0x87
,
0x1f
,
0xb5
,
0xe7
,
0x59
,
0x0a
,
0x14
,
0x1d
,
0x72
,
0x45
,
0xaf
,
0x3a
,
0x2d
,
0x73
,
0x95
,
0xd3
,
0xb2
,
0x31
,
0xb3
,
0x23
,
0x62
,
0x0d
,
0x3b
,
0x8c
,
0xb9
,
0x24
,
0xd9
,
0x13
,
0x31
,
0xd0
,
0x55
,
0xcc
,
0x30
,
0x26
,
0xea
,
0xe4
,
0x0e
,
0xc9
,
0xc5
,
0x1d
,
0xf2
,
0x36
,
0xa0
,
0xff
,
0xce
,
0x80
,
0xaa
,
0xea
,
0xa6
,
0xaf
,
0x85
,
0xfc
,
0x2b
,
0x79
,
0x49
,
0x20
,
0xb3
,
0x97
,
0x0a
,
0x64
,
0x2e
,
0x41
,
0x80
,
0x11
,
0xa4
,
0x7c
,
0x32
,
0x48
,
0x36
,
0x64
,
0x7d
,
0x5b
,
0x2b
,
0x3e
,
0x92
,
0x62
,
0xd0
,
0xf9
,
0x36
,
0x83
,
0x5d
,
0xab
,
0x3a
,
0x1a
,
0xef
,
0x42
,
0xff
,
0x1f
,
0x2c
,
0x28
,
0xab
,
0xde
,
0xfc
,
0x52
,
0x31
,
0xd8
,
0x82
,
0x5c
,
0xe8
,
0x6a
,
0x27
,
0x56
,
0xb8
,
0xd2
,
0x2b
,
0x85
,
0x2b
,
0x2c
,
0x49
,
0x99
,
0x48
,
0x49
,
0xfa
,
0x18
,
0x8a
,
0x43
,
0xc5
,
0x49
,
0x4a
,
0x8c
,
0xc4
,
0xd0
,
0x65
,
0x01
,
0xd0
,
0xaa
,
0x92
,
0xa6
,
0x49
,
0x14
,
0xb6
,
0xcc
,
0xde
,
0x1d
,
0x8a
,
0x86
,
0xf4
,
0xb2
,
0x66
,
0xe6
,
0xd7
,
0x29
,
0x40
,
0xd1
,
0x4b
,
0x0e
,
0x77
,
0xea
,
0x5c
,
0x61
,
0x8b
,
0x4b
,
0x56
,
0xd6
,
0x28
,
0x59
,
0x7b
,
0x50
,
0xec
,
0x6a
,
0x7d
,
0xfc
,
0xb9
,
0xdd
,
0xff
,
0x53
,
0xef
,
0xaa
,
0x28
,
0x40
,
0xf7
,
0x23
,
0x20
,
0xd7
,
0x0b
,
0x91
,
0xd7
,
0x12
,
0x6d
,
0x84
,
0xce
,
0x9f
,
0xd3
,
0x80
,
0xcc
,
0xbb
,
0x14
,
0x8f
,
0xef
,
0xa5
,
0x13
,
0xe1
,
0x9b
,
0x9d
,
0xa9
,
0xa5
,
0x44
,
0x7c
,
0xb1
,
0x0b
,
0x45
,
0xae
,
0x92
,
0xec
,
0x12
,
0x40
,
0x64
,
0x83
,
0xc6
,
0xc2
,
0xff
,
0x32
,
0x06
,
0xfa
,
0x21
,
0x14
,
0xf5
,
0x1b
,
0x54
,
0xa5
,
0xc0
,
0x87
,
0x5d
,
0x8b
,
0x9a
,
0xab
,
0xf8
,
0x13
,
0xe0
,
0x56
,
0xec
,
0xae
,
0x76
,
0x33
,
0x97
,
0xe8
,
0x30
,
0x26
,
0x63
,
0x30
,
0xde
,
0xf0
,
0x48
,
0x89
,
0x31
,
0x80
,
0xcc
,
0x29
,
0x11
,
0x3c
,
0xd9
,
0x5c
,
0x80
,
0x70
,
0x4a
,
0xd7
,
0xe1
,
0x7f
,
0x5b
,
0x70
,
0x1b
,
0x99
,
0x7e
,
0x2b
,
0x23
,
0x33
,
0xab
,
0x46
,
0xfe
,
0xc3
,
0x80
,
0x5a
,
0x2c
,
0x85
,
0x3c
,
0x07
,
0x2d
,
0x71
,
0x27
,
0xbc
,
0x5a
,
0xac
,
0x74
,
0x56
,
0x53
,
0x09
,
0x56
,
0xaf
,
0x78
,
0x18
,
0xcd
,
0x79
,
0x7d
,
0x09
,
0x65
,
0x5f
,
0x8f
,
0x45
,
0x69
,
0xea
,
0x7b
,
0x81
,
0x2b
,
0xe2
,
0x71
,
0x4a
,
0xa2
,
0xf2
,
0x9a
,
0x79
,
0x57
,
0x4f
,
0xb3
,
0x0b
,
0x3c
,
0xfd
,
0x87
,
0x05
,
0x9b
,
0x89
,
0x1d
,
0x16
,
0x78
,
0xe8
,
0xe8
,
0x0b
,
0x28
,
0xf9
,
0xa6
,
0x7b
,
0x46
,
0xfd
,
0x13
,
0xfd
,
0xb9
,
0x6b
,
0x27
,
0x36
,
0x5f
,
0x43
,
0x73
,
0x28
,
0x85
,
0x7a
,
0xa6
,
0x4a
,
0x7f
,
0x6f
,
0x44
,
0x41
,
0x49
,
0x66
,
0x31
,
0x31
,
0xf1
,
0xe8
,
0x95
,
0x44
,
0xe4
,
0xd9
,
0x7c
,
0xf1
,
0xb4
,
0x25
,
0xe7
,
0xa7
,
0xae
,
0x9e
,
0xaf
,
0xcb
,
0xe3
,
0x9f
,
0x33
,
0x28
,
0x86
,
0xb6
,
0x7f
,
0x42
,
0xc3
,
0x23
,
0xfd
,
0xcd
,
0x6d
,
0x3b
,
0x31
,
0x5e
,
0xa3
,
0x96
,
0x27
,
0xa1
,
0xf2
,
0x40
,
0x43
,
0xc5
,
0x8b
,
0x77
,
0x85
,
0x46
,
0xbc
,
0x2b
,
0x44
,
0x77
,
0xa1
,
0xa2
,
0x18
,
0x78
,
0x36
,
0x5e
,
0xbc
,
0xaf
,
0xc9
,
0xf1
,
0xe9
,
0x8b
,
0xc7
,
0xeb
,
0x78
,
0xfc
,
0xeb
,
0x14
,
0x6c
,
0x90
,
0x32
,
0xc2
,
0x67
,
0x31
,
0x2e
,
0x4b
,
0x00
,
0xb1
,
0x95
,
0x94
,
0x12
,
0x19
,
0x14
,
0xe1
,
0x6c
,
0x18
,
0xcc
,
0x04
,
0xc9
,
0x9e
,
0xd2
,
0x4a
,
0xf6
,
0x94
,
0xac
,
0x03
,
0x56
,
0x4e
,
0x48
,
0x8c
,
0xa1
,
0xbb
,
0x90
,
0x66
,
0x2b
,
0x5f
,
0xe2
,
0x26
,
0x3e
,
0x8e
,
0x0e
,
0x56
,
0x5e
,
0x92
,
0xd6
,
0xc9
,
0x88
,
0x5c
,
0x42
,
0xcb
,
0x68
,
0x15
,
0x6b
,
0x49
,
0x94
,
0xd8
,
0x5b
,
0x86
,
0x0e
,
0x7d
,
0x0c
,
0x19
,
0x86
,
0x2f
,
0x48
,
0xe1
,
0x9b
,
0x60
,
0x76
,
0xa3
,
0xb4
,
0x7a
,
0x13
,
0xfc
,
0x45
,
0x12
,
0xb6
,
0x44
,
0x36
,
0xf3
,
0x79
,
0xb1
,
0xe2
,
0x00
,
0xf4
,
0xc9
,
0xdc
,
0x83
,
0xd6
,
0x42
,
0x70
,
0xfc
,
0x92
,
0x75
,
0xfb
,
0xcf
,
0xaf
,
0x8f
,
0xfc
,
0xf5
,
0xf5
,
0xb2
,
0xda
,
0xc8
,
0xaf
,
0x97
,
0xb2
,
0x56
,
0xa8
,
0x67
,
0x27
,
0x7a
,
0x9b
,
0xcc
,
0x2d
,
0x87
,
0xab
,
0xc7
,
0xc9
,
0xdf
,
0xa4
,
0x60
,
0x43
,
0xdc
,
0x20
,
0xf8
,
0xf9
,
0x80
,
0x71
,
0xcd
,
0xc2
,
0xf1
,
0x01
,
0x80
,
0xe5
,
0x11
,
0xf5
,
0x50
,
0x9c
,
0xe6
,
0xf7
,
0x6e
,
0xbd
,
0x94
,
0x3f
,
0x03
,
0x9f
,
0x57
,
0x3e
,
0xf9
,
0xbd
,
0x55
,
0x56
,
0x13
,
0xe9
,
0x7d
,
0xac
,
0xb8
,
0x8d
,
0xc3
,
0x9f
,
0x2a
,
0xc4
,
0x35
,
0x43
,
0xc6
,
0xa2
,
0x22
,
0xd1
,
0xc7
,
0x90
,
0xf5
,
0x7c
,
0xd3
,
0x72
,
0x69
,
0xb9
,
0x09
,
0xe0
,
0x04
,
0x44
,
0xbd
,
0x5d
,
0x67
,
0xf8
,
0xd5
,
0x5e
,
0xd3
,
0xb0
,
0x9e
,
0x9f
,
0x7b
,
0xdc
,
0xb2
,
0xf0
,
0x87
,
0x46
,
0xd7
,
0xf6
,
0x69
,
0x9f
,
0x0f
,
0x10
,
0x29
,
0xc0
,
0x45
,
0xc8
,
0x16
,
0x77
,
0x16
,
0x99
,
0x9a
,
0x4a
,
0xe4
,
0xfd
,
0x4a
,
0x68
,
0x87
,
0xd3
,
0x80
,
0x3b
,
0x19
,
0x45
,
0xbb
,
0x9b
,
0xdb
,
0x94
,
0x80
,
0xea
,
0x85
,
0xfb
,
0x99
,
0x82
,
0xa0
,
0xf9
,
0xea
,
0xd8
,
0x12
,
0xff
,
0xc7
,
0xd2
,
0x76
,
0x43
,
0xda
,
0xe5
,
0x1f
,
0x88
,
0x04
,
0x68
,
0xad
,
0x4d
,
0xfe
,
0x82
,
0xd6
,
0x10
,
0xec
,
0x43
,
0xda
,
0x9a
,
0x9d
,
0xda
,
0x32
,
0xa2
,
0xd5
,
0xcb
,
0x62
,
0x0c
,
0x28
,
0xc2
,
0x65
,
0x06
,
0x3f
,
0x53
,
0x64
,
0xd4
,
0x5f
,
0x1d
,
0x3a
,
0x82
,
0x8c
,
0x3d
,
0xc8
,
0x38
,
0x93
,
0x63
,
0x57
,
0x98
,
0xba
,
0xfe
,
0x42
,
0x5c
,
0xc7
,
0xe5
,
0x9b
,
0x8b
,
0x24
,
0xf1
,
0x3f
,
0x0d
,
0x75
,
0xb7
,
0xe2
,
0xe6
,
0xb7
,
0x7a
,
0xec
,
0x4c
,
0x50
,
0x46
,
0x38
,
0x86
,
0x99
,
0x1b
,
0xce
,
0xc4
,
0x8d
,
0x5f
,
0x50
,
0xeb
,
0x8e
,
0xe8
,
0xe2
,
0xaa
,
0xa3
,
0xe7
,
0x7f
,
0x01
,
0xef
,
0x66
,
0xf8
,
0xb6
,
0x23
,
0xf0
,
0x65
,
0xa3
,
0x44
,
0xfc
,
0x2f
,
0x4b
,
0x5d
,
0xd4
,
0xf8
,
0xbc
,
0x03
,
0x3a
,
0xbb
,
0xe8
,
0x9c
,
0xfa
,
0x7a
,
0x02
,
0xac
,
0x6e
,
0x43
,
0x46
,
0xc8
,
0xe7
,
0x38
,
0x5b
,
0x10
,
0x4c
,
0x97
,
0x91
,
0xe5
,
0x52
,
0xf1
,
0x89
,
0x5e
,
0x4e
,
0xe4
,
0x96
,
0x41
,
0x64
,
0x36
,
0x62
,
0xed
,
0x3a
,
0x64
,
0x05
,
0x3e
,
0xcf
,
0xd5
,
0xe7
,
0x23
,
0xcf
,
0x47
,
0x42
,
0x06
,
0xfe
,
0x32
,
0x12
,
0x37
,
0xbc
,
0x1e
,
0x7c
,
0x07
,
0x32
,
0xcc
,
0x42
,
0x60
,
0x56
,
0x0d
,
0x1c
,
0x9f
,
0x8a
,
0x3f
,
0x66
,
0x56
,
0xf9
,
0x97
,
0x58
,
0x81
,
0x3f
,
0x37
,
0x10
,
0xf5
,
0xbc
,
0xbb
,
0x09
,
0x35
,
0x21
,
0x84
,
0xef
,
0x42
,
0x45
,
0x8c
,
0x10
,
0x7a
,
0xce
,
0x8e
,
0x72
,
0x89
,
0xd7
,
0x89
,
0xef
,
0x41
,
0x96
,
0xb9
,
0xa4
,
0xde
,
0x9e
,
0x97
,
0xf1
,
0x27
,
0x40
,
0xf8
,
0x47
,
0xae
,
0x06
,
0xbb
,
0x34
,
0x06
,
0x6f
,
0x05
,
0x9c
,
0xc0
,
0x04
,
0xb6
,
0x85
,
0x5c
,
0x6b
,
0x66
,
0x36
,
0xac
,
0x8b
,
0x2f
,
0x84
,
0xbe
,
0x61
,
0xa7
,
0x2a
,
0x37
,
0x83
,
0xdd
,
0x45
,
0xa3
,
0x87
,
0x09
,
0xbe
,
0x9a
,
0x50
,
0x79
,
0xf3
,
0x64
,
0xb9
,
0xba
,
0xee
,
0xb7
,
0x11
,
0x82
,
0xb4
,
0xe5
,
0x9d
,
0x3c
,
0x2e
,
0x60
,
0x02
,
0x5b
,
0x02
,
0xd7
,
0x98
,
0xd8
,
0xaf
,
0x46
,
0x54
,
0x5e
,
0x68
,
0xd9
,
0x16
,
0x5e
,
0xe2
,
0xd8
,
0xe5
,
0x09
,
0xff
,
0x46
,
0x55
,
0x48
,
0x4d
,
0xbd
,
0x33
,
0x09
,
0x16
,
0xfb
,
0xc4
,
0x5d
,
0xf4
,
0x9f
,
0x16
,
0x82
,
0x8c
,
0x13
,
0x1c
,
0x3d
,
0xe2
,
0x2c
,
0xae
,
0x12
,
0xfe
,
0x1b
,
0x95
,
0x21
,
0x78
,
0x77
,
0xdd
,
0x9a
,
0xcc
,
0x88
,
0x7b
,
0x90
,
0x71
,
0xa9
,
0xe7
,
0x28
,
0x23
,
0xde
,
0x8f
,
0x18
,
0x3d
,
0x0e
,
0x4e
,
0x24
,
0x63
,
0xec
,
0x27
,
0x6e
,
0xc3
,
0xfb
,
0x8b
,
0xe6
,
0x64
,
0x4e
,
0xdc
,
0x85
,
0x11
,
0x57
,
0x81
,
0x08
,
0x59
,
0xdc
,
0x05
,
0x78
,
0x6c
,
0x0f
,
0xcd
,
0xc9
,
0xb1
,
0xb5
,
0x18
,
0x2c
,
0xac
,
0x4f
,
0x03
,
0x4f
,
0x39
,
0xf1
,
0x81
,
0xe1
,
0x44
,
0xd2
,
0x04
,
0x22
,
0xb0
,
0xb8
,
0x0d
,
0xf0
,
0x98
,
0x0e
,
0xe3
,
0xd0
,
0xb9
,
0xfc
,
0x9b
,
0x41
,
0x3f
,
0xa6
,
0xd6
,
0xd9
,
0x58
,
0x14
,
0xb9
,
0x14
,
0xd8
,
0xed
,
0xdb
,
0xa3
,
0x43
,
0x67
,
0xd6
,
0x9b
,
0x31
,
0x1b
,
0x86
,
0x71
,
0x98
,
0xf9
,
0x6f
,
0x46
,
0x91
,
0x14
,
0xb3
,
0xd9
,
0x0a
,
0x5e
,
0x72
,
0x52
,
0x44
,
0x10
,
0xac
,
0x65
,
0x29
,
0xf1
,
0xb5
,
0xc4
,
0xfd
,
0x90
,
0x3a
,
0x27
,
0x43
,
0x51
,
0xfc
,
0xd2
,
0x44
,
0x4a
,
0xcc
,
0x67
,
0x27
,
0x7a
,
0x36
,
0x4a
,
0x3b
,
0xca
,
0xb9
,
0x1e
,
0x63
,
0x46
,
0x24
,
0xc6
,
0x82
,
0xcd
,
0x92
,
0x6b
,
0x37
,
0x4b
,
0xad
,
0xdf
,
0x13
,
0x21
,
0xb0
,
0x4e
,
0xa7
,
0xc8
,
0xe7
,
0x12
,
0x8f
,
0x36
,
0x6f
,
0xf4
,
0x6c
,
0xb3
,
0x8c
,
0x6c
,
0x2c
,
0xad
,
0x6d
,
0x16
,
0x7a
,
0x3f
,
0xb3
,
0xd1
,
0xfb
,
0xd9
,
0xb8
,
0xf7
,
0xef
,
0x43
,
0x59
,
0xd3
,
0x8b
,
0x16
,
0x4b
,
0x2d
,
0x5c
,
0x2c
,
0xbd
,
0x78
,
0xb1
,
0x8c
,
0xb6
,
0x58
,
0x1c
,
0xfd
,
0xec
,
0xd2
,
0xcf
,
0x73
,
0xd0
,
0x87
,
0x90
,
0xf2
,
0x17
,
0x0a
,
0x34
,
0x95
,
0x6b
,
0x21
,
0x26
,
0x84
,
0x8d
,
0xe2
,
0xe8
,
0xe7
,
0x92
,
0xd1
,
0xbf
,
0x07
,
0x25
,
0xcd
,
0xbe
,
0xc0
,
0x43
,
0x1f
,
0x42
,
0x3a
,
0x9c
,
0x29
,
0x63
,
0xa8
,
0x49
,
0xec
,
0x98
,
0xc3
,
0x09
,
0xf5
,
0xe6
,
0x93
,
0xff
,
0xc6
,
0x8b
,
0x1d
,
0xb8
,
0x45
,
0xd2
,
0xd4
,
0xae
,
0x8b
,
0x39
,
0x21
,
0xec
,
0x2b
,
0x3e
,
0x84
,
0x4d
,
0xc9
,
0x1d
,
0x0b
,
0x38
,
0xa1
,
0xe8
,
0xf9
,
0x4a
,
0x58
,
0x1c
,
0x42
,
0xce
,
0xe5
,
0x4b
,
0x2b
,
0x75
,
0xea
,
0xda
,
0x45
,
0x36
,
0xb2
,
0xc1
,
0x74
,
0xf4
,
0xbf
,
0x44
,
0xb1
,
0x05
,
0xd7
,
0x08
,
0x7d
,
0x33
,
0x97
,
0x16
,
0x55
,
0xc8
,
0xfb
,
0x37
,
0x51
,
0x82
,
0xfb
,
0x3f
,
0x05
,
0x08
,
0x7f
,
0x8a
,
0xa2
,
0x22
,
0xe4
,
0x9a
,
0xad
,
0xde
,
0x49
,
0x7c
,
0x6a
,
0x65
,
0x4e
,
0x45
,
0xbb
,
0x1e
,
0x1b
,
0x6b
,
0x13
,
0x05
,
0xdc
,
0xfb
,
0x39
,
0x40
,
0xfc
,
0xbf
,
0x33
,
0xa8
,
0x26
,
0x50
,
0x09
,
0xf2
,
0xcf
,
0x3a
,
0x83
,
0x76
,
0x93
,
0x34
,
0x9e
,
0x55
,
0x0d
,
0x8f
,
0x2d
,
0x5a
,
0x83
,
0x7c
,
0xbd
,
0xd1
,
0x39
,
0xea
,
0xb6
,
0x7a
,
0xe5
,
0x15
,
0x54
,
0x84
,
0xd5
,
0x54
,
0x83
,
0xf2
,
0x80
,
0x34
,
0xba
,
0xfd
,
0xa3
,
0x16
,
0xe9
,
0x74
,
0x7b
,
0x4f
,
0x06
,
0xd5
,
0x24
,
0x67
,
0xad
,
0x5e
,
0xb3
,
0x4e
,
0x6a
,
0xcf
,
0xca
,
0x16
,
0xda
,
0x84
,
0x52
,
0x8f
,
0xd4
,
0xda
,
0xdd
,
0x42
,
0x50
,
0x51
,
0xac
,
0x93
,
0x27
,
0x03
,
0xc6
,
0x4b
,
0xa1
,
0x32
,
0x14
,
0x1a
,
0x4f
,
0x06
,
0xed
,
0x83
,
0x06
,
0x69
,
0xb5
,
0x3b
,
0x4f
,
0x7a
,
0xe5
,
0x14
,
0x42
,
0xb0
,
0xae
,
0x54
,
0x47
,
0x4f
,
0x7a
,
0x13
,
0xd2
,
0x79
,
0xd9
,
0xaa
,
0xa6
,
0xf7
,
0x1b
,
0x1c
,
0xae
,
0xf0
,
0xb7
,
0x22
,
0x1b
,
0x0f
,
0xfe
,
0x4c
,
0x97
,
0x46
,
0x25
,
0x28
,
0xd4
,
0x9e
,
0xf4
,
0x9a
,
0x47
,
0xa4
,
0xf5
,
0xb2
,
0x51
,
0xce
,
0xec
,
0x05
,
0x56
,
0x13
,
0xa8
,
0x02
,
0x10
,
0xfe
,
0x31
,
0x15
,
0xbb
,
0xf4
,
0xf4
,
0x27
,
0x91
,
0x6a
,
0x72
,
0xd5
,
0x38
,
0x5d
,
0xf1
,
0xbf
,
0x9e
,
0xec
,
0x7b
,
0xf4
,
0x57
,
0x65
,
0x79
,
0x05
,
0xad
,
0x03
,
0xc4
,
0xff
,
0x43
,
0x1e
,
0x11
,
0xc1
,
0x8f
,
0x0d
,
0x94
,
0x83
,
0x54
,
0x63
,
0x34
,
0xaa
,
0x26
,
0x10
,
0x40
,
0x7f
,
0xe7
,
0x8a
,
0x55
,
0xe4
,
0x5b
,
0x92
,
0x54
,
0xa5
,
0xf6
,
0x3e
,
0xe4
,
0x19
,
0x11
,
0xfd
,
0xeb
,
0xb6
,
0x49
,
0x27
,
0xd4
,
0xa7
,
0x55
,
0x63
,
0xff
,
0x73
,
0x80
,
0xb0
,
0x14
,
0xa2
,
0x02
,
0x64
,
0x9e
,
0x82
,
0xf2
,
0x90
,
0xae
,
0x0d
,
0x06
,
0xe5
,
0x15
,
0x04
,
0x90
,
0xab
,
0xd3
,
0x11
,
0x0d
,
0x69
,
0xd9
,
0x74
,
0x9b
,
0xad
,
0xa3
,
0x6a
,
0x82
,
0x7d
,
0x3e
,
0x6d
,
0x3c
,
0xee
,
0x34
,
0xab
,
0x06
,
0x93
,
0x3f
,
0xda
,
0xfb
,
0x11
,
0x40
,
0x5c
,
0x14
,
0x51
,
0x01
,
0xb2
,
0x4f
,
0xda
,
0xf5
,
0xc6
,
0x41
,
0x79
,
0x85
,
0x22
,
0x27
,
0x2f
,
0x5b
,
0xdd
,
0x6a
,
0x12
,
0xe5
,
0x21
,
0xfd
,
0xa4
,
0xdf
,
0x6a
,
0x56
,
0x53
,
0xfb
,
0xfd
,
0x7c
,
0x5a
,
0x7b
,
0xdc
,
0xaa
,
0x97
,
0x2d
,
0x86
,
0x3f
,
0x20
,
0x47
,
0x2f
,
0x1b
,
0xed
,
0x72
,
0x3f
,
0x84
,
0x77
,
0x8e
,
0xad
,
0x85
,
0x4a
,
0x48
,
0x6f
,
0x68
,
0xce
,
0xe4
,
0x22
,
0x79
,
0x48
,
0x77
,
0x0a
,
0xad
,
0x42
,
0xe6
,
0x49
,
0xb7
,
0x51
,
0x2f
,
0xa7
,
0xf7
,
0x7e
,
0x02
,
0xef
,
0x1d
,
0x3a
,
0x33
,
0x9a
,
0x8f
,
0x5b
,
0x02
,
0x88
,
0xfe
,
0x83
,
0x46
,
0xb7
,
0xdb
,
0xe9
,
0x3e
,
0xac
,
0x1a
,
0x8c
,
0x3a
,
0xb5
,
0x21
,
0x83
,
0xbe
,
0x3d
,
0x91
,
0x93
,
0xac
,
0x42
,
0xa6
,
0x55
,
0x7f
,
0xdc
,
0x10
,
0x44
,
0x74
,
0xea
,
0x74
,
0x3b
,
0xfd
,
0x76
,
0xab
,
0x59
,
0x4d
,
0x1e
,
0xfe
,
0xd9
,
0x00
,
0x98
,
0x5a
,
0x0b
,
0xf5
,
0x1f
,
0xd4
,
0xda
,
0xed
,
0x56
,
0xfb
,
0x61
,
0xd9
,
0x62
,
0xd2
,
0x41
,
0xab
,
0xdd
,
0xea
,
0x36
,
0x1b
,
0x7c
,
0x74
,
0x1f
,
0xb6
,
0x1e
,
0xc6
,
0xd6
,
0x51
,
0xef
,
0x03
,
0x84
,
0x9e
,
0x77
,
0xad
,
0xc9
,
0x4e
,
0xf5
,
0x72
,
0xaa
,
0xfa
,
0x95
,
0x05
,
0x30
,
0x76
,
0x66
,
0xea
,
0x55
,
0xea
,
0x1e
,
0x6c
,
0x3c
,
0x4c
,
0x35
,
0x24
,
0xfb
,
0xbe
,
0x6b
,
0xcd
,
0xce
,
0x70
,
0x02
,
0x7d
,
0x0a
,
0x45
,
0x31
,
0x85
,
0xd9
,
0x70
,
0xcc
,
0xa3
,
0x1e
,
0x1e
,
0x08
,
0x7d
,
0xd3
,
0x76
,
0x46
,
0xdb
,
0xe5
,
0x58
,
0xec
,
0x86
,
0xbe
,
0x33
,
0xad
,
0x19
,
0x5f
,
0x40
,
0x39
,
0xe2
,
0x7e
,
0xb4
,
0x15
,
0x0a
,
0xf1
,
0x9a
,
0xb2
,
0xb3
,
0x13
,
0x32
,
0x39
,
0xc1
,
0x2b
,
0xe8
,
0x53
,
0x58
,
0x13
,
0x43
,
0x98
,
0x0f
,
0x97
,
0x1a
,
0xf1
,
0x19
,
0x94
,
0x8c
,
0xe2
,
0x81
,
0x82
,
0x13
,
0xaf
,
0xb2
,
0xfc
,
0xa7
,
0xf9
,
0xbd
,
0xff
,
0x04
,
0x00
,
0x00
,
0xff
,
0xff
,
0xf0
,
0xa3
,
0x8d
,
0x18
,
0xc4
,
0x6b
,
0xca
,
0xf6
,
0x76
,
0xac
,
0x48
,
0x26
,
0x0a
,
0x5e
,
0x79
,
0x95
,
0xa5
,
0x75
,
0x24
,
0x52
,
0x69
,
0x1f
,
0x00
,
0x00
,
0xe3
,
0xff
,
0xe8
,
0xdf
,
0xfd
,
0x6f
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x55
,
0xb5
,
0x08
,
0xed
,
0x06
,
0x20
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
plugin/dapp/mix/wallet/mix.go
View file @
d5900775
...
@@ -6,7 +6,7 @@ package wallet
...
@@ -6,7 +6,7 @@ package wallet
import
(
import
(
"bytes"
"bytes"
"fmt"
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/system/dapp"
"github.com/pkg/errors"
"github.com/pkg/errors"
...
@@ -20,14 +20,16 @@ import (
...
@@ -20,14 +20,16 @@ import (
fr_bn256
"github.com/consensys/gurvy/bn256/fr"
fr_bn256
"github.com/consensys/gurvy/bn256/fr"
)
)
const
CECBLOCKSIZE
=
32
// newPrivacyWithPrivKey create privacy from private key
// newPrivacyWithPrivKey create privacy from private key
//payment, payPrivKey=hash(privkey), payPubkey=hash(payPrivKey)
//payment, payPrivKey=hash(privkey), payPubkey=hash(payPrivKey)
//DH crypt key, prikey=payPrikey, pubKey=payPrikey*G
//DH crypt key, prikey=payPrikey, pubKey=payPrikey*G
func
newPrivacyWithPrivKey
(
privKey
[]
byte
)
(
*
mixTy
.
AccountPrivacyKey
,
error
)
{
func
newPrivacyWithPrivKey
(
privKey
[]
byte
)
(
*
mixTy
.
AccountPrivacyKey
,
error
)
{
payPrivacyKey
:=
mimcHashByte
([][]
byte
{
privKey
})
payPrivacyKey
:=
mimcHashByte
([][]
byte
{
privKey
})
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
.
SpendKey
=
getFrString
(
payPrivacyKey
)
paymentKey
.
Spend
Pri
Key
=
getFrString
(
payPrivacyKey
)
paymentKey
.
Pay
Key
=
getFrString
(
mimcHashByte
([][]
byte
{
payPrivacyKey
}))
paymentKey
.
ReceiverPub
Key
=
getFrString
(
mimcHashByte
([][]
byte
{
payPrivacyKey
}))
shareSecretKey
:=
&
mixTy
.
ShareSecretKeyPair
{}
shareSecretKey
:=
&
mixTy
.
ShareSecretKeyPair
{}
ecdh
:=
NewCurveBn256ECDH
()
ecdh
:=
NewCurveBn256ECDH
()
...
@@ -44,13 +46,13 @@ func newPrivacyWithPrivKey(privKey []byte) (*mixTy.AccountPrivacyKey, error) {
...
@@ -44,13 +46,13 @@ func newPrivacyWithPrivKey(privKey []byte) (*mixTy.AccountPrivacyKey, error) {
//填充算法有pkcs5,pkcs7, 比如Pkcs5的思想填充的值为填充的长度,比如加密he,不足8
//填充算法有pkcs5,pkcs7, 比如Pkcs5的思想填充的值为填充的长度,比如加密he,不足8
//则填充为he666666, 解密后直接算最后一个值为6,把解密值的后6个Byte去掉即可
//则填充为he666666, 解密后直接算最后一个值为6,把解密值的后6个Byte去掉即可
func
pKCS5Padding
(
plainText
[]
byte
,
blockSize
int
)
[]
byte
{
func
pKCS5Padding
(
plainText
[]
byte
,
blockSize
int
)
[]
byte
{
if
blockSize
<
32
{
if
blockSize
<
CECBLOCKSIZE
{
blockSize
=
32
blockSize
=
CECBLOCKSIZE
}
}
padding
:=
blockSize
-
(
len
(
plainText
)
%
blockSize
)
padding
:=
blockSize
-
(
len
(
plainText
)
%
blockSize
)
fmt
.
Println
(
"pading"
,
"passsize"
,
blockSize
,
"plaintext"
,
len
(
plainText
),
"pad"
,
padding
)
//
fmt.Println("pading", "passsize", blockSize, "plaintext", len(plainText), "pad", padding)
padText
:=
bytes
.
Repeat
([]
byte
{
byte
(
padding
)},
padding
)
padText
:=
bytes
.
Repeat
([]
byte
{
byte
(
padding
)},
padding
)
fmt
.
Println
(
"padding"
,
padding
,
"text"
,
common
.
ToHex
(
padText
[
:
]))
//
fmt.Println("padding", padding, "text", common.ToHex(padText[:]))
newText
:=
append
(
plainText
,
padText
...
)
newText
:=
append
(
plainText
,
padText
...
)
return
newText
return
newText
}
}
...
@@ -196,9 +198,7 @@ func (policy *mixPolicy) savePrivacyPair(addr string) (*mixTy.WalletAddrPrivacy,
...
@@ -196,9 +198,7 @@ func (policy *mixPolicy) savePrivacyPair(addr string) (*mixTy.WalletAddrPrivacy,
}
}
password
:=
[]
byte
(
policy
.
getWalletOperate
()
.
GetPassword
())
password
:=
[]
byte
(
policy
.
getWalletOperate
()
.
GetPassword
())
bizlog
.
Info
(
"savePrivacyPair"
,
"newprivacy"
,
newPrivacy
.
PaymentKey
.
PayKey
,
"password"
,
common
.
ToHex
(
password
))
encryptered
:=
encryptDataWithPadding
(
password
,
types
.
Encode
(
newPrivacy
))
encryptered
:=
encryptDataWithPadding
(
password
,
types
.
Encode
(
newPrivacy
))
bizlog
.
Info
(
"savePrivacyPair--2"
)
//save the privacy created to wallet db
//save the privacy created to wallet db
policy
.
store
.
setAccountPrivacy
(
addr
,
encryptered
)
policy
.
store
.
setAccountPrivacy
(
addr
,
encryptered
)
return
&
mixTy
.
WalletAddrPrivacy
{
Privacy
:
newPrivacy
,
Addr
:
addr
},
nil
return
&
mixTy
.
WalletAddrPrivacy
{
Privacy
:
newPrivacy
,
Addr
:
addr
},
nil
...
@@ -312,7 +312,7 @@ func (policy *mixPolicy) rescanNotes() {
...
@@ -312,7 +312,7 @@ func (policy *mixPolicy) rescanNotes() {
txInfo
.
Index
=
mixTxInfos
.
Txs
[
txcount
-
1
]
.
GetIndex
()
txInfo
.
Index
=
mixTxInfos
.
Txs
[
txcount
-
1
]
.
GetIndex
()
}
}
policy
.
getPrivacyTxDetailByHash
s
(
&
ReqHashes
)
policy
.
processPrivcyTx
s
(
&
ReqHashes
)
if
txcount
<
int
(
MaxTxHashsPerTime
)
{
if
txcount
<
int
(
MaxTxHashsPerTime
)
{
break
break
}
}
...
@@ -322,16 +322,25 @@ func (policy *mixPolicy) rescanNotes() {
...
@@ -322,16 +322,25 @@ func (policy *mixPolicy) rescanNotes() {
return
return
}
}
func
(
policy
*
mixPolicy
)
getPrivacyTxDetailByHash
s
(
ReqHashes
*
types
.
ReqHashes
)
{
func
(
policy
*
mixPolicy
)
processPrivcyTx
s
(
ReqHashes
*
types
.
ReqHashes
)
{
//通过txhashs获取对应的txdetail
//通过txhashs获取对应的txdetail
txDetails
,
err
:=
policy
.
getWalletOperate
()
.
GetAPI
()
.
GetTransactionByHash
(
ReqHashes
)
txDetails
,
err
:=
policy
.
getWalletOperate
()
.
GetAPI
()
.
GetTransactionByHash
(
ReqHashes
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Error
(
"
getPrivacyTxDetailByHashs
"
,
"GetTransactionByHash error"
,
err
)
bizlog
.
Error
(
"
processPrivcyTx
"
,
"GetTransactionByHash error"
,
err
)
return
return
}
}
for
_
,
tx
:=
range
txDetails
.
Txs
{
for
_
,
tx
:=
range
txDetails
.
Txs
{
policy
.
processMixTx
(
tx
.
Tx
,
tx
.
Height
,
tx
.
Index
)
if
tx
.
Receipt
.
Ty
!=
types
.
ExecOk
{
bizlog
.
Error
(
"processPrivcyTx wrong tx"
,
"receipt ty"
,
tx
.
Receipt
.
Ty
,
"hash"
,
common
.
ToHex
(
tx
.
Tx
.
Hash
()))
continue
}
set
,
err
:=
policy
.
processMixTx
(
tx
.
Tx
,
tx
.
Height
,
tx
.
Index
)
if
err
!=
nil
{
bizlog
.
Error
(
"processPrivcyTx"
,
"processMixTx error"
,
err
)
continue
}
policy
.
store
.
setKvs
(
set
)
}
}
}
}
...
@@ -382,7 +391,7 @@ func (policy *mixPolicy) showAccountNoteInfo(addrs []string) (*mixTy.WalletIndex
...
@@ -382,7 +391,7 @@ func (policy *mixPolicy) showAccountNoteInfo(addrs []string) (*mixTy.WalletIndex
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
resps
.
Datas
=
append
(
resps
.
Datas
,
resp
.
(
*
mixTy
.
WalletIndexResp
)
.
Data
s
...
)
resps
.
Notes
=
append
(
resps
.
Notes
,
resp
.
(
*
mixTy
.
WalletIndexResp
)
.
Note
s
...
)
}
}
return
&
resps
,
nil
return
&
resps
,
nil
}
}
plugin/dapp/mix/wallet/mixbizdb.go
View file @
d5900775
...
@@ -199,7 +199,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
...
@@ -199,7 +199,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
indexName
=
"noteHash"
indexName
=
"noteHash"
}
else
if
len
(
req
.
Nullifier
)
>
0
{
}
else
if
len
(
req
.
Nullifier
)
>
0
{
indexName
=
"nullifier"
indexName
=
"nullifier"
}
else
if
len
(
req
.
AuthSpendHash
)
>
0
{
}
else
if
len
(
req
.
Auth
orize
SpendHash
)
>
0
{
indexName
=
"authSpendHash"
indexName
=
"authSpendHash"
}
else
if
len
(
req
.
Account
)
>
0
{
}
else
if
len
(
req
.
Account
)
>
0
{
indexName
=
"account"
indexName
=
"account"
...
@@ -211,7 +211,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
...
@@ -211,7 +211,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
WalletDbMixInfo
:
&
mixTy
.
WalletDbMixInfo
{
Info
:
&
mixTy
.
WalletIndexInfo
{
WalletDbMixInfo
:
&
mixTy
.
WalletDbMixInfo
{
Info
:
&
mixTy
.
WalletIndexInfo
{
NoteHash
:
req
.
NoteHash
,
NoteHash
:
req
.
NoteHash
,
Nullifier
:
req
.
Nullifier
,
Nullifier
:
req
.
Nullifier
,
Auth
SpendHash
:
req
.
Auth
SpendHash
,
Auth
orizeSpendHash
:
req
.
Authorize
SpendHash
,
Account
:
req
.
Account
,
Account
:
req
.
Account
,
Status
:
mixTy
.
NoteStatus
(
req
.
Status
),
Status
:
mixTy
.
NoteStatus
(
req
.
Status
),
}},
}},
...
@@ -224,7 +224,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
...
@@ -224,7 +224,7 @@ func (e *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
}
}
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primary
,
req
.
Count
,
req
.
Direction
)
rows
,
err
:=
query
.
ListIndex
(
indexName
,
prefix
,
primary
,
req
.
Count
,
req
.
Direction
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Error
(
"listMixInfos query failed"
,
"indexName"
,
indexName
,
"prefix"
,
prefix
,
"key"
,
string
(
primary
),
"err"
,
err
)
bizlog
.
Error
(
"listMixInfos query failed"
,
"indexName"
,
indexName
,
"prefix"
,
string
(
prefix
)
,
"key"
,
string
(
primary
),
"err"
,
err
)
return
nil
,
err
return
nil
,
err
}
}
if
len
(
rows
)
==
0
{
if
len
(
rows
)
==
0
{
...
@@ -276,8 +276,8 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
...
@@ -276,8 +276,8 @@ func (p *mixPolicy) processSecretGroup(noteHash string, secretGroup *mixTy.DHSec
}
}
//可能自己账户里面既有spender,也有returner 或authorize,都要解一遍
//可能自己账户里面既有spender,也有returner 或authorize,都要解一遍
if
len
(
secretGroup
.
Payment
)
>
0
{
if
len
(
secretGroup
.
Receiver
)
>
0
{
info
,
err
:=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Payment
,
privacyKeys
)
info
,
err
:=
p
.
decodeSecret
(
noteHash
,
secretGroup
.
Receiver
,
privacyKeys
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Error
(
"processSecretGroup.spender"
,
"err"
,
err
)
bizlog
.
Error
(
"processSecretGroup.spender"
,
"err"
,
err
)
}
}
...
@@ -330,16 +330,18 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
...
@@ -330,16 +330,18 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
bizlog
.
Info
(
"processSecret.decryptData"
,
"decrypt for notehash"
,
noteHash
,
"secret"
,
secretData
,
"addr"
,
key
.
Addr
,
"err"
,
err
)
bizlog
.
Info
(
"processSecret.decryptData"
,
"decrypt for notehash"
,
noteHash
,
"secret"
,
secretData
,
"addr"
,
key
.
Addr
,
"err"
,
err
)
continue
continue
}
}
bizlog
.
Info
(
"processSecret.decryptData OK"
,
"decrypt for notehash"
,
noteHash
,
"addr"
,
key
.
Addr
)
var
rawData
mixTy
.
SecretData
var
rawData
mixTy
.
SecretData
err
=
types
.
Decode
(
decryptData
,
&
rawData
)
err
=
types
.
Decode
(
decryptData
,
&
rawData
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Info
(
"processSecret.
DecrypterPrivkey"
,
"err"
,
err
)
bizlog
.
Info
(
"processSecret.
decode rawData"
,
"addr"
,
key
.
Addr
,
"err"
,
err
)
continue
continue
}
}
if
rawData
.
PaymentPubKey
==
key
.
Privacy
.
PaymentKey
.
PayKey
||
bizlog
.
Info
(
"processSecret.decode rawData OK"
,
"notehash"
,
noteHash
,
"addr"
,
key
.
Addr
)
rawData
.
ReturnPubKey
==
key
.
Privacy
.
PaymentKey
.
PayKey
||
rawData
.
AuthorizePubKey
==
key
.
Privacy
.
PaymentKey
.
PayKey
{
if
rawData
.
ReceiverPubKey
==
key
.
Privacy
.
PaymentKey
.
ReceiverPubKey
||
rawData
.
ReturnPubKey
==
key
.
Privacy
.
PaymentKey
.
ReceiverPubKey
||
rawData
.
AuthorizePubKey
==
key
.
Privacy
.
PaymentKey
.
ReceiverPubKey
{
//decrypted, save database
//decrypted, save database
var
info
mixTy
.
WalletIndexInfo
var
info
mixTy
.
WalletIndexInfo
info
.
NoteHash
=
noteHash
info
.
NoteHash
=
noteHash
...
@@ -347,12 +349,13 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
...
@@ -347,12 +349,13 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
//如果自己是spender,则记录有关spenderAuthHash,如果是returner,则记录returnerAuthHash
//如果自己是spender,则记录有关spenderAuthHash,如果是returner,则记录returnerAuthHash
//如果授权为spenderAuthHash,则根据授权hash索引到本地数据库,spender更新本地为VALID,returner侧不变仍为FROZEN,花费后,两端都变为USED
//如果授权为spenderAuthHash,则根据授权hash索引到本地数据库,spender更新本地为VALID,returner侧不变仍为FROZEN,花费后,两端都变为USED
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
info
.
AuthorizeSpendHash
=
"0"
if
len
(
rawData
.
AuthorizePubKey
)
>
LENNULLKEY
{
if
len
(
rawData
.
AuthorizePubKey
)
>
LENNULLKEY
{
if
rawData
.
PaymentPubKey
==
key
.
Privacy
.
PaymentKey
.
Pay
Key
{
if
rawData
.
ReceiverPubKey
==
key
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
{
info
.
Auth
SpendHash
=
getFrString
(
mimcHashString
([]
string
{
rawData
.
Payment
PubKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
info
.
Auth
orizeSpendHash
=
getFrString
(
mimcHashString
([]
string
{
rawData
.
Receiver
PubKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
}
else
if
rawData
.
ReturnPubKey
==
key
.
Privacy
.
PaymentKey
.
Pay
Key
{
}
else
if
rawData
.
ReturnPubKey
==
key
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
{
info
.
IsReturner
=
true
info
.
IsReturner
=
true
info
.
AuthSpendHash
=
getFrString
(
mimcHashString
([]
string
{
rawData
.
ReturnPubKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
info
.
Auth
orize
SpendHash
=
getFrString
(
mimcHashString
([]
string
{
rawData
.
ReturnPubKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
}
}
}
}
...
...
plugin/dapp/mix/wallet/mixbiztable.go
View file @
d5900775
...
@@ -71,7 +71,7 @@ func (r *MixRow) Get(key string) ([]byte, error) {
...
@@ -71,7 +71,7 @@ func (r *MixRow) Get(key string) ([]byte, error) {
case
"nullifier"
:
case
"nullifier"
:
return
[]
byte
(
r
.
Info
.
Nullifier
),
nil
return
[]
byte
(
r
.
Info
.
Nullifier
),
nil
case
"authSpendHash"
:
case
"authSpendHash"
:
return
[]
byte
(
r
.
Info
.
AuthSpendHash
),
nil
return
[]
byte
(
r
.
Info
.
Auth
orize
SpendHash
),
nil
case
"account"
:
case
"account"
:
return
[]
byte
(
r
.
Info
.
Account
),
nil
return
[]
byte
(
r
.
Info
.
Account
),
nil
case
"status"
:
case
"status"
:
...
...
plugin/dapp/mix/wallet/mixsignature.go
View file @
d5900775
...
@@ -10,6 +10,7 @@ package wallet
...
@@ -10,6 +10,7 @@ package wallet
import
(
import
(
"bytes"
"bytes"
"encoding/hex"
"fmt"
"fmt"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common"
...
@@ -33,29 +34,28 @@ func init() {
...
@@ -33,29 +34,28 @@ func init() {
// MixSignature mix签名中对于crypto.Signature接口实现
// MixSignature mix签名中对于crypto.Signature接口实现
type
MixSignature
struct
{
type
MixSignature
struct
{
sign
mixTy
.
MixTransferAction
sign
[]
byte
}
}
// Bytes convert to bytest
// Bytes convert to bytest
func
(
r
*
MixSignature
)
Bytes
()
[]
byte
{
func
(
r
*
MixSignature
)
Bytes
()
[]
byte
{
return
types
.
Encode
(
&
r
.
sign
)
return
r
.
sign
[
:
]
}
}
// IsZero check is zero
// IsZero check is zero
func
(
r
*
MixSignature
)
IsZero
()
bool
{
func
(
r
*
MixSignature
)
IsZero
()
bool
{
return
r
.
sign
.
Output
==
nil
||
r
.
sign
.
Input
==
nil
return
len
(
r
.
sign
)
==
0
}
}
// String convert to string
// String convert to string
func
(
r
*
MixSignature
)
String
()
string
{
func
(
r
*
MixSignature
)
String
()
string
{
return
r
.
sign
.
String
(
)
return
hex
.
EncodeToString
(
r
.
sign
)
}
}
// Equals check equals
// Equals check equals
func
(
r
*
MixSignature
)
Equals
(
other
crypto
.
Signature
)
bool
{
func
(
r
*
MixSignature
)
Equals
(
other
crypto
.
Signature
)
bool
{
if
_
,
ok
:=
other
.
(
*
MixSignature
);
ok
{
if
_
,
ok
:=
other
.
(
*
MixSignature
);
ok
{
this
:=
types
.
Encode
(
&
r
.
sign
)
return
bytes
.
Equal
(
r
.
Bytes
(),
other
.
Bytes
())
return
bytes
.
Equal
(
this
,
other
.
Bytes
())
}
}
return
false
return
false
}
}
...
@@ -213,10 +213,9 @@ func (r *MixSignZkSnark) SignatureFromBytes(b []byte) (crypto.Signature, error)
...
@@ -213,10 +213,9 @@ func (r *MixSignZkSnark) SignatureFromBytes(b []byte) (crypto.Signature, error)
if
len
(
b
)
<=
0
{
if
len
(
b
)
<=
0
{
return
nil
,
types
.
ErrInvalidParam
return
nil
,
types
.
ErrInvalidParam
}
}
sign
:=
new
(
MixSignature
)
if
err
:=
types
.
Decode
(
b
,
&
sign
.
sign
);
err
!=
nil
{
return
nil
,
err
}
return
sign
,
nil
var
mixSig
MixSignature
mixSig
.
sign
=
append
(
mixSig
.
sign
,
b
...
)
return
&
mixSig
,
nil
}
}
plugin/dapp/mix/wallet/mixstore.go
View file @
d5900775
...
@@ -117,6 +117,14 @@ func (store *mixStore) setRescanNoteStatus(status int32) {
...
@@ -117,6 +117,14 @@ func (store *mixStore) setRescanNoteStatus(status int32) {
newbatch
.
Write
()
newbatch
.
Write
()
}
}
func
(
store
*
mixStore
)
setKvs
(
set
*
types
.
LocalDBSet
)
{
newbatch
:=
store
.
NewBatch
(
true
)
for
_
,
s
:=
range
set
.
KV
{
newbatch
.
Set
(
s
.
Key
,
s
.
Value
)
}
newbatch
.
Write
()
}
func
(
store
*
mixStore
)
getRescanNoteStatus
()
int32
{
func
(
store
*
mixStore
)
getRescanNoteStatus
()
int32
{
v
,
err
:=
store
.
Get
(
calcRescanNoteStatus
())
v
,
err
:=
store
.
Get
(
calcRescanNoteStatus
())
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/mix/wallet/proof.go
View file @
d5900775
...
@@ -24,7 +24,7 @@ func encodeSecretData(secret *mixTy.SecretData) (*mixTy.EncodedSecretData, error
...
@@ -24,7 +24,7 @@ func encodeSecretData(secret *mixTy.SecretData) (*mixTy.EncodedSecretData, error
if
secret
==
nil
{
if
secret
==
nil
{
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"para is nil"
)
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"para is nil"
)
}
}
if
len
(
secret
.
Payment
PubKey
)
<=
0
{
if
len
(
secret
.
Receiver
PubKey
)
<=
0
{
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"spendPubKey is nil"
)
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"spendPubKey is nil"
)
}
}
var
val
big
.
Int
var
val
big
.
Int
...
@@ -57,7 +57,7 @@ func encryptSecretData(req *mixTy.EncryptSecretData) (*mixTy.DHSecret, error) {
...
@@ -57,7 +57,7 @@ func encryptSecretData(req *mixTy.EncryptSecretData) (*mixTy.DHSecret, error) {
return
nil
,
errors
.
Wrap
(
err
,
"decode secret"
)
return
nil
,
errors
.
Wrap
(
err
,
"decode secret"
)
}
}
return
encryptData
(
req
.
ReceivingPk
,
secret
),
nil
return
encryptData
(
req
.
SecretPubKey
,
secret
),
nil
}
}
func
decryptSecretData
(
req
*
mixTy
.
DecryptSecretData
)
(
*
mixTy
.
SecretData
,
error
)
{
func
decryptSecretData
(
req
*
mixTy
.
DecryptSecretData
)
(
*
mixTy
.
SecretData
,
error
)
{
...
@@ -65,7 +65,7 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error)
...
@@ -65,7 +65,7 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"decode req.secret"
)
return
nil
,
errors
.
Wrap
(
err
,
"decode req.secret"
)
}
}
decrypt
,
err
:=
decryptData
(
req
.
Receiving
PriKey
,
req
.
Epk
,
secret
)
decrypt
,
err
:=
decryptData
(
req
.
Secret
PriKey
,
req
.
Epk
,
secret
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"decrypt secret"
)
return
nil
,
errors
.
Wrap
(
err
,
"decrypt secret"
)
}
}
...
@@ -90,7 +90,7 @@ func (policy *mixPolicy) getPaymentKey(addr string) (*mixTy.PaymentKey, error) {
...
@@ -90,7 +90,7 @@ func (policy *mixPolicy) getPaymentKey(addr string) (*mixTy.PaymentKey, error) {
}
}
func
(
policy
*
mixPolicy
)
depositProof
(
req
*
mixTy
.
DepositProofReq
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
func
(
policy
*
mixPolicy
)
depositProof
(
req
*
mixTy
.
DepositProofReq
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
if
req
==
nil
||
len
(
req
.
Payment
Addr
)
<=
0
{
if
req
==
nil
||
len
(
req
.
Receiver
Addr
)
<=
0
{
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"paymentAddr is nil"
)
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"paymentAddr is nil"
)
}
}
if
req
.
Amount
<=
0
{
if
req
.
Amount
<=
0
{
...
@@ -106,11 +106,11 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
...
@@ -106,11 +106,11 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
secret
.
NoteRandom
=
fr
.
String
()
secret
.
NoteRandom
=
fr
.
String
()
// 获取receiving addr对应的paymentKey
// 获取receiving addr对应的paymentKey
toKey
,
e
:=
policy
.
getPaymentKey
(
req
.
Payment
Addr
)
toKey
,
e
:=
policy
.
getPaymentKey
(
req
.
Receiver
Addr
)
if
e
!=
nil
{
if
e
!=
nil
{
return
nil
,
errors
.
Wrapf
(
e
,
"get payment key for addr = %s"
,
req
.
Payment
Addr
)
return
nil
,
errors
.
Wrapf
(
e
,
"get payment key for addr = %s"
,
req
.
Receiver
Addr
)
}
}
secret
.
PaymentPubKey
=
toKey
.
Paying
Key
secret
.
ReceiverPubKey
=
toKey
.
Receiver
Key
//获取return addr对应的key
//获取return addr对应的key
var
returnKey
*
mixTy
.
PaymentKey
var
returnKey
*
mixTy
.
PaymentKey
...
@@ -122,7 +122,7 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
...
@@ -122,7 +122,7 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for return addr = %s"
,
req
.
ReturnAddr
)
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for return addr = %s"
,
req
.
ReturnAddr
)
}
}
secret
.
ReturnPubKey
=
returnKey
.
Paying
Key
secret
.
ReturnPubKey
=
returnKey
.
Receiver
Key
}
}
//获取auth addr对应的key
//获取auth addr对应的key
...
@@ -133,19 +133,19 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
...
@@ -133,19 +133,19 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for authorize addr = %s"
,
req
.
AuthorizeAddr
)
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for authorize addr = %s"
,
req
.
AuthorizeAddr
)
}
}
secret
.
AuthorizePubKey
=
authKey
.
Paying
Key
secret
.
AuthorizePubKey
=
authKey
.
Receiver
Key
}
}
//DH加密
//DH加密
data
:=
types
.
Encode
(
&
secret
)
data
:=
types
.
Encode
(
&
secret
)
var
group
mixTy
.
DHSecretGroup
var
group
mixTy
.
DHSecretGroup
group
.
Payment
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
toKey
.
Receiving
Key
,
data
)))
group
.
Receiver
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
toKey
.
Secret
Key
,
data
)))
if
returnKey
!=
nil
{
if
returnKey
!=
nil
{
group
.
Returner
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
returnKey
.
Receiving
Key
,
data
)))
group
.
Returner
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
returnKey
.
Secret
Key
,
data
)))
}
}
if
authKey
!=
nil
{
if
authKey
!=
nil
{
group
.
Authorize
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
authKey
.
Receiving
Key
,
data
)))
group
.
Authorize
=
hex
.
EncodeToString
(
types
.
Encode
(
encryptData
(
authKey
.
Secret
Key
,
data
)))
}
}
var
resp
mixTy
.
DepositProofResp
var
resp
mixTy
.
DepositProofResp
...
@@ -153,7 +153,7 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
...
@@ -153,7 +153,7 @@ func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.Deposi
resp
.
Secrets
=
&
group
resp
.
Secrets
=
&
group
keys
:=
[]
string
{
keys
:=
[]
string
{
secret
.
Payment
PubKey
,
secret
.
Receiver
PubKey
,
secret
.
ReturnPubKey
,
secret
.
ReturnPubKey
,
secret
.
AuthorizePubKey
,
secret
.
AuthorizePubKey
,
secret
.
Amount
,
secret
.
Amount
,
...
@@ -206,16 +206,16 @@ func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.With
...
@@ -206,16 +206,16 @@ func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.With
}
}
var
resp
mixTy
.
WithdrawProofResp
var
resp
mixTy
.
WithdrawProofResp
resp
.
Proof
=
note
.
Secret
resp
.
Secret
=
note
.
Secret
resp
.
NullifierHash
=
note
.
Nullifier
resp
.
NullifierHash
=
note
.
Nullifier
resp
.
Auth
SpendHash
=
note
.
Auth
SpendHash
resp
.
Auth
orizeSpendHash
=
note
.
Authorize
SpendHash
resp
.
NoteHash
=
note
.
NoteHash
resp
.
NoteHash
=
note
.
NoteHash
resp
.
SpendFlag
=
1
resp
.
SpendFlag
=
1
if
note
.
IsReturner
{
if
note
.
IsReturner
{
resp
.
SpendFlag
=
0
resp
.
SpendFlag
=
0
}
}
if
len
(
resp
.
AuthSpendHash
)
>
0
{
if
len
(
resp
.
Auth
orize
SpendHash
)
>
0
{
resp
.
AuthFlag
=
1
resp
.
Auth
orize
Flag
=
1
}
}
//get spend privacy key
//get spend privacy key
...
@@ -223,7 +223,7 @@ func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.With
...
@@ -223,7 +223,7 @@ func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.With
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getAccountPrivacyKey addr=%s"
,
note
.
Account
)
return
nil
,
errors
.
Wrapf
(
err
,
"getAccountPrivacyKey addr=%s"
,
note
.
Account
)
}
}
resp
.
SpendPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
SpendKey
resp
.
SpendPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
Spend
Pri
Key
//get tree path
//get tree path
path
,
err
:=
policy
.
getPathProof
(
note
.
NoteHash
)
path
,
err
:=
policy
.
getPathProof
(
note
.
NoteHash
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -255,22 +255,22 @@ func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofRes
...
@@ -255,22 +255,22 @@ func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofRes
var
resp
mixTy
.
AuthProofResp
var
resp
mixTy
.
AuthProofResp
resp
.
Proof
=
note
.
Secret
resp
.
Proof
=
note
.
Secret
resp
.
NoteHash
=
note
.
NoteHash
resp
.
NoteHash
=
note
.
NoteHash
resp
.
AuthPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
SpendKey
resp
.
AuthPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
Spend
Pri
Key
resp
.
AuthPubKey
=
privacyKey
.
Privacy
.
PaymentKey
.
Pay
Key
resp
.
AuthPubKey
=
privacyKey
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
if
privacyKey
.
Privacy
.
PaymentKey
.
Pay
Key
!=
note
.
Secret
.
AuthorizePubKey
{
if
privacyKey
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
!=
note
.
Secret
.
AuthorizePubKey
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"auth pubkey from note=%s, from privacyKey=%s,for account =%s"
,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"auth pubkey from note=%s, from privacyKey=%s,for account =%s"
,
note
.
Secret
.
AuthorizePubKey
,
privacyKey
.
Privacy
.
PaymentKey
.
Pay
Key
,
note
.
Account
)
note
.
Secret
.
AuthorizePubKey
,
privacyKey
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
,
note
.
Account
)
}
}
resp
.
AuthHash
=
getFrString
(
mimcHashString
([]
string
{
resp
.
AuthPubKey
,
note
.
Secret
.
NoteRandom
}))
resp
.
AuthHash
=
getFrString
(
mimcHashString
([]
string
{
resp
.
AuthPubKey
,
note
.
Secret
.
NoteRandom
}))
//default auto to paymenter
//default auto to paymenter
resp
.
SpendFlag
=
1
resp
.
SpendFlag
=
1
resp
.
Auth
SpendHash
=
getFrString
(
mimcHashString
([]
string
{
note
.
Secret
.
Payment
PubKey
,
note
.
Secret
.
Amount
,
note
.
Secret
.
NoteRandom
}))
resp
.
Auth
orizeSpendHash
=
getFrString
(
mimcHashString
([]
string
{
note
.
Secret
.
Receiver
PubKey
,
note
.
Secret
.
Amount
,
note
.
Secret
.
NoteRandom
}))
if
req
.
ToReturn
!=
0
{
if
req
.
ToReturn
!=
0
{
resp
.
SpendFlag
=
0
resp
.
SpendFlag
=
0
//auth to returner
//auth to returner
resp
.
AuthSpendHash
=
getFrString
(
mimcHashString
([]
string
{
note
.
Secret
.
ReturnPubKey
,
note
.
Secret
.
Amount
,
note
.
Secret
.
NoteRandom
}))
resp
.
Auth
orize
SpendHash
=
getFrString
(
mimcHashString
([]
string
{
note
.
Secret
.
ReturnPubKey
,
note
.
Secret
.
Amount
,
note
.
Secret
.
NoteRandom
}))
}
}
//get tree path
//get tree path
...
@@ -289,8 +289,23 @@ func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofRes
...
@@ -289,8 +289,23 @@ func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofRes
}
}
func
(
policy
*
mixPolicy
)
getTransferInputPart
(
note
*
mixTy
.
WalletIndexInfo
)
(
*
mixTy
.
TransferInputProof
,
error
)
{
func
(
policy
*
mixPolicy
)
getTreeProof
(
leaf
string
)
(
*
mixTy
.
TreePathProof
,
error
)
{
//get tree path
path
,
err
:=
policy
.
getPathProof
(
leaf
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get tree proof for noteHash=%s"
,
leaf
)
}
var
proof
mixTy
.
TreePathProof
proof
.
TreePath
=
path
.
ProofSet
[
1
:
]
proof
.
Helpers
=
path
.
Helpers
for
i
:=
0
;
i
<
len
(
proof
.
TreePath
);
i
++
{
proof
.
ValidPath
=
append
(
proof
.
ValidPath
,
1
)
}
proof
.
TreeRootHash
=
path
.
RootHash
return
&
proof
,
nil
}
func
(
policy
*
mixPolicy
)
getTransferInputPart
(
note
*
mixTy
.
WalletIndexInfo
)
(
*
mixTy
.
TransferInputProof
,
error
)
{
//get spend privacy key
//get spend privacy key
privacyKey
,
err
:=
policy
.
getAccountPrivacyKey
(
note
.
Account
)
privacyKey
,
err
:=
policy
.
getAccountPrivacyKey
(
note
.
Account
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -302,23 +317,30 @@ func (policy *mixPolicy) getTransferInputPart(note *mixTy.WalletIndexInfo) (*mix
...
@@ -302,23 +317,30 @@ func (policy *mixPolicy) getTransferInputPart(note *mixTy.WalletIndexInfo) (*mix
input
.
NoteHash
=
note
.
NoteHash
input
.
NoteHash
=
note
.
NoteHash
input
.
NullifierHash
=
note
.
Nullifier
input
.
NullifierHash
=
note
.
Nullifier
//自己是payment 还是returner已经在解析note时候算好了,authSpendHash也对应算好了,如果note valid,则就用本地即可
//自己是payment 还是returner已经在解析note时候算好了,authSpendHash也对应算好了,如果note valid,则就用本地即可
input
.
Auth
SpendHash
=
note
.
Auth
SpendHash
input
.
Auth
orizeSpendHash
=
note
.
Authorize
SpendHash
input
.
SpendPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
SpendKey
input
.
SpendPrivKey
=
privacyKey
.
Privacy
.
PaymentKey
.
Spend
Pri
Key
if
privacyKey
.
Privacy
.
PaymentKey
.
PayKey
!=
note
.
Secret
.
Authorize
PubKey
{
if
privacyKey
.
Privacy
.
PaymentKey
.
ReceiverPubKey
!=
note
.
Secret
.
Receiver
PubKey
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"payment pubkey from note=%s not match from privacyKey=%s,for account =%s"
,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"payment pubkey from note=%s not match from privacyKey=%s,for account =%s"
,
note
.
Secret
.
AuthorizePubKey
,
privacyKey
.
Privacy
.
PaymentKey
.
Pay
Key
,
note
.
Account
)
note
.
Secret
.
ReceiverPubKey
,
privacyKey
.
Privacy
.
PaymentKey
.
ReceiverPub
Key
,
note
.
Account
)
}
}
input
.
SpendFlag
=
1
input
.
SpendFlag
=
1
if
note
.
IsReturner
{
if
note
.
IsReturner
{
input
.
SpendFlag
=
0
input
.
SpendFlag
=
0
}
}
if
len
(
input
.
AuthSpendHash
)
>
0
{
if
len
(
input
.
AuthorizeSpendHash
)
>
LENNULLKEY
{
input
.
AuthFlag
=
1
input
.
AuthorizeFlag
=
1
}
treeProof
,
err
:=
policy
.
getTreeProof
(
note
.
NoteHash
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getTreeProof for hash=%s"
,
note
.
NoteHash
)
}
}
input
.
TreeProof
=
treeProof
return
&
input
,
nil
return
&
input
,
nil
}
}
func
getCommitValue
(
noteAmount
,
transferAmount
,
minTxFee
uint64
)
(
*
mixTy
.
CommitValue
Rst
,
error
)
{
func
getCommitValue
(
noteAmount
,
transferAmount
,
minTxFee
uint64
)
(
*
mixTy
.
ShieldAmount
Rst
,
error
)
{
if
noteAmount
<
transferAmount
+
minTxFee
{
if
noteAmount
<
transferAmount
+
minTxFee
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"transfer amount=%d big than note=%d - fee=%d"
,
transferAmount
,
noteAmount
,
minTxFee
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"transfer amount=%d big than note=%d - fee=%d"
,
transferAmount
,
noteAmount
,
minTxFee
)
}
}
...
@@ -337,17 +359,17 @@ func getCommitValue(noteAmount, transferAmount, minTxFee uint64) (*mixTy.CommitV
...
@@ -337,17 +359,17 @@ func getCommitValue(noteAmount, transferAmount, minTxFee uint64) (*mixTy.CommitV
//三个混淆随机值可以随机获取,这里noteRandom和为了Nullifier计算的NoteRandom不同。
//三个混淆随机值可以随机获取,这里noteRandom和为了Nullifier计算的NoteRandom不同。
//获取随机值,截取一半给change和transfer,和值给Note,直接用完整的random值会溢出
//获取随机值,截取一半给change和transfer,和值给Note,直接用完整的random值会溢出
var
changeRdm
,
transRdm
,
v
fr_bn256
.
Element
var
rChange
,
rTrans
,
v
fr_bn256
.
Element
random
:=
v
.
SetRandom
()
.
String
()
random
:=
v
.
SetRandom
()
.
String
()
changeRdm
.
SetString
(
random
[
0
:
len
(
random
)
/
2
])
rChange
.
SetString
(
random
[
0
:
len
(
random
)
/
2
])
transRdm
.
SetString
(
random
[
len
(
random
)
/
2
:
])
rTrans
.
SetString
(
random
[
len
(
random
)
/
2
:
])
var
noteRdm
fr_bn256
.
Element
var
rNote
fr_bn256
.
Element
noteRdm
.
Add
(
&
changeRdm
,
&
transRdm
)
rNote
.
Add
(
&
rChange
,
&
rTrans
)
noteH
:=
mixTy
.
MulCurvePointH
(
noteRdm
.
String
())
noteH
:=
mixTy
.
MulCurvePointH
(
rNote
.
String
())
transferH
:=
mixTy
.
MulCurvePointH
(
transRdm
.
String
())
transferH
:=
mixTy
.
MulCurvePointH
(
rTrans
.
String
())
changeH
:=
mixTy
.
MulCurvePointH
(
changeRdm
.
String
())
changeH
:=
mixTy
.
MulCurvePointH
(
rChange
.
String
())
//fmt.Println("change",changeRandom.String())
//fmt.Println("change",changeRandom.String())
//fmt.Println("transfer",transRandom.String())
//fmt.Println("transfer",transRandom.String())
//fmt.Println("note",noteRandom.String())
//fmt.Println("note",noteRandom.String())
...
@@ -364,13 +386,13 @@ func getCommitValue(noteAmount, transferAmount, minTxFee uint64) (*mixTy.CommitV
...
@@ -364,13 +386,13 @@ func getCommitValue(noteAmount, transferAmount, minTxFee uint64) (*mixTy.CommitV
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"amount sum fail for G+H point"
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"amount sum fail for G+H point"
)
}
}
rst
:=
&
mixTy
.
CommitValue
Rst
{
rst
:=
&
mixTy
.
ShieldAmount
Rst
{
NoteRandom
:
noteRdm
.
String
(),
NoteRandom
:
rNote
.
String
(),
TransferRandom
:
transRdm
.
String
(),
TransferRandom
:
rTrans
.
String
(),
ChangeRandom
:
changeRdm
.
String
(),
ChangeRandom
:
rChange
.
String
(),
Note
:
&
mixTy
.
CommitValue
{
X
:
noteAmountG
.
X
.
String
(),
Y
:
noteAmountG
.
Y
.
String
()},
Note
:
&
mixTy
.
ShieldAmount
{
X
:
noteAmountG
.
X
.
String
(),
Y
:
noteAmountG
.
Y
.
String
()},
Transfer
:
&
mixTy
.
CommitValue
{
X
:
transAmountG
.
X
.
String
(),
Y
:
transAmountG
.
Y
.
String
()},
Transfer
:
&
mixTy
.
ShieldAmount
{
X
:
transAmountG
.
X
.
String
(),
Y
:
transAmountG
.
Y
.
String
()},
Change
:
&
mixTy
.
CommitValue
{
X
:
changeAmountG
.
X
.
String
(),
Y
:
changeAmountG
.
Y
.
String
()},
Change
:
&
mixTy
.
ShieldAmount
{
X
:
changeAmountG
.
X
.
String
(),
Y
:
changeAmountG
.
Y
.
String
()},
}
}
return
rst
,
nil
return
rst
,
nil
}
}
...
@@ -381,6 +403,9 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
...
@@ -381,6 +403,9 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
return
nil
,
err
return
nil
,
err
}
}
inputPart
,
err
:=
policy
.
getTransferInputPart
(
note
)
inputPart
,
err
:=
policy
.
getTransferInputPart
(
note
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getTransferInputPart note=%s"
,
note
.
NoteHash
)
}
bizlog
.
Info
(
"transferProof get notes succ"
,
"notehash"
,
req
.
NoteHash
)
bizlog
.
Info
(
"transferProof get notes succ"
,
"notehash"
,
req
.
NoteHash
)
noteAmount
,
err
:=
strconv
.
ParseUint
(
note
.
Secret
.
Amount
,
10
,
64
)
noteAmount
,
err
:=
strconv
.
ParseUint
(
note
.
Secret
.
Amount
,
10
,
64
)
...
@@ -392,7 +417,7 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
...
@@ -392,7 +417,7 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
//output toAddr part
//output toAddr part
reqTransfer
:=
&
mixTy
.
DepositProofReq
{
reqTransfer
:=
&
mixTy
.
DepositProofReq
{
PaymentAddr
:
req
.
ToAddr
,
ReceiverAddr
:
req
.
ToAddr
,
AuthorizeAddr
:
req
.
ToAuthAddr
,
AuthorizeAddr
:
req
.
ToAuthAddr
,
ReturnAddr
:
req
.
ReturnAddr
,
ReturnAddr
:
req
.
ReturnAddr
,
Amount
:
req
.
Amount
,
Amount
:
req
.
Amount
,
...
@@ -406,7 +431,7 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
...
@@ -406,7 +431,7 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
//output 找零 part,如果找零为0也需要设置,否则只有一个输入一个输出,H部分的随机数要相等,就能推测出转账值来
//output 找零 part,如果找零为0也需要设置,否则只有一个输入一个输出,H部分的随机数要相等,就能推测出转账值来
//在transfer output 部分特殊处理,如果amount是0的值则不加进tree
//在transfer output 部分特殊处理,如果amount是0的值则不加进tree
reqChange
:=
&
mixTy
.
DepositProofReq
{
reqChange
:=
&
mixTy
.
DepositProofReq
{
Payment
Addr
:
note
.
Account
,
Receiver
Addr
:
note
.
Account
,
Amount
:
noteAmount
-
req
.
Amount
-
minTxFee
,
Amount
:
noteAmount
-
req
.
Amount
-
minTxFee
,
}
}
depositChange
,
err
:=
policy
.
depositProof
(
reqChange
)
depositChange
,
err
:=
policy
.
depositProof
(
reqChange
)
...
@@ -416,28 +441,30 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
...
@@ -416,28 +441,30 @@ func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.Tran
bizlog
.
Info
(
"transferProof deposit to change succ"
,
"notehash"
,
req
.
NoteHash
)
bizlog
.
Info
(
"transferProof deposit to change succ"
,
"notehash"
,
req
.
NoteHash
)
commitValue
,
err
:=
getCommitValue
(
noteAmount
,
req
.
Amount
,
minTxFee
)
commitValue
,
err
:=
getCommitValue
(
noteAmount
,
req
.
Amount
,
minTxFee
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
bizlog
.
Info
(
"transferProof get commit value succ"
,
"notehash"
,
req
.
NoteHash
)
bizlog
.
Info
(
"transferProof get commit value succ"
,
"notehash"
,
req
.
NoteHash
)
//noteCommitX, transferX, changeX
//noteCommitX, transferX, changeX
inputPart
.
CommitValue
=
commitValue
.
Note
inputPart
.
ShieldAmount
=
commitValue
.
Note
inputPart
.
SpendRandom
=
commitValue
.
NoteRandom
inputPart
.
AmountRandom
=
commitValue
.
NoteRandom
transferOutput
:=
&
mixTy
.
TransferOutputProof
{
transferOutput
:=
&
mixTy
.
TransferOutputProof
{
Proof
:
depositTransfer
.
Proof
,
Proof
:
depositTransfer
.
Proof
,
NoteHash
:
depositTransfer
.
NoteHash
,
NoteHash
:
depositTransfer
.
NoteHash
,
Secrets
:
depositTransfer
.
Secrets
,
Secrets
:
depositTransfer
.
Secrets
,
CommitValue
:
commitValue
.
Transfer
,
ShieldAmount
:
commitValue
.
Transfer
,
Spend
Random
:
commitValue
.
TransferRandom
,
Amount
Random
:
commitValue
.
TransferRandom
,
}
}
changeOutput
:=
&
mixTy
.
TransferOutputProof
{
changeOutput
:=
&
mixTy
.
TransferOutputProof
{
Proof
:
depositChange
.
Proof
,
Proof
:
depositChange
.
Proof
,
NoteHash
:
depositChange
.
NoteHash
,
NoteHash
:
depositChange
.
NoteHash
,
Secrets
:
depositChange
.
Secrets
,
Secrets
:
depositChange
.
Secrets
,
CommitValue
:
commitValue
.
Change
,
ShieldAmount
:
commitValue
.
Change
,
Spend
Random
:
commitValue
.
ChangeRandom
,
Amount
Random
:
commitValue
.
ChangeRandom
,
}
}
return
&
mixTy
.
TransferProofResp
{
return
&
mixTy
.
TransferProofResp
{
TransferInput
:
inputPart
,
TransferInput
:
inputPart
,
TargetOutput
:
transferOutput
,
TargetOutput
:
transferOutput
,
...
...
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