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
62f57dc9
Commit
62f57dc9
authored
Sep 15, 2021
by
mdj33
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
shield point H as circuit pub input
parent
12a86ad0
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
102 additions
and
97 deletions
+102
-97
chain33.toml
chain33.toml
+3
-3
testcase.sh
plugin/dapp/mix/cmd/build/testcase.sh
+0
-0
transfer.go
plugin/dapp/mix/executor/transfer.go
+26
-5
transfer_test.go
plugin/dapp/mix/executor/transfer_test.go
+2
-2
transferInput.go
plugin/dapp/mix/types/transferInput.go
+3
-1
transferInput_test.go
plugin/dapp/mix/types/transferInput_test.go
+5
-3
transferOutput.go
plugin/dapp/mix/types/transferOutput.go
+3
-1
transferOutput_test.go
plugin/dapp/mix/types/transferOutput_test.go
+4
-2
util.go
plugin/dapp/mix/types/util.go
+6
-5
txauth.go
plugin/dapp/mix/wallet/txauth.go
+1
-1
txdeposit.go
plugin/dapp/mix/wallet/txdeposit.go
+3
-3
txtransfer.go
plugin/dapp/mix/wallet/txtransfer.go
+15
-25
txwithdraw.go
plugin/dapp/mix/wallet/txwithdraw.go
+1
-1
util.go
plugin/dapp/mix/wallet/util.go
+30
-45
No files found.
chain33.toml
View file @
62f57dc9
...
@@ -295,11 +295,11 @@ txFee=100000000
...
@@ -295,11 +295,11 @@ txFee=100000000
#私对私token转账,花费token(true)还是BTY(false),
#私对私token转账,花费token(true)还是BTY(false),
tokenFee
=
false
tokenFee
=
false
#curve H point
#curve H point
pointHX
=
"
9252662952969393856711468743327022054484546162727338092576697495684140272191
"
pointHX
=
"
19172955941344617222923168298456110557655645809646772800021167670156933290312
"
pointHY
=
"
8220002160263982499510761441032261960817037857915665984040705585999508400744
"
pointHY
=
"
21116962883761739586121793871108889864627195706475546685847911817475098399811
"
#电路最大支持1024个叶子hash,10 level, 配置可以小于1024,但不能大于
#电路最大支持1024个叶子hash,10 level, 配置可以小于1024,但不能大于
maxTreeLeaves
=
1024
maxTreeLeaves
=
1024
hashSeed
=
"
seed
"
hashSeed
=
"
19172955941344617222923168298456110557655645809646772800021167670156933290312
"
[metrics]
[metrics]
#是否使能发送metrics数据的发送
#是否使能发送metrics数据的发送
...
...
plugin/dapp/mix/cmd/build/testcase.sh
View file @
62f57dc9
This diff is collapsed.
Click to expand it.
plugin/dapp/mix/executor/transfer.go
View file @
62f57dc9
...
@@ -22,7 +22,7 @@ import (
...
@@ -22,7 +22,7 @@ import (
2. check if exist in authorize pool and nullifier pool
2. check if exist in authorize pool and nullifier pool
*/
*/
func
transferInput
(
db
dbm
.
KV
,
execer
,
symbol
string
,
proof
*
mixTy
.
ZkProofInfo
)
(
*
mixTy
.
TransferInputCircuit
,
error
)
{
func
transferInput
(
cfg
*
types
.
Chain33Config
,
db
dbm
.
KV
,
execer
,
symbol
string
,
proof
*
mixTy
.
ZkProofInfo
)
(
*
mixTy
.
TransferInputCircuit
,
error
)
{
var
input
mixTy
.
TransferInputCircuit
var
input
mixTy
.
TransferInputCircuit
err
:=
mixTy
.
ConstructCircuitPubInput
(
proof
.
PublicInput
,
&
input
)
err
:=
mixTy
.
ConstructCircuitPubInput
(
proof
.
PublicInput
,
&
input
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -37,6 +37,16 @@ func transferInput(db dbm.KV, execer, symbol string, proof *mixTy.ZkProofInfo) (
...
@@ -37,6 +37,16 @@ func transferInput(db dbm.KV, execer, symbol string, proof *mixTy.ZkProofInfo) (
return
nil
,
errors
.
Wrap
(
err
,
"transferInput verify spendVerify"
)
return
nil
,
errors
.
Wrap
(
err
,
"transferInput verify spendVerify"
)
}
}
//确保用户使用的和链配置的一致,不能私自篡改
conf
:=
types
.
ConfSub
(
cfg
,
mixTy
.
MixX
)
pointHX
:=
conf
.
GStr
(
"pointHX"
)
pointHY
:=
conf
.
GStr
(
"pointHY"
)
inputHX
:=
frontend
.
FromInterface
(
frontend
.
GetAssignedValue
(
input
.
ShieldPointHX
))
inputHY
:=
frontend
.
FromInterface
(
frontend
.
GetAssignedValue
(
input
.
ShieldPointHY
))
if
pointHX
!=
inputHX
.
String
()
||
pointHY
!=
inputHY
.
String
()
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"input circuit H point=%s-%s not match config"
,
inputHX
.
String
(),
inputHY
.
String
())
}
err
=
zkProofVerify
(
db
,
proof
,
mixTy
.
VerifyType_TRANSFERINPUT
)
err
=
zkProofVerify
(
db
,
proof
,
mixTy
.
VerifyType_TRANSFERINPUT
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"transferInput verify proof verify"
)
return
nil
,
errors
.
Wrap
(
err
,
"transferInput verify proof verify"
)
...
@@ -51,12 +61,23 @@ func transferInput(db dbm.KV, execer, symbol string, proof *mixTy.ZkProofInfo) (
...
@@ -51,12 +61,23 @@ func transferInput(db dbm.KV, execer, symbol string, proof *mixTy.ZkProofInfo) (
2. check if exist in authorize pool and nullifier pool
2. check if exist in authorize pool and nullifier pool
*/
*/
func
transferOutputVerify
(
db
dbm
.
KV
,
proof
*
mixTy
.
ZkProofInfo
)
(
*
mixTy
.
TransferOutputCircuit
,
error
)
{
func
transferOutputVerify
(
cfg
*
types
.
Chain33Config
,
db
dbm
.
KV
,
proof
*
mixTy
.
ZkProofInfo
)
(
*
mixTy
.
TransferOutputCircuit
,
error
)
{
var
input
mixTy
.
TransferOutputCircuit
var
input
mixTy
.
TransferOutputCircuit
err
:=
mixTy
.
ConstructCircuitPubInput
(
proof
.
PublicInput
,
&
input
)
err
:=
mixTy
.
ConstructCircuitPubInput
(
proof
.
PublicInput
,
&
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"decode string=%s"
,
proof
.
PublicInput
)
return
nil
,
errors
.
Wrapf
(
err
,
"decode string=%s"
,
proof
.
PublicInput
)
}
}
//确保用户使用的和链配置的一致,不能私自篡改
conf
:=
types
.
ConfSub
(
cfg
,
mixTy
.
MixX
)
pointHX
:=
conf
.
GStr
(
"pointHX"
)
pointHY
:=
conf
.
GStr
(
"pointHY"
)
inputHX
:=
frontend
.
FromInterface
(
frontend
.
GetAssignedValue
(
input
.
ShieldPointHX
))
inputHY
:=
frontend
.
FromInterface
(
frontend
.
GetAssignedValue
(
input
.
ShieldPointHY
))
if
pointHX
!=
inputHX
.
String
()
||
pointHY
!=
inputHY
.
String
()
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"output circuit H point=%s-%s not match config"
,
inputHX
.
String
(),
inputHY
.
String
())
}
err
=
zkProofVerify
(
db
,
proof
,
mixTy
.
VerifyType_TRANSFEROUTPUT
)
err
=
zkProofVerify
(
db
,
proof
,
mixTy
.
VerifyType_TRANSFEROUTPUT
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"Output verify proof verify"
)
return
nil
,
errors
.
Wrap
(
err
,
"Output verify proof verify"
)
...
@@ -110,7 +131,7 @@ func MixTransferInfoVerify(cfg *types.Chain33Config, db dbm.KV, transfer *mixTy.
...
@@ -110,7 +131,7 @@ func MixTransferInfoVerify(cfg *types.Chain33Config, db dbm.KV, transfer *mixTy.
txFee
:=
mixTy
.
GetTransferTxFee
(
cfg
,
execer
)
txFee
:=
mixTy
.
GetTransferTxFee
(
cfg
,
execer
)
//inputs
//inputs
for
_
,
i
:=
range
transfer
.
Inputs
{
for
_
,
i
:=
range
transfer
.
Inputs
{
in
,
err
:=
transferInput
(
db
,
execer
,
symbol
,
i
)
in
,
err
:=
transferInput
(
cfg
,
db
,
execer
,
symbol
,
i
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
err
}
}
...
@@ -119,14 +140,14 @@ func MixTransferInfoVerify(cfg *types.Chain33Config, db dbm.KV, transfer *mixTy.
...
@@ -119,14 +140,14 @@ func MixTransferInfoVerify(cfg *types.Chain33Config, db dbm.KV, transfer *mixTy.
}
}
//output
//output
out
,
err
:=
transferOutputVerify
(
db
,
transfer
.
Output
)
out
,
err
:=
transferOutputVerify
(
cfg
,
db
,
transfer
.
Output
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
err
}
}
outputs
=
append
(
outputs
,
out
)
outputs
=
append
(
outputs
,
out
)
//change
//change
change
,
err
:=
transferOutputVerify
(
db
,
transfer
.
Change
)
change
,
err
:=
transferOutputVerify
(
cfg
,
db
,
transfer
.
Change
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
err
}
}
...
...
plugin/dapp/mix/executor/transfer_test.go
View file @
62f57dc9
...
@@ -14,8 +14,8 @@ import (
...
@@ -14,8 +14,8 @@ import (
)
)
const
(
const
(
baseHX
=
"
9252662952969393856711468743327022054484546162727338092576697495684140272191
"
baseHX
=
"
19172955941344617222923168298456110557655645809646772800021167670156933290312
"
baseHY
=
"
8220002160263982499510761441032261960817037857915665984040705585999508400744
"
baseHY
=
"
21116962883761739586121793871108889864627195706475546685847911817475098399811
"
fee
=
100000
fee
=
100000
)
)
...
...
plugin/dapp/mix/types/transferInput.go
View file @
62f57dc9
...
@@ -12,6 +12,8 @@ type TransferInputCircuit struct {
...
@@ -12,6 +12,8 @@ type TransferInputCircuit struct {
NullifierHash
frontend
.
Variable
`gnark:",public"`
NullifierHash
frontend
.
Variable
`gnark:",public"`
ShieldAmountX
frontend
.
Variable
`gnark:",public"`
ShieldAmountX
frontend
.
Variable
`gnark:",public"`
ShieldAmountY
frontend
.
Variable
`gnark:",public"`
ShieldAmountY
frontend
.
Variable
`gnark:",public"`
ShieldPointHX
frontend
.
Variable
`gnark:",public"`
ShieldPointHY
frontend
.
Variable
`gnark:",public"`
//secret
//secret
ReceiverPubKey
frontend
.
Variable
ReceiverPubKey
frontend
.
Variable
...
@@ -130,7 +132,7 @@ func (circuit *TransferInputCircuit) Define(curveID ecc.ID, cs *frontend.Constra
...
@@ -130,7 +132,7 @@ func (circuit *TransferInputCircuit) Define(curveID ecc.ID, cs *frontend.Constra
valid
=
append
(
valid
,
circuit
.
Valid8
)
valid
=
append
(
valid
,
circuit
.
Valid8
)
valid
=
append
(
valid
,
circuit
.
Valid9
)
valid
=
append
(
valid
,
circuit
.
Valid9
)
CommitValueVerify
(
cs
,
circuit
.
Amount
,
circuit
.
AmountRandom
,
circuit
.
ShieldAmountX
,
circuit
.
ShieldAmountY
)
CommitValueVerify
(
cs
,
circuit
.
Amount
,
circuit
.
AmountRandom
,
circuit
.
ShieldAmountX
,
circuit
.
ShieldAmountY
,
circuit
.
ShieldPointHX
,
circuit
.
ShieldPointHY
)
VerifyMerkleProof
(
cs
,
mimc
,
circuit
.
TreeRootHash
,
proofSet
,
helper
,
valid
)
VerifyMerkleProof
(
cs
,
mimc
,
circuit
.
TreeRootHash
,
proofSet
,
helper
,
valid
)
return
nil
return
nil
...
...
plugin/dapp/mix/types/transferInput_test.go
View file @
62f57dc9
...
@@ -9,7 +9,7 @@ import (
...
@@ -9,7 +9,7 @@ import (
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/frontend"
)
)
func
TestTransferInput
Auth
(
t
*
testing
.
T
)
{
func
TestTransferInput
(
t
*
testing
.
T
)
{
assert
:=
groth16
.
NewAssert
(
t
)
assert
:=
groth16
.
NewAssert
(
t
)
var
inputCircuit
TransferInputCircuit
var
inputCircuit
TransferInputCircuit
...
@@ -21,8 +21,10 @@ func TestTransferInputAuth(t *testing.T) {
...
@@ -21,8 +21,10 @@ func TestTransferInputAuth(t *testing.T) {
inputCircuit
.
TreeRootHash
.
Assign
(
"950328190378475063285997697131233976268556642407874368795731039491163033995"
)
inputCircuit
.
TreeRootHash
.
Assign
(
"950328190378475063285997697131233976268556642407874368795731039491163033995"
)
inputCircuit
.
AuthorizeSpendHash
.
Assign
(
"21866258877426223880121052705448065394371888667902748431050285218933372701264"
)
inputCircuit
.
AuthorizeSpendHash
.
Assign
(
"21866258877426223880121052705448065394371888667902748431050285218933372701264"
)
inputCircuit
.
NullifierHash
.
Assign
(
"18261754976334473090934939020486888794395514077667802499672726421629833403191"
)
inputCircuit
.
NullifierHash
.
Assign
(
"18261754976334473090934939020486888794395514077667802499672726421629833403191"
)
inputCircuit
.
ShieldAmountX
.
Assign
(
"2999198834503527181782558341022909853195739283744640133924786234819945005771"
)
inputCircuit
.
ShieldAmountX
.
Assign
(
"12598656472198560295956115825363858683566688303969048230275808317634686855820"
)
inputCircuit
.
ShieldAmountY
.
Assign
(
"19443413539487113257436159186910517766382570615508121086985490610335878889881"
)
inputCircuit
.
ShieldAmountY
.
Assign
(
"5287524325952639485224317845546845679649328720392059741208352845659048630229"
)
inputCircuit
.
ShieldPointHX
.
Assign
(
"19172955941344617222923168298456110557655645809646772800021167670156933290312"
)
inputCircuit
.
ShieldPointHY
.
Assign
(
"21116962883761739586121793871108889864627195706475546685847911817475098399811"
)
inputCircuit
.
ReceiverPubKey
.
Assign
(
"13496572805321444273664325641440458311310163934354047265362731297880627774936"
)
inputCircuit
.
ReceiverPubKey
.
Assign
(
"13496572805321444273664325641440458311310163934354047265362731297880627774936"
)
inputCircuit
.
ReturnPubKey
.
Assign
(
"10193030166569398670555398535278072963719579248877156082361830729347727033510"
)
inputCircuit
.
ReturnPubKey
.
Assign
(
"10193030166569398670555398535278072963719579248877156082361830729347727033510"
)
...
...
plugin/dapp/mix/types/transferOutput.go
View file @
62f57dc9
...
@@ -11,6 +11,8 @@ type TransferOutputCircuit struct {
...
@@ -11,6 +11,8 @@ type TransferOutputCircuit struct {
NoteHash
frontend
.
Variable
`gnark:",public"`
NoteHash
frontend
.
Variable
`gnark:",public"`
ShieldAmountX
frontend
.
Variable
`gnark:",public"`
ShieldAmountX
frontend
.
Variable
`gnark:",public"`
ShieldAmountY
frontend
.
Variable
`gnark:",public"`
ShieldAmountY
frontend
.
Variable
`gnark:",public"`
ShieldPointHX
frontend
.
Variable
`gnark:",public"`
ShieldPointHY
frontend
.
Variable
`gnark:",public"`
//secret
//secret
ReceiverPubKey
frontend
.
Variable
ReceiverPubKey
frontend
.
Variable
...
@@ -29,7 +31,7 @@ func (circuit *TransferOutputCircuit) Define(curveID ecc.ID, cs *frontend.Constr
...
@@ -29,7 +31,7 @@ func (circuit *TransferOutputCircuit) Define(curveID ecc.ID, cs *frontend.Constr
mimc
.
Write
(
circuit
.
ReceiverPubKey
,
circuit
.
ReturnPubKey
,
circuit
.
AuthorizePubKey
,
circuit
.
Amount
,
circuit
.
NoteRandom
)
mimc
.
Write
(
circuit
.
ReceiverPubKey
,
circuit
.
ReturnPubKey
,
circuit
.
AuthorizePubKey
,
circuit
.
Amount
,
circuit
.
NoteRandom
)
cs
.
AssertIsEqual
(
circuit
.
NoteHash
,
mimc
.
Sum
())
cs
.
AssertIsEqual
(
circuit
.
NoteHash
,
mimc
.
Sum
())
CommitValueVerify
(
cs
,
circuit
.
Amount
,
circuit
.
AmountRandom
,
circuit
.
ShieldAmountX
,
circuit
.
ShieldAmountY
)
CommitValueVerify
(
cs
,
circuit
.
Amount
,
circuit
.
AmountRandom
,
circuit
.
ShieldAmountX
,
circuit
.
ShieldAmountY
,
circuit
.
ShieldPointHX
,
circuit
.
ShieldPointHY
)
return
nil
return
nil
}
}
plugin/dapp/mix/types/transferOutput_test.go
View file @
62f57dc9
...
@@ -21,8 +21,10 @@ func TestTransferOutput(t *testing.T) {
...
@@ -21,8 +21,10 @@ func TestTransferOutput(t *testing.T) {
{
{
outCircuit
.
NoteHash
.
Assign
(
"11183619348394875496624033204802036013086293645689330234403504655205992608466"
)
outCircuit
.
NoteHash
.
Assign
(
"11183619348394875496624033204802036013086293645689330234403504655205992608466"
)
outCircuit
.
ShieldAmountX
.
Assign
(
"2999198834503527181782558341022909853195739283744640133924786234819945005771"
)
outCircuit
.
ShieldAmountX
.
Assign
(
"12598656472198560295956115825363858683566688303969048230275808317634686855820"
)
outCircuit
.
ShieldAmountY
.
Assign
(
"19443413539487113257436159186910517766382570615508121086985490610335878889881"
)
outCircuit
.
ShieldAmountY
.
Assign
(
"5287524325952639485224317845546845679649328720392059741208352845659048630229"
)
outCircuit
.
ShieldPointHX
.
Assign
(
"19172955941344617222923168298456110557655645809646772800021167670156933290312"
)
outCircuit
.
ShieldPointHY
.
Assign
(
"21116962883761739586121793871108889864627195706475546685847911817475098399811"
)
outCircuit
.
ReceiverPubKey
.
Assign
(
"13496572805321444273664325641440458311310163934354047265362731297880627774936"
)
outCircuit
.
ReceiverPubKey
.
Assign
(
"13496572805321444273664325641440458311310163934354047265362731297880627774936"
)
outCircuit
.
ReturnPubKey
.
Assign
(
"10193030166569398670555398535278072963719579248877156082361830729347727033510"
)
outCircuit
.
ReturnPubKey
.
Assign
(
"10193030166569398670555398535278072963719579248877156082361830729347727033510"
)
...
...
plugin/dapp/mix/types/util.go
View file @
62f57dc9
...
@@ -78,19 +78,20 @@ func leafSum(mimc *mimc.MiMC, data frontend.Variable) frontend.Variable {
...
@@ -78,19 +78,20 @@ func leafSum(mimc *mimc.MiMC, data frontend.Variable) frontend.Variable {
return
mimc
.
Sum
()
return
mimc
.
Sum
()
}
}
func
CommitValueVerify
(
cs
*
frontend
.
ConstraintSystem
,
amount
,
amountRandom
,
shieldAmountX
,
shieldAmountY
frontend
.
Variable
)
{
func
CommitValueVerify
(
cs
*
frontend
.
ConstraintSystem
,
amount
,
amountRandom
,
shieldAmountX
,
shieldAmountY
,
shieldPointHX
,
shieldPointHY
frontend
.
Variable
)
{
cs
.
AssertIsLessOrEqual
(
amount
,
9000000000000000000
)
cs
.
AssertIsLessOrEqual
(
amount
,
9000000000000000000
)
curve
,
_
:=
twistededwards
.
NewEdCurve
(
ecc
.
BN254
)
curve
,
_
:=
twistededwards
.
NewEdCurve
(
ecc
.
BN254
)
var
pointAmount
twistededwards
.
Point
var
pointAmount
twistededwards
.
Point
pointAmount
.
ScalarMulFixedBase
(
cs
,
curve
.
BaseX
,
curve
.
BaseY
,
amount
,
curve
)
pointAmount
.
ScalarMulFixedBase
(
cs
,
curve
.
BaseX
,
curve
.
BaseY
,
amount
,
curve
)
var
pointH
bn254
.
PointAffine
var
pointH
twistededwards
.
Point
pointH
.
X
.
SetString
(
"9252662952969393856711468743327022054484546162727338092576697495684140272191"
)
pointH
.
X
=
shieldPointHX
pointH
.
Y
.
SetString
(
"8220002160263982499510761441032261960817037857915665984040705585999508400744"
)
pointH
.
Y
=
shieldPointHY
var
pointRandom
twistededwards
.
Point
var
pointRandom
twistededwards
.
Point
pointRandom
.
ScalarMul
FixedBase
(
cs
,
pointH
.
X
,
pointH
.
Y
,
amountRandom
,
curve
)
pointRandom
.
ScalarMul
NonFixedBase
(
cs
,
&
pointH
,
amountRandom
,
curve
)
var
pointSum
twistededwards
.
Point
var
pointSum
twistededwards
.
Point
pointSum
.
AddGeneric
(
cs
,
&
pointAmount
,
&
pointRandom
,
curve
)
pointSum
.
AddGeneric
(
cs
,
&
pointAmount
,
&
pointRandom
,
curve
)
...
...
plugin/dapp/mix/wallet/txauth.go
View file @
62f57dc9
...
@@ -86,7 +86,7 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction,
...
@@ -86,7 +86,7 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"asset exec=%s or symbol=%s not filled"
,
req
.
AssetExec
,
req
.
AssetSymbol
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"asset exec=%s or symbol=%s not filled"
,
req
.
AssetExec
,
req
.
AssetSymbol
)
}
}
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_AUTHORIZE
,
auth
.
ZkPath
,
mixTy
.
AuthPk
,
input
,
req
.
ZkProof
)
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_AUTHORIZE
,
auth
.
ZkPath
,
mixTy
.
AuthPk
,
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
auth
.
NoteHash
)
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
auth
.
NoteHash
)
}
}
...
...
plugin/dapp/mix/wallet/txdeposit.go
View file @
62f57dc9
...
@@ -126,7 +126,7 @@ func (p *mixPolicy) depositParams(exec, symbol, receiver, returner, auth, amount
...
@@ -126,7 +126,7 @@ func (p *mixPolicy) depositParams(exec, symbol, receiver, returner, auth, amount
}
}
func
(
p
*
mixPolicy
)
getDepositProof
(
exec
,
symbol
,
receiver
,
returner
,
auth
,
amount
,
zkPath
string
,
verifyOnChain
bool
,
proof
string
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
func
(
p
*
mixPolicy
)
getDepositProof
(
exec
,
symbol
,
receiver
,
returner
,
auth
,
amount
,
zkPath
string
,
verifyOnChain
bool
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
resp
,
err
:=
p
.
depositParams
(
exec
,
symbol
,
receiver
,
returner
,
auth
,
amount
)
resp
,
err
:=
p
.
depositParams
(
exec
,
symbol
,
receiver
,
returner
,
auth
,
amount
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -141,7 +141,7 @@ func (p *mixPolicy) getDepositProof(exec, symbol, receiver, returner, auth, amou
...
@@ -141,7 +141,7 @@ func (p *mixPolicy) getDepositProof(exec, symbol, receiver, returner, auth, amou
input
.
ReturnPubKey
.
Assign
(
resp
.
Proof
.
ReturnKey
)
input
.
ReturnPubKey
.
Assign
(
resp
.
Proof
.
ReturnKey
)
input
.
NoteRandom
.
Assign
(
resp
.
Proof
.
NoteRandom
)
input
.
NoteRandom
.
Assign
(
resp
.
Proof
.
NoteRandom
)
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_DEPOSIT
,
zkPath
,
mixTy
.
DepositPk
,
&
input
,
proof
)
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_DEPOSIT
,
zkPath
,
mixTy
.
DepositPk
,
&
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -199,7 +199,7 @@ func (p *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Transacti
...
@@ -199,7 +199,7 @@ func (p *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Transacti
var
proofs
[]
*
mixTy
.
ZkProofInfo
var
proofs
[]
*
mixTy
.
ZkProofInfo
for
i
,
rcv
:=
range
receivers
{
for
i
,
rcv
:=
range
receivers
{
p
,
err
:=
p
.
getDepositProof
(
req
.
AssetExec
,
req
.
AssetSymbol
,
rcv
,
deposit
.
Deposit
.
ReturnAddr
,
deposit
.
Deposit
.
AuthorizeAddr
,
amounts
[
i
],
deposit
.
ZkPath
,
req
.
VerifyOnChain
,
req
.
ZkProof
)
p
,
err
:=
p
.
getDepositProof
(
req
.
AssetExec
,
req
.
AssetSymbol
,
rcv
,
deposit
.
Deposit
.
ReturnAddr
,
deposit
.
Deposit
.
AuthorizeAddr
,
amounts
[
i
],
deposit
.
ZkPath
,
req
.
VerifyOnChain
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get Deposit proof for=%s"
,
rcv
)
return
nil
,
errors
.
Wrapf
(
err
,
"get Deposit proof for=%s"
,
rcv
)
}
}
...
...
plugin/dapp/mix/wallet/txtransfer.go
View file @
62f57dc9
...
@@ -5,7 +5,6 @@
...
@@ -5,7 +5,6 @@
package
wallet
package
wallet
import
(
import
(
"fmt"
"github.com/consensys/gnark/frontend"
"github.com/consensys/gnark/frontend"
"path/filepath"
"path/filepath"
...
@@ -96,7 +95,7 @@ func (p *mixPolicy) getTransferOutput(exec, symbol string, req *mixTy.DepositInf
...
@@ -96,7 +95,7 @@ func (p *mixPolicy) getTransferOutput(exec, symbol string, req *mixTy.DepositInf
}
}
//input = output+找零+交易费
//input = output+找零+交易费
func
getShieldValue
(
cfg
*
types
.
Chain33Config
,
inputAmounts
[]
uint64
,
outAmount
,
change
,
minTxFee
uint64
)
(
*
mixTy
.
ShieldAmountRst
,
error
)
{
func
getShieldValue
(
inputAmounts
[]
uint64
,
outAmount
,
change
,
minTxFee
uint64
,
pointHX
,
pointHY
string
)
(
*
mixTy
.
ShieldAmountRst
,
error
)
{
var
sum
uint64
var
sum
uint64
for
_
,
i
:=
range
inputAmounts
{
for
_
,
i
:=
range
inputAmounts
{
sum
+=
i
sum
+=
i
...
@@ -132,8 +131,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
...
@@ -132,8 +131,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
random
:=
v
.
String
()
random
:=
v
.
String
()
rChange
.
SetString
(
random
[
0
:
len
(
random
)
/
2
])
rChange
.
SetString
(
random
[
0
:
len
(
random
)
/
2
])
rOut
.
SetString
(
random
[
len
(
random
)
/
2
:
])
rOut
.
SetString
(
random
[
len
(
random
)
/
2
:
])
fmt
.
Println
(
"rOut"
,
rOut
.
String
())
fmt
.
Println
(
"rChange"
,
rChange
.
String
())
var
rSumIn
,
rSumOut
fr
.
Element
var
rSumIn
,
rSumOut
fr
.
Element
rSumIn
.
SetZero
()
rSumIn
.
SetZero
()
...
@@ -166,10 +163,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
...
@@ -166,10 +163,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"random sumIn=%s not equal sumOut=%s"
,
rSumIn
.
String
(),
rSumOut
.
String
())
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"random sumIn=%s not equal sumOut=%s"
,
rSumIn
.
String
(),
rSumOut
.
String
())
}
}
conf
:=
types
.
ConfSub
(
cfg
,
mixTy
.
MixX
)
pointHX
:=
conf
.
GStr
(
"pointHX"
)
pointHY
:=
conf
.
GStr
(
"pointHY"
)
var
inputHPoints
[]
*
twistededwards
.
PointAffine
var
inputHPoints
[]
*
twistededwards
.
PointAffine
for
_
,
i
:=
range
rInputs
{
for
_
,
i
:=
range
rInputs
{
inputHPoints
=
append
(
inputHPoints
,
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
i
.
String
()))
inputHPoints
=
append
(
inputHPoints
,
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
i
.
String
()))
...
@@ -177,9 +170,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
...
@@ -177,9 +170,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
//noteH := mixTy.MulCurvePointH(rNote.String())
//noteH := mixTy.MulCurvePointH(rNote.String())
outH
:=
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
rOut
.
String
())
outH
:=
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
rOut
.
String
())
changeH
:=
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
rChange
.
String
())
changeH
:=
mixTy
.
MulCurvePointH
(
pointHX
,
pointHY
,
rChange
.
String
())
//fmt.Println("change",changeRandom.String())
//fmt.Println("transfer",transRandom.String())
//fmt.Println("note",noteRandom.String())
sumPointH
:=
mixTy
.
GetCurveSum
(
inputHPoints
...
)
sumPointH
:=
mixTy
.
GetCurveSum
(
inputHPoints
...
)
if
!
mixTy
.
CheckSumEqual
(
sumPointH
,
outH
,
changeH
)
{
if
!
mixTy
.
CheckSumEqual
(
sumPointH
,
outH
,
changeH
)
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"random sum error"
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"random sum error"
)
...
@@ -203,7 +193,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
...
@@ -203,7 +193,6 @@ func getShieldValue(cfg *types.Chain33Config, inputAmounts []uint64, outAmount,
}
}
for
_
,
r
:=
range
rInputs
{
for
_
,
r
:=
range
rInputs
{
rst
.
InputRandoms
=
append
(
rst
.
InputRandoms
,
r
.
String
())
rst
.
InputRandoms
=
append
(
rst
.
InputRandoms
,
r
.
String
())
fmt
.
Println
(
"inputRandom"
,
r
.
String
())
}
}
for
_
,
p
:=
range
inputGPoints
{
for
_
,
p
:=
range
inputGPoints
{
rst
.
Inputs
=
append
(
rst
.
Inputs
,
&
mixTy
.
ShieldAmount
{
X
:
p
.
X
.
String
(),
Y
:
p
.
Y
.
String
()})
rst
.
Inputs
=
append
(
rst
.
Inputs
,
&
mixTy
.
ShieldAmount
{
X
:
p
.
X
.
String
(),
Y
:
p
.
Y
.
String
()})
...
@@ -295,8 +284,12 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -295,8 +284,12 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
}
}
bizlog
.
Info
(
"transferProof deposit to change succ"
)
bizlog
.
Info
(
"transferProof deposit to change succ"
)
conf
:=
types
.
ConfSub
(
p
.
walletOperate
.
GetAPI
()
.
GetConfig
(),
mixTy
.
MixX
)
pointHX
:=
conf
.
GStr
(
"pointHX"
)
pointHY
:=
conf
.
GStr
(
"pointHY"
)
//获取shieldValue 输入输出对amount隐藏
//获取shieldValue 输入输出对amount隐藏
shieldValue
,
err
:=
getShieldValue
(
p
.
walletOperate
.
GetAPI
()
.
GetConfig
(),
inputAmounts
,
outAmount
,
changeAmount
,
uint64
(
txFee
)
)
shieldValue
,
err
:=
getShieldValue
(
inputAmounts
,
outAmount
,
changeAmount
,
uint64
(
txFee
),
pointHX
,
pointHY
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -307,30 +300,27 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -307,30 +300,27 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
input
.
ShieldAmountX
.
Assign
(
shieldValue
.
Inputs
[
i
]
.
X
)
input
.
ShieldAmountX
.
Assign
(
shieldValue
.
Inputs
[
i
]
.
X
)
input
.
ShieldAmountY
.
Assign
(
shieldValue
.
Inputs
[
i
]
.
Y
)
input
.
ShieldAmountY
.
Assign
(
shieldValue
.
Inputs
[
i
]
.
Y
)
input
.
AmountRandom
.
Assign
(
shieldValue
.
InputRandoms
[
i
])
input
.
AmountRandom
.
Assign
(
shieldValue
.
InputRandoms
[
i
])
input
.
ShieldPointHX
.
Assign
(
pointHX
)
input
.
ShieldPointHY
.
Assign
(
pointHY
)
}
}
outPart
.
ShieldAmountX
.
Assign
(
shieldValue
.
Output
.
X
)
outPart
.
ShieldAmountX
.
Assign
(
shieldValue
.
Output
.
X
)
outPart
.
ShieldAmountY
.
Assign
(
shieldValue
.
Output
.
Y
)
outPart
.
ShieldAmountY
.
Assign
(
shieldValue
.
Output
.
Y
)
outPart
.
AmountRandom
.
Assign
(
shieldValue
.
OutputRandom
)
outPart
.
AmountRandom
.
Assign
(
shieldValue
.
OutputRandom
)
outPart
.
ShieldPointHX
.
Assign
(
pointHX
)
outPart
.
ShieldPointHY
.
Assign
(
pointHY
)
changePart
.
ShieldAmountX
.
Assign
(
shieldValue
.
Change
.
X
)
changePart
.
ShieldAmountX
.
Assign
(
shieldValue
.
Change
.
X
)
changePart
.
ShieldAmountY
.
Assign
(
shieldValue
.
Change
.
Y
)
changePart
.
ShieldAmountY
.
Assign
(
shieldValue
.
Change
.
Y
)
changePart
.
AmountRandom
.
Assign
(
shieldValue
.
ChangeRandom
)
changePart
.
AmountRandom
.
Assign
(
shieldValue
.
ChangeRandom
)
changePart
.
ShieldPointHX
.
Assign
(
pointHX
)
//输入的proof,CI测试目的,正常情况下为空,需输入pk路径
changePart
.
ShieldPointHY
.
Assign
(
pointHY
)
proofs
:=
make
([]
string
,
len
(
inputParts
)
+
2
)
if
len
(
req
.
ZkProof
)
>
0
{
proofs
=
strings
.
Split
(
req
.
ZkProof
,
"-"
)
if
len
(
proofs
)
!=
len
(
inputParts
)
+
2
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"wrong proof num=%d, inputs=%d"
,
len
(
proofs
),
len
(
inputParts
)
+
2
)
}
}
//verify input
//verify input
var
inputProofs
[]
*
mixTy
.
ZkProofInfo
var
inputProofs
[]
*
mixTy
.
ZkProofInfo
vkFile
:=
filepath
.
Join
(
transfer
.
ZkPath
,
mixTy
.
TransInputVk
)
vkFile
:=
filepath
.
Join
(
transfer
.
ZkPath
,
mixTy
.
TransInputVk
)
for
i
,
input
:=
range
inputParts
{
for
i
,
input
:=
range
inputParts
{
inputProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFERINPUT
,
transfer
.
ZkPath
,
mixTy
.
TransInputPk
,
input
,
proofs
[
i
]
)
inputProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFERINPUT
,
transfer
.
ZkPath
,
mixTy
.
TransInputPk
,
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verify.input getZkProofKeys,the i=%d"
,
i
)
return
nil
,
errors
.
Wrapf
(
err
,
"verify.input getZkProofKeys,the i=%d"
,
i
)
}
}
...
@@ -342,7 +332,7 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -342,7 +332,7 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
//verify output
//verify output
vkOutFile
:=
filepath
.
Join
(
transfer
.
ZkPath
,
mixTy
.
TransOutputVk
)
vkOutFile
:=
filepath
.
Join
(
transfer
.
ZkPath
,
mixTy
.
TransOutputVk
)
outputProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
ZkPath
,
mixTy
.
TransOutputPk
,
outPart
,
proofs
[
len
(
inputParts
)]
)
outputProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
ZkPath
,
mixTy
.
TransOutputPk
,
outPart
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"output getZkProofKeys"
)
return
nil
,
errors
.
Wrapf
(
err
,
"output getZkProofKeys"
)
}
}
...
@@ -352,7 +342,7 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -352,7 +342,7 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
outputProof
.
Secrets
=
outDHSecret
outputProof
.
Secrets
=
outDHSecret
//verify change
//verify change
changeProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
ZkPath
,
mixTy
.
TransOutputPk
,
changePart
,
proofs
[
len
(
inputParts
)
+
1
]
)
changeProof
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
ZkPath
,
mixTy
.
TransOutputPk
,
changePart
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"change getZkProofKeys"
)
return
nil
,
errors
.
Wrapf
(
err
,
"change getZkProofKeys"
)
}
}
...
...
plugin/dapp/mix/wallet/txwithdraw.go
View file @
62f57dc9
...
@@ -98,7 +98,7 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -98,7 +98,7 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
}
}
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_WITHDRAW
,
withdraw
.
ZkPath
,
mixTy
.
WithdrawPk
,
input
,
req
.
ZkProof
)
proofInfo
,
err
:=
getZkProofKeys
(
mixTy
.
VerifyType_WITHDRAW
,
withdraw
.
ZkPath
,
mixTy
.
WithdrawPk
,
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"getZkProofKeys note=%s"
,
note
)
}
}
...
...
plugin/dapp/mix/wallet/util.go
View file @
62f57dc9
...
@@ -212,59 +212,44 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
...
@@ -212,59 +212,44 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
tv
.
FieldByName
(
"Valid"
+
strconv
.
Itoa
(
i
))
.
Addr
()
.
Interface
()
.
(
*
frontend
.
Variable
)
.
Assign
(
"0"
)
tv
.
FieldByName
(
"Valid"
+
strconv
.
Itoa
(
i
))
.
Addr
()
.
Interface
()
.
(
*
frontend
.
Variable
)
.
Assign
(
"0"
)
}
}
}
}
func
getZkProofKeys
(
circuitTy
mixTy
.
VerifyType
,
path
,
file
string
,
inputs
frontend
.
Circuit
,
proof
string
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
func
getZkProofKeys
(
circuitTy
mixTy
.
VerifyType
,
path
,
file
string
,
inputs
frontend
.
Circuit
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
var
proofKey
bytes
.
Buffer
//从电路文件获取电路约束
circuit
,
err
:=
getCircuit
(
circuitTy
)
//是Pk file, 需要生成proof
if
err
!=
nil
{
if
len
(
proof
)
>
0
{
return
nil
,
err
//直接读proof
}
pkBuf
,
err
:=
mixTy
.
GetByteBuff
(
proof
)
//从pv 文件读取Pk结构
if
err
!=
nil
{
pkFile
:=
filepath
.
Join
(
path
,
file
)
return
nil
,
err
pkStr
,
err
:=
readZkKeyFile
(
pkFile
)
}
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"readZkKeyFile"
)
proofKey
.
Write
(
pkBuf
.
Bytes
())
}
pkBuf
,
err
:=
mixTy
.
GetByteBuff
(
pkStr
)
}
else
{
if
err
!=
nil
{
return
nil
,
err
//从电路文件获取电路约束
}
circuit
,
err
:=
getCircuit
(
circuitTy
)
if
err
!=
nil
{
return
nil
,
err
}
//从pv 文件读取Pk结构
pkFile
:=
filepath
.
Join
(
path
,
file
)
pkStr
,
err
:=
readZkKeyFile
(
pkFile
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"readZkKeyFile"
)
}
pkBuf
,
err
:=
mixTy
.
GetByteBuff
(
pkStr
)
if
err
!=
nil
{
return
nil
,
err
}
pk
:=
groth16
.
NewProvingKey
(
ecc
.
BN254
)
pk
:=
groth16
.
NewProvingKey
(
ecc
.
BN254
)
if
_
,
err
:=
pk
.
ReadFrom
(
pkBuf
);
err
!=
nil
{
if
_
,
err
:=
pk
.
ReadFrom
(
pkBuf
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"read pk"
)
return
nil
,
errors
.
Wrapf
(
err
,
"read pk"
)
}
}
//产生zk 证明
proof
,
err
:=
createProof
(
circuit
,
pk
,
inputs
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"create proof to %s"
,
pkFile
)
}
if
_
,
err
:=
proof
.
WriteRawTo
(
&
proofKey
);
err
!=
nil
{
//产生zk 证明
return
nil
,
errors
.
Wrapf
(
err
,
"write proof"
)
proof
,
err
:=
createProof
(
circuit
,
pk
,
inputs
)
}
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"create proof to %s"
,
pkFile
)
}
var
proofKey
bytes
.
Buffer
if
_
,
err
:=
proof
.
WriteRawTo
(
&
proofKey
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"write proof"
)
}
}
//
序列号成字符串
//
公开输入序列化
var
pubBuf
bytes
.
Buffer
var
pubBuf
bytes
.
Buffer
_
,
err
:
=
witness
.
WritePublicTo
(
&
pubBuf
,
ecc
.
BN254
,
inputs
)
_
,
err
=
witness
.
WritePublicTo
(
&
pubBuf
,
ecc
.
BN254
,
inputs
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"write public input"
)
return
nil
,
errors
.
Wrapf
(
err
,
"write public input"
)
}
}
...
...
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