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