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
b4a6fb77
Commit
b4a6fb77
authored
Feb 23, 2021
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
support deposit multi target
parent
b775d350
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
262 additions
and
188 deletions
+262
-188
mix.go
plugin/dapp/mix/commands/mix.go
+41
-48
authorize.go
plugin/dapp/mix/executor/authorize.go
+2
-2
deposit.go
plugin/dapp/mix/executor/deposit.go
+15
-11
transfer.go
plugin/dapp/mix/executor/transfer.go
+12
-6
withdraw.go
plugin/dapp/mix/executor/withdraw.go
+1
-1
mix.proto
plugin/dapp/mix/proto/mix.proto
+24
-19
mix.pb.go
plugin/dapp/mix/types/mix.pb.go
+0
-0
type.go
plugin/dapp/mix/types/type.go
+12
-0
exec.go
plugin/dapp/mix/wallet/exec.go
+32
-2
mix.go
plugin/dapp/mix/wallet/mix.go
+20
-17
mixbizdb.go
plugin/dapp/mix/wallet/mixbizdb.go
+18
-13
mixbizdb_test.go
plugin/dapp/mix/wallet/mixbizdb_test.go
+4
-4
txauth.go
plugin/dapp/mix/wallet/txauth.go
+2
-2
txdeposit.go
plugin/dapp/mix/wallet/txdeposit.go
+66
-34
txtransfer.go
plugin/dapp/mix/wallet/txtransfer.go
+0
-0
txwithdraw.go
plugin/dapp/mix/wallet/txwithdraw.go
+3
-2
util_test.go
plugin/dapp/mix/wallet/util_test.go
+10
-27
No files found.
plugin/dapp/mix/commands/mix.go
View file @
b4a6fb77
...
@@ -416,8 +416,8 @@ func createConfigPubKey(cmd *cobra.Command, args []string) {
...
@@ -416,8 +416,8 @@ func createConfigPubKey(cmd *cobra.Command, args []string) {
func
mixConfigPaymentPubKeyParaCmd
()
*
cobra
.
Command
{
func
mixConfigPaymentPubKeyParaCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"
pay
"
,
Use
:
"
register
"
,
Short
:
"
mix payment pub key config
cmd"
,
Short
:
"
receiver key register
cmd"
,
Run
:
createConfigPayPubKey
,
Run
:
createConfigPayPubKey
,
}
}
addPayPubKeyConfigFlags
(
cmd
)
addPayPubKeyConfigFlags
(
cmd
)
...
@@ -629,7 +629,7 @@ func showMixTxs(cmd *cobra.Command, args []string) {
...
@@ -629,7 +629,7 @@ func showMixTxs(cmd *cobra.Command, args []string) {
func
ShowPaymentPubKeyCmd
()
*
cobra
.
Command
{
func
ShowPaymentPubKeyCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"paykey"
,
Use
:
"paykey"
,
Short
:
"show
addr's payment pub
key info"
,
Short
:
"show
peer addr payment
key info"
,
Run
:
showPayment
,
Run
:
showPayment
,
}
}
addShowPaymentflags
(
cmd
)
addShowPaymentflags
(
cmd
)
...
@@ -637,7 +637,7 @@ func ShowPaymentPubKeyCmd() *cobra.Command {
...
@@ -637,7 +637,7 @@ func ShowPaymentPubKeyCmd() *cobra.Command {
}
}
func
addShowPaymentflags
(
cmd
*
cobra
.
Command
)
{
func
addShowPaymentflags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"addr"
,
"
s"
,
""
,
"mix tx hash
"
)
cmd
.
Flags
()
.
StringP
(
"addr"
,
"
a"
,
""
,
"account addr
"
)
cmd
.
MarkFlagRequired
(
"addr"
)
cmd
.
MarkFlagRequired
(
"addr"
)
}
}
...
@@ -677,7 +677,7 @@ func WalletCmd() *cobra.Command {
...
@@ -677,7 +677,7 @@ func WalletCmd() *cobra.Command {
func
ShowAccountPrivacyInfo
()
*
cobra
.
Command
{
func
ShowAccountPrivacyInfo
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"keys"
,
Use
:
"keys"
,
Short
:
"show account privacy keys"
,
Short
:
"show account
note
privacy keys"
,
Run
:
accountPrivacy
,
Run
:
accountPrivacy
,
}
}
accountPrivacyCmdFlags
(
cmd
)
accountPrivacyCmdFlags
(
cmd
)
...
@@ -685,17 +685,27 @@ func ShowAccountPrivacyInfo() *cobra.Command {
...
@@ -685,17 +685,27 @@ func ShowAccountPrivacyInfo() *cobra.Command {
}
}
func
accountPrivacyCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
accountPrivacyCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"account"
,
"a"
,
""
,
"accounts"
)
cmd
.
Flags
()
.
StringP
(
"addr"
,
"a"
,
""
,
"user wallet addr"
)
cmd
.
MarkFlagRequired
(
"account"
)
cmd
.
Flags
()
.
StringP
(
"priv"
,
"p"
,
""
,
"user wallet privacy key,option"
)
cmd
.
Flags
()
.
Uint32P
(
"detail"
,
"d"
,
0
,
"if get payment priv keys,option"
)
}
}
func
accountPrivacy
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
accountPrivacy
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
account
,
_
:=
cmd
.
Flags
()
.
GetString
(
"account"
)
priv
,
_
:=
cmd
.
Flags
()
.
GetString
(
"priv"
)
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"addr"
)
detail
,
_
:=
cmd
.
Flags
()
.
GetUint32
(
"detail"
)
if
len
(
priv
)
==
0
&&
len
(
addr
)
==
0
{
fmt
.
Println
(
"err: one of addr or priv should be fill"
)
return
}
var
res
mixTy
.
WalletAddrPrivacy
var
res
mixTy
.
WalletAddrPrivacy
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.ShowAccountPrivacyInfo"
,
&
types
.
ReqString
{
Data
:
account
},
&
res
)
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"mix.ShowAccountPrivacyInfo"
,
&
mixTy
.
PaymentKeysReq
{
PrivKey
:
priv
,
Addr
:
addr
,
Detail
:
int32
(
detail
)
},
&
res
)
ctx
.
Run
()
ctx
.
Run
()
}
}
...
@@ -1023,14 +1033,14 @@ func CreateDepositRawTxCmd() *cobra.Command {
...
@@ -1023,14 +1033,14 @@ func CreateDepositRawTxCmd() *cobra.Command {
}
}
func
depositSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
depositSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"
receiver"
,
"t"
,
""
,
"receiver addr
"
)
cmd
.
Flags
()
.
StringP
(
"
targets"
,
"t"
,
""
,
"target addrs,seperated by ','
"
)
cmd
.
MarkFlagRequired
(
"
receiver
"
)
cmd
.
MarkFlagRequired
(
"
targets
"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"r"
,
""
,
"return addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"return"
,
"r"
,
""
,
"return addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"authorize"
,
"a"
,
""
,
"authorize addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"authorize"
,
"a"
,
""
,
"authorize addr,optional"
)
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"m"
,
0
,
"amount
"
)
cmd
.
Flags
()
.
StringP
(
"amount"
,
"m"
,
""
,
"amounts,seperated by ','
"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
Flags
()
.
StringP
(
"token"
,
"s"
,
"BTY"
,
"asset token, default BTY"
)
cmd
.
Flags
()
.
StringP
(
"token"
,
"s"
,
"BTY"
,
"asset token, default BTY"
)
...
@@ -1044,33 +1054,30 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
...
@@ -1044,33 +1054,30 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
func
depositSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
depositSecret
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver
"
)
targets
,
_
:=
cmd
.
Flags
()
.
GetString
(
"targets
"
)
returnAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
returnAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"return"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
authorize
,
_
:=
cmd
.
Flags
()
.
GetString
(
"authorize"
)
amount
,
_
:=
cmd
.
Flags
()
.
Get
Uint64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
Get
String
(
"amount"
)
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
deposit
:=
&
mixTy
.
DepositInfo
{
deposit
:=
&
mixTy
.
DepositInfo
{
Addr
:
receiver
,
ReceiverAddrs
:
targets
,
ReturnAddr
:
returnAddr
,
ReturnAddr
:
returnAddr
,
AuthorizeAddr
:
authorize
,
AuthorizeAddr
:
authorize
,
Amount
:
amount
,
Amounts
:
amount
,
}
circuits
:=
&
mixTy
.
CircuitPathInfo
{
Path
:
path
,
}
}
tx
:=
&
mixTy
.
DepositTxReq
{
tx
:=
&
mixTy
.
DepositTxReq
{
Deposit
:
deposit
,
Deposit
:
deposit
,
ZkPath
:
circuits
,
ZkPath
:
path
,
}
}
params
:=
&
mixTy
.
CreateRawTxReq
{
params
:=
&
mixTy
.
CreateRawTxReq
{
ActionTy
:
mixTy
.
MixActionDeposit
,
ActionTy
:
mixTy
.
MixActionDeposit
,
Data
:
types
.
Encode
(
tx
),
Data
:
types
.
Encode
(
tx
),
//Value:&mixTy.CreateRawTxReq_Deposit{Deposit:tx},
AssetExec
:
assetExec
,
AssetExec
:
assetExec
,
AssetToken
:
token
,
AssetToken
:
token
,
Title
:
paraName
,
Title
:
paraName
,
...
@@ -1092,17 +1099,17 @@ func CreateTransferRawTxCmd() *cobra.Command {
...
@@ -1092,17 +1099,17 @@ func CreateTransferRawTxCmd() *cobra.Command {
}
}
func
transferSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
transferSecretCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"noteHash"
,
"n"
,
""
,
"note hash to spend"
)
cmd
.
Flags
()
.
StringP
(
"noteHash"
,
"n"
,
""
,
"note hash to spend
, seperate by ','
"
)
cmd
.
MarkFlagRequired
(
"noteHash"
)
cmd
.
MarkFlagRequired
(
"noteHash"
)
cmd
.
Flags
()
.
StringP
(
"toAddr"
,
"t"
,
""
,
"transfer to addr"
)
cmd
.
Flags
()
.
StringP
(
"toAddr"
,
"t"
,
""
,
"transfer to addr
, only one addr
"
)
cmd
.
MarkFlagRequired
(
"toAddr"
)
cmd
.
MarkFlagRequired
(
"toAddr"
)
cmd
.
Flags
()
.
StringP
(
"auth"
,
"a"
,
""
,
"transfer to auth addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"auth"
,
"a"
,
""
,
"transfer to auth addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"returner"
,
"r"
,
""
,
"transfer to returner addr,optional"
)
cmd
.
Flags
()
.
StringP
(
"returner"
,
"r"
,
""
,
"transfer to returner addr,optional"
)
cmd
.
Flags
()
.
Uint64P
(
"amount"
,
"m"
,
0
,
"transfer amount"
)
cmd
.
Flags
()
.
StringP
(
"amount"
,
"m"
,
""
,
"transfer amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
MarkFlagRequired
(
"amount"
)
cmd
.
Flags
()
.
StringP
(
"token"
,
"s"
,
"BTY"
,
"asset token, default BTY"
)
cmd
.
Flags
()
.
StringP
(
"token"
,
"s"
,
"BTY"
,
"asset token, default BTY"
)
...
@@ -1122,7 +1129,7 @@ func transferSecret(cmd *cobra.Command, args []string) {
...
@@ -1122,7 +1129,7 @@ func transferSecret(cmd *cobra.Command, args []string) {
toAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"toAddr"
)
toAddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"toAddr"
)
auth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"auth"
)
auth
,
_
:=
cmd
.
Flags
()
.
GetString
(
"auth"
)
returner
,
_
:=
cmd
.
Flags
()
.
GetString
(
"returner"
)
returner
,
_
:=
cmd
.
Flags
()
.
GetString
(
"returner"
)
amount
,
_
:=
cmd
.
Flags
()
.
Get
Uint64
(
"amount"
)
amount
,
_
:=
cmd
.
Flags
()
.
Get
String
(
"amount"
)
inpath
,
_
:=
cmd
.
Flags
()
.
GetString
(
"inpath"
)
inpath
,
_
:=
cmd
.
Flags
()
.
GetString
(
"inpath"
)
outpath
,
_
:=
cmd
.
Flags
()
.
GetString
(
"outpath"
)
outpath
,
_
:=
cmd
.
Flags
()
.
GetString
(
"outpath"
)
...
@@ -1130,27 +1137,21 @@ func transferSecret(cmd *cobra.Command, args []string) {
...
@@ -1130,27 +1137,21 @@ func transferSecret(cmd *cobra.Command, args []string) {
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
assetExec
,
_
:=
cmd
.
Flags
()
.
GetString
(
"exec"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
token
,
_
:=
cmd
.
Flags
()
.
GetString
(
"token"
)
inCircuits
:=
&
mixTy
.
CircuitPathInfo
{
Path
:
inpath
,
}
input
:=
&
mixTy
.
TransferInputTxReq
{
input
:=
&
mixTy
.
TransferInputTxReq
{
NoteHash
:
noteHash
,
NoteHash
s
:
noteHash
,
ZkPath
:
inCircuits
,
ZkPath
:
inpath
,
}
}
deposit
:=
&
mixTy
.
DepositInfo
{
deposit
:=
&
mixTy
.
DepositInfo
{
Addr
:
toAddr
,
ReceiverAddrs
:
toAddr
,
ReturnAddr
:
returner
,
ReturnAddr
:
returner
,
AuthorizeAddr
:
auth
,
AuthorizeAddr
:
auth
,
Amount
:
amount
,
Amounts
:
amount
,
}
outCircuits
:=
&
mixTy
.
CircuitPathInfo
{
Path
:
outpath
,
}
}
output
:=
&
mixTy
.
TransferOutputTxReq
{
output
:=
&
mixTy
.
TransferOutputTxReq
{
Deposit
:
deposit
,
Deposit
:
deposit
,
ZkPath
:
out
Circuits
,
ZkPath
:
out
path
,
}
}
req
:=
&
mixTy
.
TransferTxReq
{
req
:=
&
mixTy
.
TransferTxReq
{
...
@@ -1206,14 +1207,10 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
...
@@ -1206,14 +1207,10 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
circuits
:=
&
mixTy
.
CircuitPathInfo
{
Path
:
path
,
}
req
:=
&
mixTy
.
WithdrawTxReq
{
req
:=
&
mixTy
.
WithdrawTxReq
{
TotalAmount
:
amount
,
TotalAmount
:
amount
,
NoteHashs
:
noteHashs
,
NoteHashs
:
noteHashs
,
ZkPath
:
circuits
,
ZkPath
:
path
,
}
}
params
:=
&
mixTy
.
CreateRawTxReq
{
params
:=
&
mixTy
.
CreateRawTxReq
{
...
@@ -1265,14 +1262,10 @@ func authSecret(cmd *cobra.Command, args []string) {
...
@@ -1265,14 +1262,10 @@ func authSecret(cmd *cobra.Command, args []string) {
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
path
,
_
:=
cmd
.
Flags
()
.
GetString
(
"path"
)
circuits
:=
&
mixTy
.
CircuitPathInfo
{
Path
:
path
,
}
req
:=
&
mixTy
.
AuthTxReq
{
req
:=
&
mixTy
.
AuthTxReq
{
AuthorizeToAddr
:
toKey
,
AuthorizeToAddr
:
toKey
,
NoteHash
:
noteHash
,
NoteHash
:
noteHash
,
ZkPath
:
circuits
,
ZkPath
:
path
,
}
}
params
:=
&
mixTy
.
CreateRawTxReq
{
params
:=
&
mixTy
.
CreateRawTxReq
{
...
...
plugin/dapp/mix/executor/authorize.go
View file @
b4a6fb77
...
@@ -95,9 +95,9 @@ func (a *action) Authorize(authorize *mixTy.MixAuthorizeAction) (*types.Receipt,
...
@@ -95,9 +95,9 @@ func (a *action) Authorize(authorize *mixTy.MixAuthorizeAction) (*types.Receipt,
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
var
auths
,
authSpends
[]
string
var
auths
,
authSpends
[]
string
for
_
,
in
:=
range
inputs
{
for
_
,
in
:=
range
inputs
{
r
:=
makeReceipt
(
calcAuthorizeHashKey
(
in
.
AuthorizeHash
),
mixTy
.
TyLogAuthorizeSet
,
&
mixTy
.
ExistValue
{
Data
:
true
})
r
:=
makeReceipt
(
calcAuthorizeHashKey
(
in
.
AuthorizeHash
),
mixTy
.
TyLogAuthorizeSet
,
&
mixTy
.
ExistValue
{
Nullifier
:
in
.
AuthorizeHash
,
Exist
:
true
})
mergeReceipt
(
receipt
,
r
)
mergeReceipt
(
receipt
,
r
)
r
=
makeReceipt
(
calcAuthorizeSpendHashKey
(
in
.
AuthorizeSpendHash
),
mixTy
.
TyLogAuthorizeSpendSet
,
&
mixTy
.
ExistValue
{
Data
:
true
})
r
=
makeReceipt
(
calcAuthorizeSpendHashKey
(
in
.
AuthorizeSpendHash
),
mixTy
.
TyLogAuthorizeSpendSet
,
&
mixTy
.
ExistValue
{
Nullifier
:
in
.
AuthorizeSpendHash
,
Exist
:
true
})
mergeReceipt
(
receipt
,
r
)
mergeReceipt
(
receipt
,
r
)
auths
=
append
(
auths
,
in
.
AuthorizeHash
)
auths
=
append
(
auths
,
in
.
AuthorizeHash
)
authSpends
=
append
(
authSpends
,
in
.
AuthorizeSpendHash
)
authSpends
=
append
(
authSpends
,
in
.
AuthorizeSpendHash
)
...
...
plugin/dapp/mix/executor/deposit.go
View file @
b4a6fb77
...
@@ -83,15 +83,17 @@ func (a *action) depositVerify(proof *mixTy.ZkProofInfo) (string, uint64, error)
...
@@ -83,15 +83,17 @@ func (a *action) depositVerify(proof *mixTy.ZkProofInfo) (string, uint64, error)
4. add new commits to merkle tree
4. add new commits to merkle tree
*/
*/
func
(
a
*
action
)
Deposit
(
deposit
*
mixTy
.
MixDepositAction
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
Deposit
(
deposit
*
mixTy
.
MixDepositAction
)
(
*
types
.
Receipt
,
error
)
{
var
notes
[]
string
var
sum
uint64
//1. zk-proof校验
//1. zk-proof校验
noteHash
,
amount
,
err
:=
a
.
depositVerify
(
deposit
.
Proof
)
for
_
,
p
:=
range
deposit
.
Proofs
{
if
err
!=
nil
{
noteHash
,
amount
,
err
:=
a
.
depositVerify
(
p
)
return
nil
,
err
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verify fail for input=%s"
,
p
.
PublicInput
)
}
sum
+=
amount
notes
=
append
(
notes
,
noteHash
)
}
}
////校验存款额,目前只支持一次只存一张支票
//if val != deposit.Amount {
// return nil, errors.Wrapf(mixTy.ErrInputParaNotMatch, "deposit amount=%d not equal proof amount=%d", deposit.Amount, val)
//}
//存款
//存款
cfg
:=
a
.
api
.
GetConfig
()
cfg
:=
a
.
api
.
GetConfig
()
...
@@ -101,16 +103,18 @@ func (a *action) Deposit(deposit *mixTy.MixDepositAction) (*types.Receipt, error
...
@@ -101,16 +103,18 @@ func (a *action) Deposit(deposit *mixTy.MixDepositAction) (*types.Receipt, error
}
}
//主链上存入toAddr为mix 执行器地址,平行链上为user.p.{}.mix执行器地址,execAddr和toAddr一致
//主链上存入toAddr为mix 执行器地址,平行链上为user.p.{}.mix执行器地址,execAddr和toAddr一致
execAddr
:=
address
.
ExecAddress
(
string
(
a
.
tx
.
Execer
))
execAddr
:=
address
.
ExecAddress
(
string
(
a
.
tx
.
Execer
))
receipt
,
err
:=
accoutDb
.
ExecTransfer
(
a
.
fromaddr
,
execAddr
,
execAddr
,
int64
(
amount
))
receipt
,
err
:=
accoutDb
.
ExecTransfer
(
a
.
fromaddr
,
execAddr
,
execAddr
,
int64
(
sum
))
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"
ExecTransfer
"
)
return
nil
,
errors
.
Wrapf
(
err
,
"
account save to exec
"
)
}
}
//push new commit to merkle tree
//push new commit to merkle tree
var
leaves
[][]
byte
var
leaves
[][]
byte
leaves
=
append
(
leaves
,
transferFr2Bytes
(
noteHash
))
for
_
,
n
:=
range
notes
{
leaves
=
append
(
leaves
,
transferFr2Bytes
(
n
))
}
rpt
,
err
:=
pushTree
(
a
.
db
,
leaves
)
rpt
,
err
:=
pushTree
(
a
.
db
,
leaves
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
ors
.
Wrap
(
err
,
"pushTree"
)
}
}
mergeReceipt
(
receipt
,
rpt
)
mergeReceipt
(
receipt
,
rpt
)
...
...
plugin/dapp/mix/executor/transfer.go
View file @
b4a6fb77
...
@@ -111,17 +111,23 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
...
@@ -111,17 +111,23 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
var
inputs
[]
*
mixTy
.
TransferInputPublicInput
var
inputs
[]
*
mixTy
.
TransferInputPublicInput
var
outputs
[]
*
mixTy
.
TransferOutputPublicInput
var
outputs
[]
*
mixTy
.
TransferOutputPublicInput
in
,
err
:=
transferInputVerify
(
db
,
transfer
.
Input
)
//inputs
if
err
!=
nil
{
for
_
,
i
:=
range
transfer
.
Inputs
{
return
nil
,
nil
,
err
in
,
err
:=
transferInputVerify
(
db
,
i
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
inputs
=
append
(
inputs
,
in
)
}
}
inputs
=
append
(
inputs
,
in
)
//output
out
,
err
:=
transferOutputVerify
(
db
,
transfer
.
Output
)
out
,
err
:=
transferOutputVerify
(
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
,
err
:=
transferOutputVerify
(
db
,
transfer
.
Change
)
change
,
err
:=
transferOutputVerify
(
db
,
transfer
.
Change
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
nil
,
err
return
nil
,
nil
,
err
...
@@ -129,7 +135,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
...
@@ -129,7 +135,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
outputs
=
append
(
outputs
,
change
)
outputs
=
append
(
outputs
,
change
)
if
!
VerifyCommitValues
(
inputs
,
outputs
)
{
if
!
VerifyCommitValues
(
inputs
,
outputs
)
{
return
nil
,
nil
,
errors
.
Wrap
(
mixTy
.
ErrSpendInOutValueNotMatch
,
"verifyValue"
)
return
nil
,
nil
,
errors
.
Wrap
(
mixTy
.
ErrSpendInOutValueNotMatch
,
"verify
shield
Value"
)
}
}
return
inputs
,
outputs
,
nil
return
inputs
,
outputs
,
nil
...
@@ -148,7 +154,7 @@ func (a *action) Transfer(transfer *mixTy.MixTransferAction) (*types.Receipt, er
...
@@ -148,7 +154,7 @@ func (a *action) Transfer(transfer *mixTy.MixTransferAction) (*types.Receipt, er
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
for
_
,
k
:=
range
inputs
{
for
_
,
k
:=
range
inputs
{
r
:=
makeNullifierSetReceipt
(
k
.
NullifierHash
,
&
mixTy
.
ExistValue
{
Data
:
true
})
r
:=
makeNullifierSetReceipt
(
k
.
NullifierHash
,
&
mixTy
.
ExistValue
{
Nullifier
:
k
.
NullifierHash
,
Exist
:
true
})
mergeReceipt
(
receipt
,
r
)
mergeReceipt
(
receipt
,
r
)
}
}
...
...
plugin/dapp/mix/executor/withdraw.go
View file @
b4a6fb77
...
@@ -111,7 +111,7 @@ func (a *action) Withdraw(withdraw *mixTy.MixWithdrawAction) (*types.Receipt, er
...
@@ -111,7 +111,7 @@ func (a *action) Withdraw(withdraw *mixTy.MixWithdrawAction) (*types.Receipt, er
//set nullifier
//set nullifier
for
_
,
k
:=
range
nulliferSet
{
for
_
,
k
:=
range
nulliferSet
{
r
:=
makeNullifierSetReceipt
(
k
,
&
mixTy
.
ExistValue
{
Data
:
true
})
r
:=
makeNullifierSetReceipt
(
k
,
&
mixTy
.
ExistValue
{
Nullifier
:
k
,
Exist
:
true
})
mergeReceipt
(
receipt
,
r
)
mergeReceipt
(
receipt
,
r
)
}
}
return
receipt
,
nil
return
receipt
,
nil
...
...
plugin/dapp/mix/proto/mix.proto
View file @
b4a6fb77
...
@@ -84,12 +84,12 @@ message ZkProofInfo {
...
@@ -84,12 +84,12 @@ message ZkProofInfo {
}
}
message
MixDepositAction
{
message
MixDepositAction
{
ZkProofInfo
proof
=
1
;
repeated
ZkProofInfo
proofs
=
1
;
}
}
message
MixTransferAction
{
message
MixTransferAction
{
ZkProofInfo
input
=
1
;
repeated
ZkProofInfo
inputs
=
1
;
ZkProofInfo
output
=
2
;
ZkProofInfo
output
=
2
;
ZkProofInfo
change
=
3
;
ZkProofInfo
change
=
3
;
...
@@ -120,7 +120,6 @@ message MixAction {
...
@@ -120,7 +120,6 @@ message MixAction {
}
}
message
DepositPublicInput
{
message
DepositPublicInput
{
string
noteHash
=
1
;
string
noteHash
=
1
;
string
amount
=
2
;
string
amount
=
2
;
...
@@ -168,7 +167,8 @@ message VerifyProofInfo{
...
@@ -168,7 +167,8 @@ message VerifyProofInfo{
//nullifer 存在value
//nullifer 存在value
message
ExistValue
{
message
ExistValue
{
bool
data
=
1
;
string
nullifier
=
1
;
bool
exist
=
2
;
}
}
message
CommitTreeLeaves
{
message
CommitTreeLeaves
{
...
@@ -248,22 +248,21 @@ message DecryptSecretData{
...
@@ -248,22 +248,21 @@ message DecryptSecretData{
}
}
//path+filename, filename can take default
message
circuitPathInfo
{
string
path
=
1
;
}
//支持同时存入多个地址,多个地址具有相同的returnAddr和AuthorizeAddr,如果不同,则单个来存
message
DepositInfo
{
message
DepositInfo
{
string
addr
=
1
;
string
receiverAddrs
=
1
;
string
returnAddr
=
2
;
string
returnAddr
=
2
;
string
authorizeAddr
=
3
;
string
authorizeAddr
=
3
;
uint64
amount
=
4
;
string
amounts
=
4
;
}
}
//钱包生成deposit tx
//钱包生成deposit tx
message
DepositTxReq
{
message
DepositTxReq
{
DepositInfo
deposit
=
1
;
DepositInfo
deposit
=
1
;
circuitPathInfo
zkPath
=
2
;
string
zkPath
=
2
;
}
}
...
@@ -285,8 +284,8 @@ message TreePathProof{
...
@@ -285,8 +284,8 @@ message TreePathProof{
//可withdraw 多个note
//可withdraw 多个note
message
WithdrawTxReq
{
message
WithdrawTxReq
{
uint64
totalAmount
=
1
;
uint64
totalAmount
=
1
;
string
noteHashs
=
2
;
string
noteHashs
=
2
;
// seperate by ","
circuitPathInfo
zkPath
=
3
;
string
zkPath
=
3
;
}
}
...
@@ -306,7 +305,7 @@ message WithdrawProofRe{
...
@@ -306,7 +305,7 @@ message WithdrawProofRe{
message
AuthTxReq
{
message
AuthTxReq
{
string
noteHash
=
1
;
string
noteHash
=
1
;
string
authorizeToAddr
=
3
;
string
authorizeToAddr
=
3
;
circuitPathInfo
zkPath
=
4
;
string
zkPath
=
4
;
}
}
message
AuthProofRe
{
message
AuthProofRe
{
...
@@ -322,13 +321,13 @@ message AuthProofRe{
...
@@ -322,13 +321,13 @@ message AuthProofRe{
}
}
message
TransferInputTxReq
{
message
TransferInputTxReq
{
string
noteHash
=
1
;
string
noteHash
s
=
1
;
circuitPathInfo
zkPath
=
2
;
string
zkPath
=
2
;
}
}
message
TransferOutputTxReq
{
message
TransferOutputTxReq
{
DepositInfo
deposit
=
1
;
DepositInfo
deposit
=
1
;
circuitPathInfo
zkPath
=
2
;
string
zkPath
=
2
;
}
}
message
TransferTxReq
{
message
TransferTxReq
{
...
@@ -371,10 +370,10 @@ message TransferProofResp{
...
@@ -371,10 +370,10 @@ message TransferProofResp{
}
}
message
ShieldAmountRst
{
message
ShieldAmountRst
{
string
inputRandom
=
1
;
repeated
string
inputRandoms
=
1
;
string
outputRandom
=
2
;
string
outputRandom
=
2
;
string
changeRandom
=
3
;
string
changeRandom
=
3
;
ShieldAmount
input
=
4
;
repeated
ShieldAmount
inputs
=
4
;
ShieldAmount
output
=
5
;
ShieldAmount
output
=
5
;
ShieldAmount
change
=
6
;
ShieldAmount
change
=
6
;
...
@@ -390,6 +389,12 @@ message CreateRawTxReq{
...
@@ -390,6 +389,12 @@ message CreateRawTxReq{
}
}
message
PaymentKeysReq
{
string
privKey
=
1
;
//user wallet priv key
string
addr
=
2
;
//user addr
int32
detail
=
3
;
//获取私钥信息
}
enum
NoteStatus
{
enum
NoteStatus
{
UNDEF
=
0
;
UNDEF
=
0
;
VALID
=
1
;
//已授权可使用
VALID
=
1
;
//已授权可使用
...
...
plugin/dapp/mix/types/mix.pb.go
View file @
b4a6fb77
This diff is collapsed.
Click to expand it.
plugin/dapp/mix/types/type.go
View file @
b4a6fb77
...
@@ -74,6 +74,7 @@ func (p *MixType) GetLogMap() map[int64]*types.LogInfo {
...
@@ -74,6 +74,7 @@ func (p *MixType) GetLogMap() map[int64]*types.LogInfo {
TyLogCurrentCommitTreeLeaves
:
{
Ty
:
reflect
.
TypeOf
(
CommitTreeLeaves
{}),
Name
:
"LogCommitTreeLeaves"
},
TyLogCurrentCommitTreeLeaves
:
{
Ty
:
reflect
.
TypeOf
(
CommitTreeLeaves
{}),
Name
:
"LogCommitTreeLeaves"
},
TyLogCurrentCommitTreeRoots
:
{
Ty
:
reflect
.
TypeOf
(
CommitTreeRoots
{}),
Name
:
"LogCommitTreeRoots"
},
TyLogCurrentCommitTreeRoots
:
{
Ty
:
reflect
.
TypeOf
(
CommitTreeRoots
{}),
Name
:
"LogCommitTreeRoots"
},
TyLogMixConfigPaymentKey
:
{
Ty
:
reflect
.
TypeOf
(
PaymentKey
{}),
Name
:
"LogConfigReceivingKey"
},
TyLogMixConfigPaymentKey
:
{
Ty
:
reflect
.
TypeOf
(
PaymentKey
{}),
Name
:
"LogConfigReceivingKey"
},
TyLogNulliferSet
:
{
Ty
:
reflect
.
TypeOf
(
ExistValue
{}),
Name
:
"LogNullifierSet"
},
}
}
}
}
...
@@ -157,6 +158,17 @@ func MulCurvePointH(val string) *twistededwards.Point {
...
@@ -157,6 +158,17 @@ func MulCurvePointH(val string) *twistededwards.Point {
return
&
pointV
return
&
pointV
}
}
func
GetCurveSum
(
points
...*
twistededwards
.
Point
)
*
twistededwards
.
Point
{
//Add之前需初始化pointSum,不能空值,不然会等于0
pointSum
:=
twistededwards
.
NewPoint
(
points
[
0
]
.
X
,
points
[
0
]
.
Y
)
for
_
,
a
:=
range
points
[
1
:
]
{
pointSum
.
Add
(
&
pointSum
,
a
)
}
return
&
pointSum
}
//A=B+C
//A=B+C
func
CheckSumEqual
(
points
...*
twistededwards
.
Point
)
bool
{
func
CheckSumEqual
(
points
...*
twistededwards
.
Point
)
bool
{
if
len
(
points
)
<
2
{
if
len
(
points
)
<
2
{
...
...
plugin/dapp/mix/wallet/exec.go
View file @
b4a6fb77
...
@@ -5,12 +5,42 @@
...
@@ -5,12 +5,42 @@
package
wallet
package
wallet
import
(
import
(
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/types"
mixTy
"github.com/33cn/plugin/plugin/dapp/mix/types"
mixTy
"github.com/33cn/plugin/plugin/dapp/mix/types"
"github.com/pkg/errors"
)
)
func
(
policy
*
mixPolicy
)
On_ShowAccountPrivacyInfo
(
req
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
func
(
policy
*
mixPolicy
)
On_ShowAccountPrivacyInfo
(
req
*
mixTy
.
PaymentKeysReq
)
(
types
.
Message
,
error
)
{
return
policy
.
getAccountPrivacyKey
(
req
.
Data
)
if
len
(
req
.
Addr
)
==
0
&&
len
(
req
.
PrivKey
)
==
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"addr or privkey need be set"
)
}
//通过私钥获取
if
len
(
req
.
PrivKey
)
>
0
{
prikeybyte
,
err
:=
common
.
FromHex
(
req
.
PrivKey
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"privkey fromHex error,key=%s"
,
req
.
PrivKey
)
}
var
ret
mixTy
.
WalletAddrPrivacy
ret
.
Privacy
=
newPrivacyKey
(
prikeybyte
)
if
req
.
Detail
<=
0
{
ret
.
Privacy
.
EncryptKey
.
PrivKey
=
""
ret
.
Privacy
.
PaymentKey
.
SpendKey
=
""
}
return
&
ret
,
nil
}
//通过account 从钱包获取
keys
,
err
:=
policy
.
getAccountPrivacyKey
(
req
.
Addr
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get account =%s privacy key"
,
req
.
Addr
)
}
if
req
.
Detail
<=
0
{
keys
.
Privacy
.
EncryptKey
.
PrivKey
=
""
keys
.
Privacy
.
PaymentKey
.
SpendKey
=
""
}
return
keys
,
nil
}
}
func
(
policy
*
mixPolicy
)
On_ShowAccountNoteInfo
(
req
*
types
.
ReqAddrs
)
(
types
.
Message
,
error
)
{
func
(
policy
*
mixPolicy
)
On_ShowAccountNoteInfo
(
req
*
types
.
ReqAddrs
)
(
types
.
Message
,
error
)
{
...
...
plugin/dapp/mix/wallet/mix.go
View file @
b4a6fb77
...
@@ -22,21 +22,27 @@ import (
...
@@ -22,21 +22,27 @@ import (
const
CECBLOCKSIZE
=
32
const
CECBLOCKSIZE
=
32
// newPrivacyWithPrivKey create privacy from private key
/*
//payment, payPrivKey=hash(privkey), payPubkey=hash(payPrivKey)
从secp256k1根私钥创建支票需要的私钥和公钥
//DH crypt key, prikey=payPrikey, pubKey=payPrikey*G
payPrivKey = rootPrivKey *G_X25519 这样很难泄露rootPrivKey
func
newPrivacyKey
(
privKey
[]
byte
)
(
*
mixTy
.
AccountPrivacyKey
,
error
)
{
payPrivacyKey
:=
mimcHashByte
([][]
byte
{
privKey
})
支票收款key: ReceiveKey= hash(payPrivKey) --或者*G的X坐标值, 看哪个电路少?
DH加解密key: encryptPubKey= payPrivKey *G_X25519, 也是很安全的,只是电路里面目前不支持x25519
*/
func
newPrivacyKey
(
rootPrivKey
[]
byte
)
*
mixTy
.
AccountPrivacyKey
{
ecdh
:=
X25519
()
key
:=
ecdh
.
PublicKey
(
rootPrivKey
)
payPrivKey
:=
key
.
([
32
]
byte
)
//payPrivKey := mimcHashByte([][]byte{rootPrivKey})
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
.
SpendKey
=
mixTy
.
Byte2Str
(
payPriv
acyKey
)
paymentKey
.
SpendKey
=
mixTy
.
Byte2Str
(
payPriv
Key
[
:
]
)
paymentKey
.
ReceiveKey
=
mixTy
.
Byte2Str
(
mimcHashByte
([][]
byte
{
payPriv
acyKey
}))
paymentKey
.
ReceiveKey
=
mixTy
.
Byte2Str
(
mimcHashByte
([][]
byte
{
payPriv
Key
[
:
]
}))
encryptKeyPair
:=
&
mixTy
.
EncryptKeyPair
{}
encryptKeyPair
:=
&
mixTy
.
EncryptKeyPair
{}
//ecdh := NewCurveBn256ECDH()
pubkey
:=
ecdh
.
PublicKey
(
payPrivKey
)
ecdh
:=
X25519
()
//需要Hex编码,不要使用fr.string, 模范围不同
pubkey
:=
ecdh
.
PublicKey
(
payPrivacyKey
)
encryptKeyPair
.
PrivKey
=
hex
.
EncodeToString
(
payPrivKey
[
:
])
//需要Hex编码,而不腻使用fr.string, 模范围不同
encryptKeyPair
.
PrivKey
=
hex
.
EncodeToString
(
payPrivacyKey
)
pubData
:=
pubkey
.
([
32
]
byte
)
pubData
:=
pubkey
.
([
32
]
byte
)
encryptKeyPair
.
PubKey
=
hex
.
EncodeToString
(
pubData
[
:
])
encryptKeyPair
.
PubKey
=
hex
.
EncodeToString
(
pubData
[
:
])
...
@@ -44,7 +50,7 @@ func newPrivacyKey(privKey []byte) (*mixTy.AccountPrivacyKey, error) {
...
@@ -44,7 +50,7 @@ func newPrivacyKey(privKey []byte) (*mixTy.AccountPrivacyKey, error) {
privacy
.
PaymentKey
=
paymentKey
privacy
.
PaymentKey
=
paymentKey
privacy
.
EncryptKey
=
encryptKeyPair
privacy
.
EncryptKey
=
encryptKeyPair
return
privacy
,
nil
return
privacy
}
}
//CEC加密需要保证明文是秘钥的倍数,如果不是,则需要填充明文,在解密时候把填充物去掉
//CEC加密需要保证明文是秘钥的倍数,如果不是,则需要填充明文,在解密时候把填充物去掉
...
@@ -201,10 +207,7 @@ func (policy *mixPolicy) savePrivacyPair(addr string) (*mixTy.WalletAddrPrivacy,
...
@@ -201,10 +207,7 @@ func (policy *mixPolicy) savePrivacyPair(addr string) (*mixTy.WalletAddrPrivacy,
}
}
bizlog
.
Info
(
"savePrivacyPair"
,
"pri"
,
common
.
ToHex
(
priv
.
Bytes
()),
"addr"
,
addr
)
bizlog
.
Info
(
"savePrivacyPair"
,
"pri"
,
common
.
ToHex
(
priv
.
Bytes
()),
"addr"
,
addr
)
newPrivacy
,
err
:=
newPrivacyKey
(
priv
.
Bytes
())
newPrivacy
:=
newPrivacyKey
(
priv
.
Bytes
())
if
err
!=
nil
{
return
nil
,
err
}
password
:=
[]
byte
(
policy
.
getWalletOperate
()
.
GetPassword
())
password
:=
[]
byte
(
policy
.
getWalletOperate
()
.
GetPassword
())
encryptered
:=
encryptDataWithPadding
(
password
,
types
.
Encode
(
newPrivacy
))
encryptered
:=
encryptDataWithPadding
(
password
,
types
.
Encode
(
newPrivacy
))
...
...
plugin/dapp/mix/wallet/mixbizdb.go
View file @
b4a6fb77
...
@@ -91,28 +91,33 @@ func (p *mixPolicy) processMixTx(tx *types.Transaction, height, index int64) (*t
...
@@ -91,28 +91,33 @@ func (p *mixPolicy) processMixTx(tx *types.Transaction, height, index int64) (*t
}
}
func
(
p
*
mixPolicy
)
processDeposit
(
deposit
*
mixTy
.
MixDepositAction
,
heightIndex
string
,
table
*
table
.
Table
)
{
func
(
p
*
mixPolicy
)
processDeposit
(
deposit
*
mixTy
.
MixDepositAction
,
heightIndex
string
,
table
*
table
.
Table
)
{
data
,
err
:=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_DEPOSIT
,
deposit
.
Proof
.
PublicInput
)
for
_
,
proof
:=
range
deposit
.
Proofs
{
if
err
!=
nil
{
data
,
err
:=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_DEPOSIT
,
proof
.
PublicInput
)
bizlog
.
Error
(
"processDeposit decode"
,
"pubInput"
,
deposit
.
Proof
.
PublicInput
)
if
err
!=
nil
{
return
bizlog
.
Error
(
"processDeposit decode"
,
"pubInput"
,
proof
.
PublicInput
)
return
}
input
:=
data
.
(
*
mixTy
.
DepositPublicInput
)
p
.
processSecretGroup
(
input
.
NoteHash
,
proof
.
Secrets
,
heightIndex
,
table
)
}
}
input
:=
data
.
(
*
mixTy
.
DepositPublicInput
)
p
.
processSecretGroup
(
input
.
NoteHash
,
deposit
.
Proof
.
Secrets
,
heightIndex
,
table
)
}
}
func
(
p
*
mixPolicy
)
processTransfer
(
transfer
*
mixTy
.
MixTransferAction
,
heightIndex
string
,
table
*
table
.
Table
)
{
func
(
p
*
mixPolicy
)
processTransfer
(
transfer
*
mixTy
.
MixTransferAction
,
heightIndex
string
,
table
*
table
.
Table
)
{
var
nulls
[]
string
var
nulls
[]
string
data
,
err
:=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_TRANSFERINPUT
,
transfer
.
Input
.
PublicInput
)
for
_
,
in
:=
range
transfer
.
Inputs
{
if
err
!=
nil
{
data
,
err
:=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_TRANSFERINPUT
,
in
.
PublicInput
)
bizlog
.
Error
(
"processTransfer.input decode"
,
"pubInput"
,
transfer
.
Input
.
PublicInput
)
if
err
!=
nil
{
return
bizlog
.
Error
(
"processTransfer.input decode"
,
"pubInput"
,
in
.
PublicInput
)
return
}
input
:=
data
.
(
*
mixTy
.
TransferInputPublicInput
)
nulls
=
append
(
nulls
,
input
.
NullifierHash
)
}
}
input
:=
data
.
(
*
mixTy
.
TransferInputPublicInput
)
nulls
=
append
(
nulls
,
input
.
NullifierHash
)
p
.
processNullifiers
(
nulls
,
table
)
p
.
processNullifiers
(
nulls
,
table
)
//out
//out
data
,
err
=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
Output
.
PublicInput
)
data
,
err
:
=
mixTy
.
DecodePubInput
(
mixTy
.
VerifyType_TRANSFEROUTPUT
,
transfer
.
Output
.
PublicInput
)
if
err
!=
nil
{
if
err
!=
nil
{
bizlog
.
Error
(
"processTransfer.output decode"
,
"pubInput"
,
transfer
.
Output
.
PublicInput
)
bizlog
.
Error
(
"processTransfer.output decode"
,
"pubInput"
,
transfer
.
Output
.
PublicInput
)
return
return
...
...
plugin/dapp/mix/wallet/mixbizdb_test.go
View file @
b4a6fb77
...
@@ -16,8 +16,8 @@ func TestNewPrivacyWithPrivKey(t *testing.T) {
...
@@ -16,8 +16,8 @@ func TestNewPrivacyWithPrivKey(t *testing.T) {
keyByte
,
err
:=
hex
.
DecodeString
(
prikey
)
keyByte
,
err
:=
hex
.
DecodeString
(
prikey
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
nil
,
err
)
pairs
,
err
:=
newPrivacyKey
(
keyByte
)
pairs
:=
newPrivacyKey
(
keyByte
)
assert
.
Equal
(
t
,
nil
,
err
)
t
.
Log
(
"payPri"
,
pairs
.
PaymentKey
.
SpendKey
,
"payPub"
,
pairs
.
PaymentKey
.
ReceiveKey
)
t
.
Log
(
"payPri"
,
pairs
.
PaymentKey
.
SpendKey
,
"payPub"
,
pairs
.
PaymentKey
.
ReceiveKey
)
t
.
Log
(
"crytoPub"
,
pairs
.
EncryptKey
.
PubKey
,
"crytoPri"
,
pairs
.
EncryptKey
.
PrivKey
)
t
.
Log
(
"crytoPub"
,
pairs
.
EncryptKey
.
PubKey
,
"crytoPri"
,
pairs
.
EncryptKey
.
PrivKey
)
...
@@ -87,8 +87,8 @@ func TestEncodeSecretData(t *testing.T) {
...
@@ -87,8 +87,8 @@ func TestEncodeSecretData(t *testing.T) {
prikey
:=
"4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01"
prikey
:=
"4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01"
keyByte
,
err
:=
hex
.
DecodeString
(
prikey
)
keyByte
,
err
:=
hex
.
DecodeString
(
prikey
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
nil
,
err
)
privacy
,
err
:=
newPrivacyKey
(
keyByte
)
privacy
:=
newPrivacyKey
(
keyByte
)
assert
.
Equal
(
t
,
nil
,
err
)
ret
:=
types
.
Encode
(
secret
)
ret
:=
types
.
Encode
(
secret
)
hexRet
:=
hex
.
EncodeToString
(
ret
)
hexRet
:=
hex
.
EncodeToString
(
ret
)
//assert.Nil(t,err)
//assert.Nil(t,err)
...
...
plugin/dapp/mix/wallet/txauth.go
View file @
b4a6fb77
...
@@ -132,12 +132,12 @@ func (policy *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transac
...
@@ -132,12 +132,12 @@ func (policy *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transac
return
nil
,
err
return
nil
,
err
}
}
proofInfo
,
err
:=
getZkProofKeys
(
auth
.
ZkPath
.
Path
+
mixTy
.
AuthCircuit
,
auth
.
ZkPath
.
Path
+
mixTy
.
AuthPk
,
*
input
)
proofInfo
,
err
:=
getZkProofKeys
(
auth
.
ZkPath
+
mixTy
.
AuthCircuit
,
auth
.
Zk
Path
+
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
)
}
}
//verify
//verify
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_AUTHORIZE
,
proofInfo
,
auth
.
ZkPath
.
Path
+
mixTy
.
AuthVk
);
err
!=
nil
{
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_AUTHORIZE
,
proofInfo
,
auth
.
ZkPath
+
mixTy
.
AuthVk
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
auth
.
NoteHash
)
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
auth
.
NoteHash
)
}
}
...
...
plugin/dapp/mix/wallet/txdeposit.go
View file @
b4a6fb77
...
@@ -6,8 +6,8 @@ package wallet
...
@@ -6,8 +6,8 @@ package wallet
import
(
import
(
"encoding/hex"
"encoding/hex"
"fmt"
"strconv"
"strconv"
"strings"
"strings"
"github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/common/address"
...
@@ -32,38 +32,42 @@ type DepositInput struct {
...
@@ -32,38 +32,42 @@ type DepositInput struct {
NoteRandom
string
`tag:"secret"`
NoteRandom
string
`tag:"secret"`
}
}
func
(
policy
*
mixPolicy
)
depositParams
(
re
q
*
mixTy
.
DepositInfo
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
func
(
policy
*
mixPolicy
)
depositParams
(
re
ceiver
,
returner
,
auth
,
amount
string
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
if
req
==
nil
||
len
(
req
.
Add
r
)
<=
0
{
if
len
(
receive
r
)
<=
0
{
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"
paymentAdd
r is nil"
)
return
nil
,
errors
.
Wrap
(
types
.
ErrInvalidParam
,
"
receive
r is nil"
)
}
}
if
req
.
Amount
<=
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"deposit amount=%d need big than 0"
,
req
.
Amount
)
_
,
e
:=
strconv
.
ParseUint
(
amount
,
0
,
0
)
if
e
!=
nil
{
return
nil
,
errors
.
Wrapf
(
e
,
"deposit amount=%s"
,
amount
)
}
}
var
secret
mixTy
.
SecretData
var
secret
mixTy
.
SecretData
secret
.
Amount
=
strconv
.
FormatUint
(
req
.
Amount
,
10
)
secret
.
Amount
=
amount
//1. nullifier 获取随机值
//1. nullifier 获取随机值
var
fr
fr_bn256
.
Element
var
fr
fr_bn256
.
Element
fr
.
SetRandom
()
fr
.
SetRandom
()
secret
.
NoteRandom
=
fr
.
String
()
secret
.
NoteRandom
=
fr
.
String
()
//TODO 线上检查是否随机值在nullifer里面
// 获取receiving addr对应的paymentKey
// 获取receiving addr对应的paymentKey
toKey
,
e
:=
policy
.
getPaymentKey
(
req
.
Add
r
)
payKeys
,
e
:=
policy
.
getPaymentKey
(
receive
r
)
if
e
!=
nil
{
if
e
!=
nil
{
return
nil
,
errors
.
Wrapf
(
e
,
"get payment key for addr = %s"
,
re
q
.
Add
r
)
return
nil
,
errors
.
Wrapf
(
e
,
"get payment key for addr = %s"
,
re
ceive
r
)
}
}
secret
.
ReceiverKey
=
toKey
.
ReceiverKey
secret
.
ReceiverKey
=
payKeys
.
ReceiverKey
//获取return addr对应的key
//获取return addr对应的key
var
returnKey
*
mixTy
.
PaymentKey
var
returnKey
*
mixTy
.
PaymentKey
var
err
error
var
err
error
//如果Input不填,缺省空为“0”字符串
//如果Input不填,缺省空为“0”字符串
secret
.
ReturnKey
=
"0"
secret
.
ReturnKey
=
"0"
if
len
(
re
q
.
ReturnAdd
r
)
>
0
{
if
len
(
re
turne
r
)
>
0
{
returnKey
,
err
=
policy
.
getPaymentKey
(
re
q
.
ReturnAdd
r
)
returnKey
,
err
=
policy
.
getPaymentKey
(
re
turne
r
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for return addr = %s"
,
re
q
.
ReturnAdd
r
)
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for return addr = %s"
,
re
turne
r
)
}
}
secret
.
ReturnKey
=
returnKey
.
ReceiverKey
secret
.
ReturnKey
=
returnKey
.
ReceiverKey
}
}
...
@@ -71,10 +75,10 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
...
@@ -71,10 +75,10 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
//获取auth addr对应的key
//获取auth addr对应的key
var
authKey
*
mixTy
.
PaymentKey
var
authKey
*
mixTy
.
PaymentKey
secret
.
AuthorizeKey
=
"0"
secret
.
AuthorizeKey
=
"0"
if
len
(
req
.
AuthorizeAddr
)
>
0
{
if
len
(
auth
)
>
0
{
authKey
,
err
=
policy
.
getPaymentKey
(
req
.
AuthorizeAddr
)
authKey
,
err
=
policy
.
getPaymentKey
(
auth
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for authorize addr = %s"
,
req
.
AuthorizeAddr
)
return
nil
,
errors
.
Wrapf
(
err
,
"get payment key for authorize addr = %s"
,
auth
)
}
}
secret
.
AuthorizeKey
=
authKey
.
ReceiverKey
secret
.
AuthorizeKey
=
authKey
.
ReceiverKey
}
}
...
@@ -83,22 +87,22 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
...
@@ -83,22 +87,22 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
data
:=
types
.
Encode
(
&
secret
)
data
:=
types
.
Encode
(
&
secret
)
var
group
mixTy
.
DHSecretGroup
var
group
mixTy
.
DHSecretGroup
secretData
,
err
:=
encryptData
(
toKey
.
EncryptKey
,
data
)
secretData
,
err
:=
encryptData
(
payKeys
.
EncryptKey
,
data
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
re
q
.
Add
r
)
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
re
ceive
r
)
}
}
group
.
Receiver
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
group
.
Receiver
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
if
returnKey
!=
nil
{
if
returnKey
!=
nil
{
secretData
,
err
=
encryptData
(
returnKey
.
EncryptKey
,
data
)
secretData
,
err
=
encryptData
(
returnKey
.
EncryptKey
,
data
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
re
q
.
ReturnAdd
r
)
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
re
turne
r
)
}
}
group
.
Returner
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
group
.
Returner
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
}
}
if
authKey
!=
nil
{
if
authKey
!=
nil
{
secretData
,
err
=
encryptData
(
authKey
.
EncryptKey
,
data
)
secretData
,
err
=
encryptData
(
authKey
.
EncryptKey
,
data
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
req
.
AuthorizeAddr
)
return
nil
,
errors
.
Wrapf
(
err
,
"encryptData to addr = %s"
,
auth
)
}
}
group
.
Authorize
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
group
.
Authorize
=
hex
.
EncodeToString
(
types
.
Encode
(
secretData
))
}
}
...
@@ -119,14 +123,9 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
...
@@ -119,14 +123,9 @@ func (policy *mixPolicy) depositParams(req *mixTy.DepositInfo) (*mixTy.DepositPr
}
}
func
(
policy
*
mixPolicy
)
createDepositTx
(
req
*
mixTy
.
CreateRawTxReq
)
(
*
types
.
Transaction
,
error
)
{
func
(
policy
*
mixPolicy
)
getDepositProof
(
receiver
,
returner
,
auth
,
amount
,
zkPath
string
)
(
*
mixTy
.
ZkProofInfo
,
error
)
{
var
deposit
mixTy
.
DepositTxReq
err
:=
types
.
Decode
(
req
.
Data
,
&
deposit
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"decode req fail"
)
}
resp
,
err
:=
policy
.
depositParams
(
deposit
.
Deposi
t
)
resp
,
err
:=
policy
.
depositParams
(
receiver
,
returner
,
auth
,
amoun
t
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -139,24 +138,57 @@ func (policy *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Tran
...
@@ -139,24 +138,57 @@ func (policy *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Tran
input
.
ReturnPubKey
=
resp
.
Proof
.
ReturnKey
input
.
ReturnPubKey
=
resp
.
Proof
.
ReturnKey
input
.
NoteRandom
=
resp
.
Proof
.
NoteRandom
input
.
NoteRandom
=
resp
.
Proof
.
NoteRandom
proofInfo
,
err
:=
getZkProofKeys
(
deposit
.
ZkPath
.
Path
+
mixTy
.
DepositCircuit
,
deposit
.
ZkPath
.
Path
+
mixTy
.
DepositPk
,
input
)
proofInfo
,
err
:=
getZkProofKeys
(
zkPath
+
mixTy
.
DepositCircuit
,
zk
Path
+
mixTy
.
DepositPk
,
input
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
//线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本
//线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_DEPOSIT
,
proofInfo
,
deposit
.
ZkPath
.
Path
+
mixTy
.
DepositVk
);
err
!=
nil
{
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_DEPOSIT
,
proofInfo
,
zk
Path
+
mixTy
.
DepositVk
);
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"verifyProof fail"
)
return
nil
,
errors
.
Wrap
(
err
,
"verifyProof fail"
)
}
}
fmt
.
Println
(
"createDepositTx ok"
)
proofInfo
.
Secrets
=
resp
.
Secrets
proofInfo
.
Secrets
=
resp
.
Secrets
return
policy
.
getDepositTx
(
strings
.
TrimSpace
(
req
.
Title
+
mixTy
.
MixX
),
proofInfo
)
return
proofInfo
,
nil
}
func
(
policy
*
mixPolicy
)
createDepositTx
(
req
*
mixTy
.
CreateRawTxReq
)
(
*
types
.
Transaction
,
error
)
{
var
deposit
mixTy
.
DepositTxReq
err
:=
types
.
Decode
(
req
.
Data
,
&
deposit
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"decode req fail"
)
}
if
deposit
.
Deposit
==
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"decode deposit fail"
)
}
if
len
(
deposit
.
ZkPath
)
==
0
{
deposit
.
ZkPath
=
"./"
}
//多个receiver
receivers
:=
strings
.
Split
(
deposit
.
Deposit
.
ReceiverAddrs
,
","
)
amounts
:=
strings
.
Split
(
deposit
.
Deposit
.
Amounts
,
","
)
if
len
(
receivers
)
!=
len
(
amounts
)
||
len
(
receivers
)
==
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"not match receivers=%s and amounts=%s"
,
deposit
.
Deposit
.
ReceiverAddrs
,
deposit
.
Deposit
.
Amounts
)
}
var
proofs
[]
*
mixTy
.
ZkProofInfo
for
i
,
rcv
:=
range
receivers
{
p
,
err
:=
policy
.
getDepositProof
(
rcv
,
deposit
.
Deposit
.
ReturnAddr
,
deposit
.
Deposit
.
AuthorizeAddr
,
amounts
[
i
],
deposit
.
ZkPath
)
if
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"get Deposit proof for=%s"
,
rcv
)
}
proofs
=
append
(
proofs
,
p
)
}
return
policy
.
getDepositTx
(
strings
.
TrimSpace
(
req
.
Title
+
mixTy
.
MixX
),
proofs
)
}
}
func
(
policy
*
mixPolicy
)
getDepositTx
(
execName
string
,
proof
*
mixTy
.
ZkProofInfo
)
(
*
types
.
Transaction
,
error
)
{
func
(
policy
*
mixPolicy
)
getDepositTx
(
execName
string
,
proof
s
[]
*
mixTy
.
ZkProofInfo
)
(
*
types
.
Transaction
,
error
)
{
payload
:=
&
mixTy
.
MixDepositAction
{}
payload
:=
&
mixTy
.
MixDepositAction
{}
payload
.
Proof
=
proof
payload
.
Proof
s
=
proofs
cfg
:=
policy
.
getWalletOperate
()
.
GetAPI
()
.
GetConfig
()
cfg
:=
policy
.
getWalletOperate
()
.
GetAPI
()
.
GetConfig
()
action
:=
&
mixTy
.
MixAction
{
action
:=
&
mixTy
.
MixAction
{
...
@@ -170,6 +202,6 @@ func (policy *mixPolicy) getDepositTx(execName string, proof *mixTy.ZkProofInfo)
...
@@ -170,6 +202,6 @@ func (policy *mixPolicy) getDepositTx(execName string, proof *mixTy.ZkProofInfo)
To
:
address
.
ExecAddress
(
execName
),
To
:
address
.
ExecAddress
(
execName
),
Expire
:
types
.
Now
()
.
Unix
()
+
int64
(
300
),
//5 min
Expire
:
types
.
Now
()
.
Unix
()
+
int64
(
300
),
//5 min
}
}
fmt
.
Println
(
"createDepositTx tx"
)
return
types
.
FormatTx
(
cfg
,
execName
,
tx
)
return
types
.
FormatTx
(
cfg
,
execName
,
tx
)
}
}
plugin/dapp/mix/wallet/txtransfer.go
View file @
b4a6fb77
This diff is collapsed.
Click to expand it.
plugin/dapp/mix/wallet/txwithdraw.go
View file @
b4a6fb77
...
@@ -136,12 +136,12 @@ func (policy *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Tra
...
@@ -136,12 +136,12 @@ func (policy *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Tra
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"getWithdrawParams note=%s"
,
note
)
}
}
proofInfo
,
err
:=
getZkProofKeys
(
withdraw
.
ZkPath
.
Path
+
mixTy
.
WithdrawCircuit
,
withdraw
.
ZkPath
.
Path
+
mixTy
.
WithdrawPk
,
*
input
)
proofInfo
,
err
:=
getZkProofKeys
(
withdraw
.
ZkPath
+
mixTy
.
WithdrawCircuit
,
withdraw
.
Zk
Path
+
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
)
}
}
//verify
//verify
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_WITHDRAW
,
proofInfo
,
withdraw
.
ZkPath
.
Path
+
mixTy
.
WithdrawVk
);
err
!=
nil
{
if
err
:=
policy
.
verifyProofOnChain
(
mixTy
.
VerifyType_WITHDRAW
,
proofInfo
,
withdraw
.
ZkPath
+
mixTy
.
WithdrawVk
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
note
)
return
nil
,
errors
.
Wrapf
(
err
,
"verifyProof fail for note=%s"
,
note
)
}
}
...
@@ -153,6 +153,7 @@ func (policy *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Tra
...
@@ -153,6 +153,7 @@ func (policy *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Tra
proofs
=
append
(
proofs
,
proofInfo
)
proofs
=
append
(
proofs
,
proofInfo
)
}
}
//不设计找零操作,可以全部提取回来后再存入,提取的找零一定是本账户的,不利于隐私,而且提取操作功能不够单一
if
sum
!=
withdraw
.
TotalAmount
{
if
sum
!=
withdraw
.
TotalAmount
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"amount not match req=%d,note.sum=%d"
,
withdraw
.
TotalAmount
,
sum
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"amount not match req=%d,note.sum=%d"
,
withdraw
.
TotalAmount
,
sum
)
}
}
...
...
plugin/dapp/mix/wallet/util_test.go
View file @
b4a6fb77
...
@@ -13,33 +13,16 @@ import (
...
@@ -13,33 +13,16 @@ import (
)
)
func
TestGetCommitValue
(
t
*
testing
.
T
)
{
func
TestGetCommitValue
(
t
*
testing
.
T
)
{
var
note
,
transfer
,
minFee
uint64
var
out
,
change
,
minFee
,
sum
uint64
note
=
100
var
inputs
[]
uint64
transfer
=
60
inputs
=
[]
uint64
{
100
,
80
}
out
=
60
minFee
=
1
minFee
=
1
_
,
err
:=
getShieldValue
(
note
,
transfer
,
minFee
)
for
_
,
i
:=
range
inputs
{
assert
.
Nil
(
t
,
err
)
sum
+=
i
}
//transfer > note
change
=
sum
-
out
-
minFee
note
=
100
_
,
err
:=
getShieldValue
(
inputs
,
out
,
change
,
minFee
)
transfer
=
100
minFee
=
1
_
,
err
=
getShieldValue
(
note
,
transfer
,
minFee
)
t
.
Log
(
err
)
assert
.
NotNil
(
t
,
err
)
note
=
100
transfer
=
101
minFee
=
0
_
,
err
=
getShieldValue
(
note
,
transfer
,
minFee
)
t
.
Log
(
err
)
assert
.
NotNil
(
t
,
err
)
//change=0
note
=
100
transfer
=
99
minFee
=
1
_
,
err
=
getShieldValue
(
note
,
transfer
,
minFee
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
a
:=
"0a9c010a4d3136323433323838333039363632323833373538343930323239313730303834393836343035373630373234353332323934333436353837323033353436363930353333373131303333323139124b3238383637383239373931373237373235343930333236303134303538313534363138303135353433383231393339363836333632313634323236303434353739313434393237383237331a82033078656663333331616261616139653039353966636536356163343364626534306364646139356534356261636163613161326166626265366637323533633132326233346264323337353932343066306237623836653363343635666131343065666332636665623861653035366234323163303665353062396532646564636236383963336536656435363636373731343235663736313931653831356665666633646432393965633535386261323731343238333131623130353364376265633864646163313733393632326238666138326438373336666531623332633835376438343330643634646637336530643265326238373932396335633762366437336534383365363130303561313361376531643730636637653834656132613235343166373235363834656266613737653235313232326466313039336230313964646165623963376134393763316538653737386462313730323636323536666666363332643437363738626633366634383361373334346666326330"
a
:=
"0a9c010a4d3136323433323838333039363632323833373538343930323239313730303834393836343035373630373234353332323934333436353837323033353436363930353333373131303333323139124b3238383637383239373931373237373235343930333236303134303538313534363138303135353433383231393339363836333632313634323236303434353739313434393237383237331a82033078656663333331616261616139653039353966636536356163343364626534306364646139356534356261636163613161326166626265366637323533633132326233346264323337353932343066306237623836653363343635666131343065666332636665623861653035366234323163303665353062396532646564636236383963336536656435363636373731343235663736313931653831356665666633646432393965633535386261323731343238333131623130353364376265633864646163313733393632326238666138326438373336666531623332633835376438343330643634646637336530643265326238373932396335633762366437336534383365363130303561313361376531643730636637653834656132613235343166373235363834656266613737653235313232326466313039336230313964646165623963376134393763316538653737386462313730323636323536666666363332643437363738626633366634383361373334346666326330"
...
@@ -50,7 +33,7 @@ func TestGetCommitValue(t *testing.T) {
...
@@ -50,7 +33,7 @@ func TestGetCommitValue(t *testing.T) {
err
=
types
.
Decode
(
da
,
&
data
)
err
=
types
.
Decode
(
da
,
&
data
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
fmt
.
Println
(
"data"
,
data
)
//
fmt.Println("data", data)
var
deposit
mixTy
.
DepositProofResp
var
deposit
mixTy
.
DepositProofResp
deposit
.
NoteHash
=
"notehashstr"
deposit
.
NoteHash
=
"notehashstr"
...
...
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