Commit f9c75bbd authored by madengji's avatar madengji Committed by vipwzw

add parse public input

parent 62e2139c
This diff is collapsed.
package input package main
import ( import (
util "github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit" util "github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
......
package output package main
import ( import (
util "github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit" util "github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
......
...@@ -32,6 +32,7 @@ func MixCmd() *cobra.Command { ...@@ -32,6 +32,7 @@ func MixCmd() *cobra.Command {
CreateTransferRawTxCmd(), CreateTransferRawTxCmd(),
CreateWithdrawRawTxCmd(), CreateWithdrawRawTxCmd(),
CreateAuthRawTxCmd(), CreateAuthRawTxCmd(),
CreateConfigCmd(), CreateConfigCmd(),
QueryCmd(), QueryCmd(),
...@@ -54,7 +55,7 @@ func CreateConfigCmd() *cobra.Command { ...@@ -54,7 +55,7 @@ func CreateConfigCmd() *cobra.Command {
Short: "Proof parameters config to mix coin contract", Short: "Proof parameters config to mix coin contract",
} }
cmd.AddCommand(mixConfigVerifyKeyParaCmd()) cmd.AddCommand(mixConfigVerifyKeyParaCmd())
cmd.AddCommand(mixConfigAuthPubKeyParaCmd()) //cmd.AddCommand(mixConfigAuthPubKeyParaCmd())
cmd.AddCommand(mixConfigPaymentPubKeyParaCmd()) cmd.AddCommand(mixConfigPaymentPubKeyParaCmd())
return cmd return cmd
...@@ -589,10 +590,50 @@ func SecretCmd() *cobra.Command { ...@@ -589,10 +590,50 @@ func SecretCmd() *cobra.Command {
cmd.AddCommand(DecodeSecretDataCmd()) cmd.AddCommand(DecodeSecretDataCmd())
cmd.AddCommand(EncryptSecretDataCmd()) cmd.AddCommand(EncryptSecretDataCmd())
cmd.AddCommand(DecryptSecretDataCmd()) cmd.AddCommand(DecryptSecretDataCmd())
cmd.AddCommand(DecodePubInputDataCmd())
return cmd return cmd
} }
// DecodePublicInputDataCmd decode zk public data
func DecodePubInputDataCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "parse",
Short: "parse zk public input data",
Run: decodePubInput,
}
decodePubInputCmdFlags(cmd)
return cmd
}
func decodePubInputCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("data", "d", "", "public input data")
cmd.MarkFlagRequired("data")
cmd.Flags().Int32P("type", "t", 0, "type 0:deposit,1:withdraw,2:transIn,3:transOut,4:auth")
cmd.MarkFlagRequired("type")
}
func decodePubInput(cmd *cobra.Command, args []string) {
//rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
data, _ := cmd.Flags().GetString("data")
ty, _ := cmd.Flags().GetInt32("type")
v, err := mixTy.DecodePubInput(mixTy.VerifyType(ty), data)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
rst, err := json.MarshalIndent(v, "", " ")
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
fmt.Println(string(rst))
}
// EncodeSecretDataCmd get para chain status by height // EncodeSecretDataCmd get para chain status by height
func DecodeSecretDataCmd() *cobra.Command { func DecodeSecretDataCmd() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
...@@ -750,6 +791,8 @@ func depositSecretCmdFlags(cmd *cobra.Command) { ...@@ -750,6 +791,8 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins") cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins")
cmd.Flags().StringP("path", "p", "", "deposit circuit path ") cmd.Flags().StringP("path", "p", "", "deposit circuit path ")
cmd.Flags().Int32P("privacy", "w", 0, "get zk privacy data print, 1:print, default not")
cmd.Flags().Int32P("verify", "v", 0, "verify on chain:0 on local:1, default 0 ")
} }
...@@ -764,6 +807,8 @@ func depositSecret(cmd *cobra.Command, args []string) { ...@@ -764,6 +807,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("token") token, _ := cmd.Flags().GetString("token")
path, _ := cmd.Flags().GetString("path") path, _ := cmd.Flags().GetString("path")
privacy, _ := cmd.Flags().GetInt32("privacy")
verify, _ := cmd.Flags().GetInt32("verify")
deposit := &mixTy.DepositInfo{ deposit := &mixTy.DepositInfo{
ReceiverAddrs: targets, ReceiverAddrs: targets,
...@@ -783,6 +828,8 @@ func depositSecret(cmd *cobra.Command, args []string) { ...@@ -783,6 +828,8 @@ func depositSecret(cmd *cobra.Command, args []string) {
AssetExec: assetExec, AssetExec: assetExec,
AssetToken: token, AssetToken: token,
Title: paraName, Title: paraName,
Privacy: privacy,
Verify: verify,
} }
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil)
...@@ -822,6 +869,9 @@ func transferSecretCmdFlags(cmd *cobra.Command) { ...@@ -822,6 +869,9 @@ func transferSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("outpath", "o", "", "output pk file ") cmd.Flags().StringP("outpath", "o", "", "output pk file ")
cmd.MarkFlagRequired("outpath") cmd.MarkFlagRequired("outpath")
cmd.Flags().Int32P("privacy", "w", 0, "get zk privacy data print, 1:print, default not")
cmd.Flags().Int32P("verify", "v", 0, "verify on chain:0 on local:1, default 0 ")
} }
func transferSecret(cmd *cobra.Command, args []string) { func transferSecret(cmd *cobra.Command, args []string) {
...@@ -839,6 +889,9 @@ func transferSecret(cmd *cobra.Command, args []string) { ...@@ -839,6 +889,9 @@ 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")
privacy, _ := cmd.Flags().GetInt32("privacy")
verify, _ := cmd.Flags().GetInt32("verify")
input := &mixTy.TransferInputTxReq{ input := &mixTy.TransferInputTxReq{
NoteHashs: noteHash, NoteHashs: noteHash,
ZkPath: inpath, ZkPath: inpath,
...@@ -867,6 +920,8 @@ func transferSecret(cmd *cobra.Command, args []string) { ...@@ -867,6 +920,8 @@ func transferSecret(cmd *cobra.Command, args []string) {
AssetExec: assetExec, AssetExec: assetExec,
AssetToken: token, AssetToken: token,
Title: paraName, Title: paraName,
Privacy: privacy,
Verify: verify,
} }
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil)
...@@ -896,6 +951,10 @@ func withdrawSecretCmdFlags(cmd *cobra.Command) { ...@@ -896,6 +951,10 @@ func withdrawSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("path", "p", "", "withdraw pk file ") cmd.Flags().StringP("path", "p", "", "withdraw pk file ")
cmd.MarkFlagRequired("path") cmd.MarkFlagRequired("path")
cmd.Flags().Int32P("privacy", "w", 0, "get zk privacy data print, 1:print, default not")
cmd.Flags().Int32P("verify", "v", 0, "verify on chain:0 on local:1, default 0 ")
} }
func withdrawSecret(cmd *cobra.Command, args []string) { func withdrawSecret(cmd *cobra.Command, args []string) {
...@@ -908,6 +967,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) { ...@@ -908,6 +967,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
token, _ := cmd.Flags().GetString("token") token, _ := cmd.Flags().GetString("token")
path, _ := cmd.Flags().GetString("path") path, _ := cmd.Flags().GetString("path")
privacy, _ := cmd.Flags().GetInt32("privacy")
verify, _ := cmd.Flags().GetInt32("verify")
req := &mixTy.WithdrawTxReq{ req := &mixTy.WithdrawTxReq{
TotalAmount: amount, TotalAmount: amount,
...@@ -921,6 +982,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) { ...@@ -921,6 +982,8 @@ func withdrawSecret(cmd *cobra.Command, args []string) {
AssetExec: assetExec, AssetExec: assetExec,
AssetToken: token, AssetToken: token,
Title: paraName, Title: paraName,
Privacy: privacy,
Verify: verify,
} }
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil)
...@@ -951,6 +1014,9 @@ func authSecretCmdFlags(cmd *cobra.Command) { ...@@ -951,6 +1014,9 @@ func authSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("path", "p", "", "auth path file ") cmd.Flags().StringP("path", "p", "", "auth path file ")
cmd.MarkFlagRequired("path") cmd.MarkFlagRequired("path")
cmd.Flags().Int32P("privacy", "w", 0, "get zk privacy data print, 1:print, default not")
cmd.Flags().Int32P("verify", "v", 0, "verify on chain:0 on local:1, default 0 ")
} }
func authSecret(cmd *cobra.Command, args []string) { func authSecret(cmd *cobra.Command, args []string) {
...@@ -964,6 +1030,9 @@ func authSecret(cmd *cobra.Command, args []string) { ...@@ -964,6 +1030,9 @@ func authSecret(cmd *cobra.Command, args []string) {
path, _ := cmd.Flags().GetString("path") path, _ := cmd.Flags().GetString("path")
privacy, _ := cmd.Flags().GetInt32("privacy")
verify, _ := cmd.Flags().GetInt32("verify")
req := &mixTy.AuthTxReq{ req := &mixTy.AuthTxReq{
AuthorizeToAddr: toKey, AuthorizeToAddr: toKey,
NoteHash: noteHash, NoteHash: noteHash,
...@@ -976,6 +1045,8 @@ func authSecret(cmd *cobra.Command, args []string) { ...@@ -976,6 +1045,8 @@ func authSecret(cmd *cobra.Command, args []string) {
AssetExec: assetExec, AssetExec: assetExec,
AssetToken: token, AssetToken: token,
Title: paraName, Title: paraName,
Privacy: privacy,
Verify: verify,
} }
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.CreateRawTransaction", params, nil)
......
...@@ -26,12 +26,12 @@ func setPrefix() { ...@@ -26,12 +26,12 @@ func setPrefix() {
authPubKeys = "mavl-mix-auth-pubkeys-" authPubKeys = "mavl-mix-auth-pubkeys-"
paymentPubKey = "mavl-mix-payment-pubkey-" paymentPubKey = "mavl-mix-payment-pubkey-"
commitTreeArchiveRoots = "mavl-mix-commitTree-roots-archive-" commitTreeArchiveRoots = "mavl-mix-commitTree-roots-archive-"
commitTreeCurrentRoots = "mavl-mix-commitTree-current-roots" commitTreeCurrentRoots = "mavl-mix-commitTree-roots-current-"
commitTreeCurrentLeaves = "mavl-mix-commitTree-current-leaves-" commitTreeCurrentLeaves = "mavl-mix-commitTree-current-leaves-"
commitTreeRootLeaves = "mavl-mix-commitTree-rootLeaves-" commitTreeRootLeaves = "mavl-mix-commitTree-rootLeaves-"
authorizeHash = "mavl-mix-authorizeHash" authorizeHash = "mavl-mix-authorizeHash"
authorizeSpendHash = "mavl-mix-authorizeHash-spend-" authorizeSpendHash = "mavl-mix-authorizeSpendHash-"
nullifierHash = "mavl-mix-nullifierHash" nullifierHash = "mavl-mix-nullifierHash"
} }
......
...@@ -69,5 +69,5 @@ func (m *Mix) Query_PaymentPubKey(addr *types.ReqString) (types.Message, error) ...@@ -69,5 +69,5 @@ func (m *Mix) Query_PaymentPubKey(addr *types.ReqString) (types.Message, error)
// Query_PaymentPubKey 批量查询 // Query_PaymentPubKey 批量查询
func (m *Mix) Query_VerifyProof(req *mixTy.VerifyProofInfo) (types.Message, error) { func (m *Mix) Query_VerifyProof(req *mixTy.VerifyProofInfo) (types.Message, error) {
return nil, zkProofVerify(m.GetStateDB(), req.Proof, req.Ty) return &types.ReqNil{}, zkProofVerify(m.GetStateDB(), req.Proof, req.Ty)
} }
...@@ -385,6 +385,8 @@ message CreateRawTxReq{ ...@@ -385,6 +385,8 @@ message CreateRawTxReq{
string assetExec = 2; string assetExec = 2;
string assetToken = 3; string assetToken = 3;
string title = 6; //平行链名字 string title = 6; //平行链名字
int32 privacy = 7; //1:打印隐私数据
int32 verify = 8; //0:链上验证,1:本地验证
} }
......
This diff is collapsed.
...@@ -224,6 +224,9 @@ func (p *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e ...@@ -224,6 +224,9 @@ func (p *mixPolicy) listMixInfos(req *mixTy.WalletMixIndexReq) (types.Message, e
indexName = "authSpendHash" indexName = "authSpendHash"
} else if len(req.Account) > 0 { } else if len(req.Account) > 0 {
indexName = "account" indexName = "account"
if req.Status > 0 {
indexName = "owner_status"
}
} else if req.Status > 0 { } else if req.Status > 0 {
indexName = "status" indexName = "status"
} }
......
...@@ -25,7 +25,8 @@ var boardOpt = &table.Option{ ...@@ -25,7 +25,8 @@ var boardOpt = &table.Option{
"authHash", "authHash",
"authSpendHash", "authSpendHash",
"account", "account",
"status"}, "status",
"owner_status"},
} }
//NewStageTable 新建表 //NewStageTable 新建表
...@@ -79,6 +80,8 @@ func (r *MixRow) Get(key string) ([]byte, error) { ...@@ -79,6 +80,8 @@ func (r *MixRow) Get(key string) ([]byte, error) {
return []byte(r.Info.Account), nil return []byte(r.Info.Account), nil
case "status": case "status":
return []byte(fmt.Sprintf("%2d", r.Info.Status)), nil return []byte(fmt.Sprintf("%2d", r.Info.Status)), nil
case "owner_status":
return []byte(fmt.Sprintf("%s_%2d", r.Info.Account, r.Info.Status)), nil
default: default:
return nil, types.ErrNotFound return nil, types.ErrNotFound
} }
......
...@@ -134,12 +134,12 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction, ...@@ -134,12 +134,12 @@ func (p *mixPolicy) createAuthTx(req *mixTy.CreateRawTxReq) (*types.Transaction,
return nil, err return nil, err
} }
proofInfo, err := getZkProofKeys(auth.ZkPath+mixTy.AuthCircuit, auth.ZkPath+mixTy.AuthPk, *input) proofInfo, err := getZkProofKeys(auth.ZkPath+mixTy.AuthCircuit, auth.ZkPath+mixTy.AuthPk, *input, req.Privacy)
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 := p.verifyProofOnChain(mixTy.VerifyType_AUTHORIZE, proofInfo, auth.ZkPath+mixTy.AuthVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_AUTHORIZE, proofInfo, auth.ZkPath+mixTy.AuthVk, req.Verify); 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)
} }
......
...@@ -128,7 +128,7 @@ func (p *mixPolicy) depositParams(receiver, returner, auth, amount string) (*mix ...@@ -128,7 +128,7 @@ func (p *mixPolicy) depositParams(receiver, returner, auth, amount string) (*mix
} }
func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath string) (*mixTy.ZkProofInfo, error) { func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath string, verifyOnChain, privacyPrint int32) (*mixTy.ZkProofInfo, error) {
resp, err := p.depositParams(receiver, returner, auth, amount) resp, err := p.depositParams(receiver, returner, auth, amount)
if err != nil { if err != nil {
...@@ -143,13 +143,13 @@ func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath str ...@@ -143,13 +143,13 @@ func (p *mixPolicy) getDepositProof(receiver, returner, auth, amount, zkPath str
input.ReturnPubKey = resp.Proof.ReturnKey input.ReturnPubKey = resp.Proof.ReturnKey
input.NoteRandom = resp.Proof.NoteRandom input.NoteRandom = resp.Proof.NoteRandom
proofInfo, err := getZkProofKeys(zkPath+mixTy.DepositCircuit, zkPath+mixTy.DepositPk, input) proofInfo, err := getZkProofKeys(zkPath+mixTy.DepositCircuit, zkPath+mixTy.DepositPk, input, privacyPrint)
if err != nil { if err != nil {
return nil, err return nil, err
} }
//线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本 //线上验证proof,失败的原因有可能circuit,Pk和线上vk不匹配,或不是一起产生的版本
if err := p.verifyProofOnChain(mixTy.VerifyType_DEPOSIT, proofInfo, zkPath+mixTy.DepositVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_DEPOSIT, proofInfo, zkPath+mixTy.DepositVk, verifyOnChain); err != nil {
return nil, errors.Wrap(err, "verifyProof fail") return nil, errors.Wrap(err, "verifyProof fail")
} }
proofInfo.Secrets = resp.Secrets proofInfo.Secrets = resp.Secrets
...@@ -180,7 +180,7 @@ func (p *mixPolicy) createDepositTx(req *mixTy.CreateRawTxReq) (*types.Transacti ...@@ -180,7 +180,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(rcv, deposit.Deposit.ReturnAddr, deposit.Deposit.AuthorizeAddr, amounts[i], deposit.ZkPath) p, err := p.getDepositProof(rcv, deposit.Deposit.ReturnAddr, deposit.Deposit.AuthorizeAddr, amounts[i], deposit.ZkPath, req.Verify, req.Privacy)
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)
} }
......
...@@ -93,7 +93,6 @@ type TransferOutput struct { ...@@ -93,7 +93,6 @@ type TransferOutput struct {
} }
func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferInput, error) { func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferInput, error) {
//get spend privacy key //get spend privacy key
privacyKey, err := p.getAccountPrivacyKey(note.Account) privacyKey, err := p.getAccountPrivacyKey(note.Account)
if err != nil { if err != nil {
...@@ -101,7 +100,7 @@ func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferI ...@@ -101,7 +100,7 @@ func (p *mixPolicy) getTransferInputPart(note *mixTy.WalletNoteInfo) (*TransferI
} }
if privacyKey.Privacy.PaymentKey.ReceiveKey != note.Secret.ReceiverKey && if privacyKey.Privacy.PaymentKey.ReceiveKey != note.Secret.ReceiverKey &&
privacyKey.Privacy.PaymentKey.ReceiveKey != note.Secret.ReturnKey { privacyKey.Privacy.PaymentKey.ReceiveKey != note.Secret.ReturnKey {
return nil, errors.Wrapf(types.ErrInvalidParam, "payment pubkey from note=%s not match from privacyKey=%s,for account =%s", return nil, errors.Wrapf(types.ErrInvalidParam, "receiver key from note=%s not match from key=%s,for account =%s",
note.Secret.ReceiverKey, privacyKey.Privacy.PaymentKey.ReceiveKey, note.Account) note.Secret.ReceiverKey, privacyKey.Privacy.PaymentKey.ReceiveKey, note.Account)
} }
...@@ -367,32 +366,32 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact ...@@ -367,32 +366,32 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
//verify input //verify input
var inputProofs []*mixTy.ZkProofInfo var inputProofs []*mixTy.ZkProofInfo
for i, input := range inputParts { for i, input := range inputParts {
inputProof, err := getZkProofKeys(transfer.Input.ZkPath+mixTy.TransInputCircuit, transfer.Input.ZkPath+mixTy.TransInputPk, *input) inputProof, err := getZkProofKeys(transfer.Input.ZkPath+mixTy.TransInputCircuit, transfer.Input.ZkPath+mixTy.TransInputPk, *input, req.Privacy)
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)
} }
if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFERINPUT, inputProof, transfer.Input.ZkPath+mixTy.TransInputVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFERINPUT, inputProof, transfer.Input.ZkPath+mixTy.TransInputVk, req.Verify); err != nil {
return nil, errors.Wrapf(err, "input verifyProof fail,the i=%d", i) return nil, errors.Wrapf(err, "input verifyProof fail,the i=%d", i)
} }
inputProofs = append(inputProofs, inputProof) inputProofs = append(inputProofs, inputProof)
} }
//verify output //verify output
outputProof, err := getZkProofKeys(transfer.Output.ZkPath+mixTy.TransOutputCircuit, transfer.Output.ZkPath+mixTy.TransOutputPk, *outPart) outputProof, err := getZkProofKeys(transfer.Output.ZkPath+mixTy.TransOutputCircuit, transfer.Output.ZkPath+mixTy.TransOutputPk, *outPart, req.Privacy)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "output getZkProofKeys") return nil, errors.Wrapf(err, "output getZkProofKeys")
} }
if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFEROUTPUT, outputProof, transfer.Output.ZkPath+mixTy.TransOutputVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFEROUTPUT, outputProof, transfer.Output.ZkPath+mixTy.TransOutputVk, req.Verify); err != nil {
return nil, errors.Wrapf(err, "output verifyProof fail") return nil, errors.Wrapf(err, "output verifyProof fail")
} }
outputProof.Secrets = outDHSecret outputProof.Secrets = outDHSecret
//verify change //verify change
changeProof, err := getZkProofKeys(transfer.Output.ZkPath+mixTy.TransOutputCircuit, transfer.Output.ZkPath+mixTy.TransOutputPk, *changePart) changeProof, err := getZkProofKeys(transfer.Output.ZkPath+mixTy.TransOutputCircuit, transfer.Output.ZkPath+mixTy.TransOutputPk, *changePart, req.Privacy)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "change getZkProofKeys") return nil, errors.Wrapf(err, "change getZkProofKeys")
} }
if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFEROUTPUT, changeProof, transfer.Output.ZkPath+mixTy.TransOutputVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_TRANSFEROUTPUT, changeProof, transfer.Output.ZkPath+mixTy.TransOutputVk, req.Verify); err != nil {
return nil, errors.Wrapf(err, "change verifyProof fail") return nil, errors.Wrapf(err, "change verifyProof fail")
} }
changeProof.Secrets = changeDHSecret changeProof.Secrets = changeDHSecret
......
...@@ -139,12 +139,12 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact ...@@ -139,12 +139,12 @@ func (p *mixPolicy) createWithdrawTx(req *mixTy.CreateRawTxReq) (*types.Transact
return nil, errors.Wrapf(err, "getWithdrawParams note=%s", note) return nil, errors.Wrapf(err, "getWithdrawParams note=%s", note)
} }
proofInfo, err := getZkProofKeys(withdraw.ZkPath+mixTy.WithdrawCircuit, withdraw.ZkPath+mixTy.WithdrawPk, *input) proofInfo, err := getZkProofKeys(withdraw.ZkPath+mixTy.WithdrawCircuit, withdraw.ZkPath+mixTy.WithdrawPk, *input, req.Privacy)
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 := p.verifyProofOnChain(mixTy.VerifyType_WITHDRAW, proofInfo, withdraw.ZkPath+mixTy.WithdrawVk); err != nil { if err := p.verifyProofOnChain(mixTy.VerifyType_WITHDRAW, proofInfo, withdraw.ZkPath+mixTy.WithdrawVk, req.Verify); err != nil {
return nil, errors.Wrapf(err, "verifyProof fail for note=%s", note) return nil, errors.Wrapf(err, "verifyProof fail for note=%s", note)
} }
......
...@@ -87,9 +87,9 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error) ...@@ -87,9 +87,9 @@ func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error)
return &raw, nil return &raw, nil
} }
func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProofInfo, vkPath string) error { func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProofInfo, vkPath string, verifyOnChain int32) error {
//vkpath verify //vkpath verify
if len(vkPath) > 0 { if verifyOnChain > 0 && len(vkPath) > 0 {
vk, err := getVerifyKey(vkPath) vk, err := getVerifyKey(vkPath)
if err != nil { if err != nil {
return errors.Wrapf(err, "getVerifyKey path=%s", vkPath) return errors.Wrapf(err, "getVerifyKey path=%s", vkPath)
...@@ -111,11 +111,7 @@ func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProof ...@@ -111,11 +111,7 @@ func (p *mixPolicy) verifyProofOnChain(ty mixTy.VerifyType, proof *mixTy.ZkProof
Proof: proof, Proof: proof,
} }
//onchain verify //onchain verify
_, err := p.walletOperate.GetAPI().QueryChain(&types.ChainExecutor{ _, err := p.walletOperate.GetAPI().Query(mixTy.MixX, "VerifyProof", verify)
Driver: "mix",
FuncName: "VerifyProof",
Param: types.Encode(verify),
})
return err return err
} }
...@@ -284,19 +280,34 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) { ...@@ -284,19 +280,34 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
} }
} }
//func printObj(obj interface{}) { func printObj(obj interface{}) {
// tv := reflect.ValueOf(obj) ty := reflect.TypeOf(obj)
// for i:=0;i<tv.NumField();i++{ tv := reflect.ValueOf(obj)
// name := tv.Field(i).Elem() n := ty.NumField()
// }
// for i, t := range treeProof.TreePath { for i := 0; i < n; i++ {
// tv.Elem().FieldByName("Path" + strconv.Itoa(i)).SetString(t) name := ty.Field(i).Name
// tv.Elem().FieldByName("Helper" + strconv.Itoa(i)).SetString(strconv.Itoa(int(treeProof.Helpers[i]))) v, ok := ty.Field(i).Tag.Lookup("tag")
// tv.Elem().FieldByName("Valid" + strconv.Itoa(i)).SetString("1") if !ok {
// } fmt.Println("fieldname=", ty.Field(i).Name, "not set tag")
//} }
fmt.Println("fieldname=", ty.Field(i).Name, "| value=", tv.FieldByName(name).Interface(), "| tag=", v)
}
}
func getZkProofKeys(circuitFile, pkFile string, inputs interface{}, privacyPrint int32) (*mixTy.ZkProofInfo, error) {
if privacyPrint > 0 {
fmt.Println("--output zk parameters for circuit:", circuitFile)
rst, err := json.MarshalIndent(inputs, "", " ")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(rst))
}
func getZkProofKeys(circuitFile, pkFile string, inputs interface{}) (*mixTy.ZkProofInfo, error) {
assignments, err := getAssignments(inputs) assignments, err := getAssignments(inputs)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -2,6 +2,7 @@ package wallet ...@@ -2,6 +2,7 @@ package wallet
import ( import (
"encoding/hex" "encoding/hex"
"encoding/json"
"fmt" "fmt"
"reflect" "reflect"
"testing" "testing"
...@@ -87,13 +88,20 @@ func TestGetAssignments(t *testing.T) { ...@@ -87,13 +88,20 @@ func TestGetAssignments(t *testing.T) {
_, ok := reduceAssign["ReceiverPubKey"] _, ok := reduceAssign["ReceiverPubKey"]
assert.Equal(t, ok, false) assert.Equal(t, ok, false)
//tv := reflect.ValueOf(&deposit) tv := reflect.ValueOf(&deposit)
//tv.Elem().FieldByName("NoteHash").SetString("999") tv.Elem().FieldByName("NoteHash").SetString("999")
////tv.FieldByName("NoteHash").Elem().SetString("999") //tv.FieldByName("NoteHash").Elem().SetString("999")
//assert.Equal(t,"999",deposit.NoteHash) assert.Equal(t, "999", deposit.NoteHash)
var in WithdrawInput //var in WithdrawInput
initTreePath(&in) //initTreePath(&in)
assert.Equal(t, "99", in.Path1) //assert.Equal(t, "99", in.Path1)
printObj(deposit)
rst, err := json.MarshalIndent(deposit, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(rst))
} }
func TestVerifyProof(t *testing.T) { func TestVerifyProof(t *testing.T) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment