Commit 6fc4d52e authored by madengji's avatar madengji Committed by vipwzw

add transfer proof

parent 25cf36cb
...@@ -930,8 +930,7 @@ func ProofCmd() *cobra.Command { ...@@ -930,8 +930,7 @@ func ProofCmd() *cobra.Command {
Short: "circuit proof inputs", Short: "circuit proof inputs",
} }
cmd.AddCommand(DepositInputsCmd()) cmd.AddCommand(DepositInputsCmd())
cmd.AddCommand(PayInInputsCmd()) cmd.AddCommand(TransferInputsCmd())
cmd.AddCommand(PayOutInputsCmd())
cmd.AddCommand(WithdrawInputsCmd()) cmd.AddCommand(WithdrawInputsCmd())
cmd.AddCommand(AuthInputsCmd()) cmd.AddCommand(AuthInputsCmd())
...@@ -957,7 +956,7 @@ func depositSecretCmdFlags(cmd *cobra.Command) { ...@@ -957,7 +956,7 @@ func depositSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("authorize", "a", "", "authorize addr") cmd.Flags().StringP("authorize", "a", "", "authorize addr")
cmd.Flags().StringP("amount", "m", "", "amount") cmd.Flags().Uint64P("amount", "m", 0, "amount")
cmd.MarkFlagRequired("amount") cmd.MarkFlagRequired("amount")
} }
...@@ -967,7 +966,7 @@ func depositSecret(cmd *cobra.Command, args []string) { ...@@ -967,7 +966,7 @@ func depositSecret(cmd *cobra.Command, args []string) {
payment, _ := cmd.Flags().GetString("payment") payment, _ := cmd.Flags().GetString("payment")
returnKey, _ := cmd.Flags().GetString("return") returnKey, _ := cmd.Flags().GetString("return")
authorize, _ := cmd.Flags().GetString("authorize") authorize, _ := cmd.Flags().GetString("authorize")
amount, _ := cmd.Flags().GetString("amount") amount, _ := cmd.Flags().GetUint64("amount")
req := &mixTy.DepositProofReq{ req := &mixTy.DepositProofReq{
PaymentAddr: payment, PaymentAddr: payment,
...@@ -981,89 +980,53 @@ func depositSecret(cmd *cobra.Command, args []string) { ...@@ -981,89 +980,53 @@ func depositSecret(cmd *cobra.Command, args []string) {
ctx.Run() ctx.Run()
} }
// DepositInputsCmd get para chain status by height // TransferInputsCmd get para chain status by height
func PayInInputsCmd() *cobra.Command { func TransferInputsCmd() *cobra.Command {
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "payin", Use: "transfer",
Short: "one key get pay input data", Short: "one key get transfer input output data",
Run: payInSecret, Run: transferSecret,
} }
payInSecretCmdFlags(cmd) transferSecretCmdFlags(cmd)
return cmd return cmd
} }
func payInSecretCmdFlags(cmd *cobra.Command) { func transferSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("payment", "p", "", "payment addr") cmd.Flags().StringP("noteHash", "n", "", "note hash to spend")
cmd.MarkFlagRequired("payment") cmd.MarkFlagRequired("noteHash")
cmd.Flags().StringP("return", "r", "", "return addr")
cmd.Flags().StringP("authorize", "a", "", "authorize addr")
cmd.Flags().StringP("amount", "m", "", "amount")
cmd.MarkFlagRequired("amount")
}
func payInSecret(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
payment, _ := cmd.Flags().GetString("payment")
returnKey, _ := cmd.Flags().GetString("return")
authorize, _ := cmd.Flags().GetString("authorize")
amount, _ := cmd.Flags().GetString("amount")
req := &mixTy.DepositProofReq{
PaymentAddr: payment,
ReturnAddr: returnKey,
AuthorizeAddr: authorize,
Amount: amount,
}
var res mixTy.DHSecretGroup
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.PayInProof", req, &res)
ctx.Run()
}
// DepositInputsCmd get para chain status by height
func PayOutInputsCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "payout",
Short: "one key get payout input data",
Run: payOutSecret,
}
payOutSecretCmdFlags(cmd)
return cmd
}
func payOutSecretCmdFlags(cmd *cobra.Command) { cmd.Flags().StringP("toAddr", "t", "", "transfer to addr")
cmd.Flags().StringP("payment", "p", "", "payment addr") cmd.MarkFlagRequired("toAddr")
cmd.MarkFlagRequired("payment")
cmd.Flags().StringP("return", "r", "", "return addr") cmd.Flags().StringP("auth", "a", "", "transfer to auth addr")
cmd.MarkFlagRequired("auth")
cmd.Flags().StringP("authorize", "a", "", "authorize addr") cmd.Flags().StringP("returner", "r", "", "transfer to returner addr")
cmd.MarkFlagRequired("returner")
cmd.Flags().StringP("amount", "m", "", "amount") cmd.Flags().Uint64P("amount", "m", 0, "transfer amount")
cmd.MarkFlagRequired("amount") cmd.MarkFlagRequired("amount")
} }
func payOutSecret(cmd *cobra.Command, args []string) { func transferSecret(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
payment, _ := cmd.Flags().GetString("payment") noteHash, _ := cmd.Flags().GetString("noteHash")
returnKey, _ := cmd.Flags().GetString("return") toAddr, _ := cmd.Flags().GetString("toAddr")
authorize, _ := cmd.Flags().GetString("authorize") auth, _ := cmd.Flags().GetString("auth")
amount, _ := cmd.Flags().GetString("amount") returner, _ := cmd.Flags().GetString("returner")
amount, _ := cmd.Flags().GetUint64("amount")
req := &mixTy.DepositProofReq{ req := &mixTy.TransferProofReq{
PaymentAddr: payment, NoteHash: noteHash,
ReturnAddr: returnKey, ToAddr: toAddr,
AuthorizeAddr: authorize, ToAuthAddr: auth,
ReturnAddr: returner,
Amount: amount, Amount: amount,
} }
var res mixTy.DepositProofResp var res mixTy.TransferProofResp
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.PayOutProof", req, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.TransferProof", req, &res)
ctx.Run() ctx.Run()
} }
...@@ -1109,33 +1072,24 @@ func AuthInputsCmd() *cobra.Command { ...@@ -1109,33 +1072,24 @@ func AuthInputsCmd() *cobra.Command {
} }
func authSecretCmdFlags(cmd *cobra.Command) { func authSecretCmdFlags(cmd *cobra.Command) {
cmd.Flags().StringP("payment", "p", "", "payment addr") cmd.Flags().StringP("noteHash", "n", "", "note hash to spend")
cmd.MarkFlagRequired("payment") cmd.MarkFlagRequired("noteHash")
cmd.Flags().StringP("return", "r", "", "return addr")
cmd.Flags().StringP("authorize", "a", "", "authorize addr")
cmd.Flags().StringP("amount", "m", "", "amount")
cmd.MarkFlagRequired("amount")
cmd.Flags().Uint32P("toReturn", "r", 0, "authorize to returner,0:to payment,1:to returner")
cmd.MarkFlagRequired("noteHash")
} }
func authSecret(cmd *cobra.Command, args []string) { func authSecret(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
payment, _ := cmd.Flags().GetString("payment") noteHash, _ := cmd.Flags().GetString("noteHash")
returnKey, _ := cmd.Flags().GetString("return") toReturn, _ := cmd.Flags().GetUint32("toReturn")
authorize, _ := cmd.Flags().GetString("authorize")
amount, _ := cmd.Flags().GetString("amount")
req := &mixTy.DepositProofReq{ req := &mixTy.AuthProofReq{
PaymentAddr: payment, NoteHash: noteHash,
ReturnAddr: returnKey, ToReturn: toReturn,
AuthorizeAddr: authorize,
Amount: amount,
} }
var res mixTy.DHSecretGroup var res mixTy.AuthProofResp
ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.AuthProof", req, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.AuthProof", req, &res)
ctx.Run() ctx.Run()
} }
...@@ -62,29 +62,8 @@ func (m *Mix) CheckTx(tx *types.Transaction, index int) error { ...@@ -62,29 +62,8 @@ func (m *Mix) CheckTx(tx *types.Transaction, index int) error {
// mix隐私交易,只私对私需要特殊签名验证 // mix隐私交易,只私对私需要特殊签名验证
return m.DriverBase.CheckTx(tx, index) return m.DriverBase.CheckTx(tx, index)
} }
minTxFee := m.GetAPI().GetConfig().GInt("wallet.minFee")
_, _, err := MixTransferInfoVerify(m.GetStateDB(), action.GetTransfer()) _, _, err := MixTransferInfoVerify(m.GetStateDB(), action.GetTransfer(), minTxFee)
if err != nil {
mlog.Error("checkTx", "err", err)
return err
}
return nil
}
// CheckTx check transaction
func (m *Mix) CheckTx(tx *types.Transaction, index int) error {
action := new(mixTy.MixAction)
if err := types.Decode(tx.Payload, action); err != nil {
mlog.Error("CheckTx decode", "err", err)
return err
}
if action.Ty != mixTy.MixActionTransfer {
// mix隐私交易,只私对私需要特殊签名验证
return m.DriverBase.CheckTx(tx, index)
}
_, _, err := MixTransferInfoVerify(m.GetStateDB(), action.GetTransfer())
if err != nil { if err != nil {
mlog.Error("checkTx", "err", err) mlog.Error("checkTx", "err", err)
return err return err
......
...@@ -13,7 +13,6 @@ import ( ...@@ -13,7 +13,6 @@ import (
"github.com/consensys/gurvy/bn256/twistededwards" "github.com/consensys/gurvy/bn256/twistededwards"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
"github.com/consensys/gurvy/bn256/fr"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
...@@ -72,18 +71,7 @@ func transferOutputVerify(db dbm.KV, proof *mixTy.ZkProofInfo) (*mixTy.TransferO ...@@ -72,18 +71,7 @@ func transferOutputVerify(db dbm.KV, proof *mixTy.ZkProofInfo) (*mixTy.TransferO
} }
func getFee() *twistededwards.Point { func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mixTy.TransferOutputPublicInput, minFee int64) bool {
//手续费 可配, 缺省100000, 即0.001, point=fee*G + 0*H
var fee fr.Element
fee.SetUint64(100000).FromMont()
var pointFee twistededwards.Point
ed := twistededwards.GetEdwardsCurve()
pointFee.ScalarMul(&ed.Base, fee)
return &pointFee
}
func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mixTy.TransferOutputPublicInput) bool {
var inputPoints, outputPoints []*twistededwards.Point var inputPoints, outputPoints []*twistededwards.Point
for _, in := range inputs { for _, in := range inputs {
var p twistededwards.Point var p twistededwards.Point
...@@ -99,7 +87,9 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix ...@@ -99,7 +87,9 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
outputPoints = append(outputPoints, &p) outputPoints = append(outputPoints, &p)
} }
//out value add fee //out value add fee
outputPoints = append(outputPoints, getFee()) //对于平行链来说, 隐私交易需要一个公共账户扣主链的手续费,隐私交易只需要扣平行链执行器内的费用即可
//由于平行链的隐私交易没有实际扣平行链mix合约的手续费,平行链Mix合约会有手续费留下,平行链隐私可以考虑手续费为0
outputPoints = append(outputPoints, mixTy.MulCurvePointG(uint64(minFee)))
//sum input and output //sum input and output
sumInput := inputPoints[0] sumInput := inputPoints[0]
...@@ -117,7 +107,7 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix ...@@ -117,7 +107,7 @@ func VerifyCommitValues(inputs []*mixTy.TransferInputPublicInput, outputs []*mix
return false return false
} }
func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mixTy.TransferInputPublicInput, []*mixTy.TransferOutputPublicInput, error) { func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction, minFee int64) ([]*mixTy.TransferInputPublicInput, []*mixTy.TransferOutputPublicInput, error) {
var inputs []*mixTy.TransferInputPublicInput var inputs []*mixTy.TransferInputPublicInput
var outputs []*mixTy.TransferOutputPublicInput var outputs []*mixTy.TransferOutputPublicInput
...@@ -137,7 +127,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix ...@@ -137,7 +127,7 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
outputs = append(outputs, out) outputs = append(outputs, out)
} }
if !VerifyCommitValues(inputs, outputs) { if !VerifyCommitValues(inputs, outputs, minFee) {
return nil, nil, errors.Wrap(mixTy.ErrSpendInOutValueNotMatch, "verifyValue") return nil, nil, errors.Wrap(mixTy.ErrSpendInOutValueNotMatch, "verifyValue")
} }
...@@ -150,7 +140,8 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix ...@@ -150,7 +140,8 @@ func MixTransferInfoVerify(db dbm.KV, transfer *mixTy.MixTransferAction) ([]*mix
3. add nullifier to pool 3. add nullifier to pool
*/ */
func (a *action) Transfer(transfer *mixTy.MixTransferAction) (*types.Receipt, error) { func (a *action) Transfer(transfer *mixTy.MixTransferAction) (*types.Receipt, error) {
inputs, outputs, err := MixTransferInfoVerify(a.db, transfer) minTxFee := a.api.GetConfig().GInt("wallet.minFee")
inputs, outputs, err := MixTransferInfoVerify(a.db, transfer, minTxFee)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "Transfer.MixTransferInfoVerify") return nil, errors.Wrap(err, "Transfer.MixTransferInfoVerify")
} }
......
...@@ -135,11 +135,7 @@ message WithdrawPublicInput { ...@@ -135,11 +135,7 @@ message WithdrawPublicInput {
} }
//加密了的input/output amount
message commitAmount{
string X = 1;
string Y = 2;
}
message TransferInputPublicInput { message TransferInputPublicInput {
string treeRootHash = 1; string treeRootHash = 1;
...@@ -264,7 +260,7 @@ message DepositProofReq{ ...@@ -264,7 +260,7 @@ message DepositProofReq{
string paymentAddr = 1; string paymentAddr = 1;
string returnAddr = 2; string returnAddr = 2;
string authorizeAddr = 3; string authorizeAddr = 3;
string amount = 4; uint64 amount = 4;
} }
...@@ -301,7 +297,7 @@ message WithdrawProofResp{ ...@@ -301,7 +297,7 @@ message WithdrawProofResp{
message AuthProofReq{ message AuthProofReq{
string noteHash = 1; string noteHash = 1;
uint32 authReturn = 2; uint32 toReturn = 2;
} }
message AuthProofResp{ message AuthProofResp{
...@@ -316,6 +312,59 @@ message AuthProofResp{ ...@@ -316,6 +312,59 @@ message AuthProofResp{
} }
message TransferProofReq{
string noteHash = 1;
string toAddr = 2;
string toAuthAddr = 3;
string returnAddr = 4;
uint64 amount = 5;
}
//加密了的input/output amount
message commitValue{
string X = 1;
string Y = 2;
}
message TransferInputProof{
SecretData proof = 1;
string nullifierHash = 2;
string authSpendHash = 3;
string noteHash = 4;
string spendPrivKey = 5;
uint32 spendFlag = 6;
uint32 authFlag = 7;
TreePathProof treeProof = 8;
commitValue commitValue = 9;
string spendRandom = 10;
}
message TransferOutputProof{
SecretData proof = 1;
string noteHash = 2;
DHSecretGroup secrets = 3;
commitValue commitValue = 4;
string spendRandom = 5;
}
message TransferProofResp{
TransferInputProof transferInput = 1;
TransferOutputProof targetOutput = 2;
TransferOutputProof changeOutput = 3;
}
message CommitValueRst{
string noteRandom = 1;
string transferRandom = 2;
string changeRandom = 3;
commitValue note = 4;
commitValue transfer = 5;
commitValue change = 6;
}
enum NoteStatus{ enum NoteStatus{
UNDEF = 0; UNDEF = 0;
......
...@@ -142,7 +142,7 @@ func (c *Jrpc) DepositProof(in *mixTy.DepositProofReq, result *json.RawMessage) ...@@ -142,7 +142,7 @@ func (c *Jrpc) DepositProof(in *mixTy.DepositProofReq, result *json.RawMessage)
return err return err
} }
func (c *Jrpc) AuthProof(in *mixTy.DepositProofReq, result *json.RawMessage) error { func (c *Jrpc) AuthProof(in *mixTy.AuthProofReq, result *json.RawMessage) error {
reply, err := c.cli.ExecWalletFunc(mixTy.MixX, "AuthProof", in) reply, err := c.cli.ExecWalletFunc(mixTy.MixX, "AuthProof", in)
if err != nil { if err != nil {
return err return err
...@@ -151,17 +151,8 @@ func (c *Jrpc) AuthProof(in *mixTy.DepositProofReq, result *json.RawMessage) err ...@@ -151,17 +151,8 @@ func (c *Jrpc) AuthProof(in *mixTy.DepositProofReq, result *json.RawMessage) err
return err return err
} }
func (c *Jrpc) PayInProof(in *mixTy.DepositProofReq, result *json.RawMessage) error { func (c *Jrpc) TransferProof(in *mixTy.TransferProofReq, result *json.RawMessage) error {
reply, err := c.cli.ExecWalletFunc(mixTy.MixX, "PayInProof", in) reply, err := c.cli.ExecWalletFunc(mixTy.MixX, "TransferProof", in)
if err != nil {
return err
}
*result, err = types.PBToJSON(reply)
return err
}
func (c *Jrpc) PayOutProof(in *mixTy.DepositProofReq, result *json.RawMessage) error {
reply, err := c.cli.ExecWalletFunc(mixTy.MixX, "PayOutProof", in)
if err != nil { if err != nil {
return err return err
} }
......
...@@ -39,3 +39,9 @@ const ( ...@@ -39,3 +39,9 @@ const (
MixActionTransfer MixActionTransfer
MixActionAuth MixActionAuth
) )
//curve H point
const (
PointHX = "10190477835300927557649934238820360529458681672073866116232821892325659279502"
PointHY = "7969140283216448215269095418467361784159407896899334866715345504515077887397"
)
...@@ -1050,54 +1050,6 @@ func (m *WithdrawPublicInput) GetAmount() string { ...@@ -1050,54 +1050,6 @@ func (m *WithdrawPublicInput) GetAmount() string {
return "" return ""
} }
//加密了的input/output amount
type CommitAmount struct {
X string `protobuf:"bytes,1,opt,name=X,proto3" json:"X,omitempty"`
Y string `protobuf:"bytes,2,opt,name=Y,proto3" json:"Y,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CommitAmount) Reset() { *m = CommitAmount{} }
func (m *CommitAmount) String() string { return proto.CompactTextString(m) }
func (*CommitAmount) ProtoMessage() {}
func (*CommitAmount) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{15}
}
func (m *CommitAmount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommitAmount.Unmarshal(m, b)
}
func (m *CommitAmount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CommitAmount.Marshal(b, m, deterministic)
}
func (m *CommitAmount) XXX_Merge(src proto.Message) {
xxx_messageInfo_CommitAmount.Merge(m, src)
}
func (m *CommitAmount) XXX_Size() int {
return xxx_messageInfo_CommitAmount.Size(m)
}
func (m *CommitAmount) XXX_DiscardUnknown() {
xxx_messageInfo_CommitAmount.DiscardUnknown(m)
}
var xxx_messageInfo_CommitAmount proto.InternalMessageInfo
func (m *CommitAmount) GetX() string {
if m != nil {
return m.X
}
return ""
}
func (m *CommitAmount) GetY() string {
if m != nil {
return m.Y
}
return ""
}
type TransferInputPublicInput struct { type TransferInputPublicInput struct {
TreeRootHash string `protobuf:"bytes,1,opt,name=treeRootHash,proto3" json:"treeRootHash,omitempty"` TreeRootHash string `protobuf:"bytes,1,opt,name=treeRootHash,proto3" json:"treeRootHash,omitempty"`
AmountX string `protobuf:"bytes,2,opt,name=amountX,proto3" json:"amountX,omitempty"` AmountX string `protobuf:"bytes,2,opt,name=amountX,proto3" json:"amountX,omitempty"`
...@@ -1113,7 +1065,7 @@ func (m *TransferInputPublicInput) Reset() { *m = TransferInputPublicInp ...@@ -1113,7 +1065,7 @@ func (m *TransferInputPublicInput) Reset() { *m = TransferInputPublicInp
func (m *TransferInputPublicInput) String() string { return proto.CompactTextString(m) } func (m *TransferInputPublicInput) String() string { return proto.CompactTextString(m) }
func (*TransferInputPublicInput) ProtoMessage() {} func (*TransferInputPublicInput) ProtoMessage() {}
func (*TransferInputPublicInput) Descriptor() ([]byte, []int) { func (*TransferInputPublicInput) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{16} return fileDescriptor_5c21d519a9be369a, []int{15}
} }
func (m *TransferInputPublicInput) XXX_Unmarshal(b []byte) error { func (m *TransferInputPublicInput) XXX_Unmarshal(b []byte) error {
...@@ -1183,7 +1135,7 @@ func (m *TransferOutputPublicInput) Reset() { *m = TransferOutputPublicI ...@@ -1183,7 +1135,7 @@ func (m *TransferOutputPublicInput) Reset() { *m = TransferOutputPublicI
func (m *TransferOutputPublicInput) String() string { return proto.CompactTextString(m) } func (m *TransferOutputPublicInput) String() string { return proto.CompactTextString(m) }
func (*TransferOutputPublicInput) ProtoMessage() {} func (*TransferOutputPublicInput) ProtoMessage() {}
func (*TransferOutputPublicInput) Descriptor() ([]byte, []int) { func (*TransferOutputPublicInput) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{17} return fileDescriptor_5c21d519a9be369a, []int{16}
} }
func (m *TransferOutputPublicInput) XXX_Unmarshal(b []byte) error { func (m *TransferOutputPublicInput) XXX_Unmarshal(b []byte) error {
...@@ -1246,7 +1198,7 @@ func (m *AuthorizePublicInput) Reset() { *m = AuthorizePublicInput{} } ...@@ -1246,7 +1198,7 @@ func (m *AuthorizePublicInput) Reset() { *m = AuthorizePublicInput{} }
func (m *AuthorizePublicInput) String() string { return proto.CompactTextString(m) } func (m *AuthorizePublicInput) String() string { return proto.CompactTextString(m) }
func (*AuthorizePublicInput) ProtoMessage() {} func (*AuthorizePublicInput) ProtoMessage() {}
func (*AuthorizePublicInput) Descriptor() ([]byte, []int) { func (*AuthorizePublicInput) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{18} return fileDescriptor_5c21d519a9be369a, []int{17}
} }
func (m *AuthorizePublicInput) XXX_Unmarshal(b []byte) error { func (m *AuthorizePublicInput) XXX_Unmarshal(b []byte) error {
...@@ -1307,7 +1259,7 @@ func (m *ExistValue) Reset() { *m = ExistValue{} } ...@@ -1307,7 +1259,7 @@ func (m *ExistValue) Reset() { *m = ExistValue{} }
func (m *ExistValue) String() string { return proto.CompactTextString(m) } func (m *ExistValue) String() string { return proto.CompactTextString(m) }
func (*ExistValue) ProtoMessage() {} func (*ExistValue) ProtoMessage() {}
func (*ExistValue) Descriptor() ([]byte, []int) { func (*ExistValue) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{19} return fileDescriptor_5c21d519a9be369a, []int{18}
} }
func (m *ExistValue) XXX_Unmarshal(b []byte) error { func (m *ExistValue) XXX_Unmarshal(b []byte) error {
...@@ -1346,7 +1298,7 @@ func (m *CommitTreeLeaves) Reset() { *m = CommitTreeLeaves{} } ...@@ -1346,7 +1298,7 @@ func (m *CommitTreeLeaves) Reset() { *m = CommitTreeLeaves{} }
func (m *CommitTreeLeaves) String() string { return proto.CompactTextString(m) } func (m *CommitTreeLeaves) String() string { return proto.CompactTextString(m) }
func (*CommitTreeLeaves) ProtoMessage() {} func (*CommitTreeLeaves) ProtoMessage() {}
func (*CommitTreeLeaves) Descriptor() ([]byte, []int) { func (*CommitTreeLeaves) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{20} return fileDescriptor_5c21d519a9be369a, []int{19}
} }
func (m *CommitTreeLeaves) XXX_Unmarshal(b []byte) error { func (m *CommitTreeLeaves) XXX_Unmarshal(b []byte) error {
...@@ -1385,7 +1337,7 @@ func (m *CommitTreeRoots) Reset() { *m = CommitTreeRoots{} } ...@@ -1385,7 +1337,7 @@ func (m *CommitTreeRoots) Reset() { *m = CommitTreeRoots{} }
func (m *CommitTreeRoots) String() string { return proto.CompactTextString(m) } func (m *CommitTreeRoots) String() string { return proto.CompactTextString(m) }
func (*CommitTreeRoots) ProtoMessage() {} func (*CommitTreeRoots) ProtoMessage() {}
func (*CommitTreeRoots) Descriptor() ([]byte, []int) { func (*CommitTreeRoots) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{21} return fileDescriptor_5c21d519a9be369a, []int{20}
} }
func (m *CommitTreeRoots) XXX_Unmarshal(b []byte) error { func (m *CommitTreeRoots) XXX_Unmarshal(b []byte) error {
...@@ -1428,7 +1380,7 @@ func (m *CommitTreeProve) Reset() { *m = CommitTreeProve{} } ...@@ -1428,7 +1380,7 @@ func (m *CommitTreeProve) Reset() { *m = CommitTreeProve{} }
func (m *CommitTreeProve) String() string { return proto.CompactTextString(m) } func (m *CommitTreeProve) String() string { return proto.CompactTextString(m) }
func (*CommitTreeProve) ProtoMessage() {} func (*CommitTreeProve) ProtoMessage() {}
func (*CommitTreeProve) Descriptor() ([]byte, []int) { func (*CommitTreeProve) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{22} return fileDescriptor_5c21d519a9be369a, []int{21}
} }
func (m *CommitTreeProve) XXX_Unmarshal(b []byte) error { func (m *CommitTreeProve) XXX_Unmarshal(b []byte) error {
...@@ -1496,7 +1448,7 @@ func (m *TreeInfoReq) Reset() { *m = TreeInfoReq{} } ...@@ -1496,7 +1448,7 @@ func (m *TreeInfoReq) Reset() { *m = TreeInfoReq{} }
func (m *TreeInfoReq) String() string { return proto.CompactTextString(m) } func (m *TreeInfoReq) String() string { return proto.CompactTextString(m) }
func (*TreeInfoReq) ProtoMessage() {} func (*TreeInfoReq) ProtoMessage() {}
func (*TreeInfoReq) Descriptor() ([]byte, []int) { func (*TreeInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{23} return fileDescriptor_5c21d519a9be369a, []int{22}
} }
func (m *TreeInfoReq) XXX_Unmarshal(b []byte) error { func (m *TreeInfoReq) XXX_Unmarshal(b []byte) error {
...@@ -1542,7 +1494,7 @@ func (m *TreeListResp) Reset() { *m = TreeListResp{} } ...@@ -1542,7 +1494,7 @@ func (m *TreeListResp) Reset() { *m = TreeListResp{} }
func (m *TreeListResp) String() string { return proto.CompactTextString(m) } func (m *TreeListResp) String() string { return proto.CompactTextString(m) }
func (*TreeListResp) ProtoMessage() {} func (*TreeListResp) ProtoMessage() {}
func (*TreeListResp) Descriptor() ([]byte, []int) { func (*TreeListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{24} return fileDescriptor_5c21d519a9be369a, []int{23}
} }
func (m *TreeListResp) XXX_Unmarshal(b []byte) error { func (m *TreeListResp) XXX_Unmarshal(b []byte) error {
...@@ -1585,7 +1537,7 @@ func (m *PaymentKeyPair) Reset() { *m = PaymentKeyPair{} } ...@@ -1585,7 +1537,7 @@ func (m *PaymentKeyPair) Reset() { *m = PaymentKeyPair{} }
func (m *PaymentKeyPair) String() string { return proto.CompactTextString(m) } func (m *PaymentKeyPair) String() string { return proto.CompactTextString(m) }
func (*PaymentKeyPair) ProtoMessage() {} func (*PaymentKeyPair) ProtoMessage() {}
func (*PaymentKeyPair) Descriptor() ([]byte, []int) { func (*PaymentKeyPair) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{25} return fileDescriptor_5c21d519a9be369a, []int{24}
} }
func (m *PaymentKeyPair) XXX_Unmarshal(b []byte) error { func (m *PaymentKeyPair) XXX_Unmarshal(b []byte) error {
...@@ -1635,7 +1587,7 @@ func (m *PubKey) Reset() { *m = PubKey{} } ...@@ -1635,7 +1587,7 @@ func (m *PubKey) Reset() { *m = PubKey{} }
func (m *PubKey) String() string { return proto.CompactTextString(m) } func (m *PubKey) String() string { return proto.CompactTextString(m) }
func (*PubKey) ProtoMessage() {} func (*PubKey) ProtoMessage() {}
func (*PubKey) Descriptor() ([]byte, []int) { func (*PubKey) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{26} return fileDescriptor_5c21d519a9be369a, []int{25}
} }
func (m *PubKey) XXX_Unmarshal(b []byte) error { func (m *PubKey) XXX_Unmarshal(b []byte) error {
...@@ -1681,7 +1633,7 @@ func (m *PrivKey) Reset() { *m = PrivKey{} } ...@@ -1681,7 +1633,7 @@ func (m *PrivKey) Reset() { *m = PrivKey{} }
func (m *PrivKey) String() string { return proto.CompactTextString(m) } func (m *PrivKey) String() string { return proto.CompactTextString(m) }
func (*PrivKey) ProtoMessage() {} func (*PrivKey) ProtoMessage() {}
func (*PrivKey) Descriptor() ([]byte, []int) { func (*PrivKey) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{27} return fileDescriptor_5c21d519a9be369a, []int{26}
} }
func (m *PrivKey) XXX_Unmarshal(b []byte) error { func (m *PrivKey) XXX_Unmarshal(b []byte) error {
...@@ -1721,7 +1673,7 @@ func (m *ShareSecretKeyPair) Reset() { *m = ShareSecretKeyPair{} } ...@@ -1721,7 +1673,7 @@ func (m *ShareSecretKeyPair) Reset() { *m = ShareSecretKeyPair{} }
func (m *ShareSecretKeyPair) String() string { return proto.CompactTextString(m) } func (m *ShareSecretKeyPair) String() string { return proto.CompactTextString(m) }
func (*ShareSecretKeyPair) ProtoMessage() {} func (*ShareSecretKeyPair) ProtoMessage() {}
func (*ShareSecretKeyPair) Descriptor() ([]byte, []int) { func (*ShareSecretKeyPair) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{28} return fileDescriptor_5c21d519a9be369a, []int{27}
} }
func (m *ShareSecretKeyPair) XXX_Unmarshal(b []byte) error { func (m *ShareSecretKeyPair) XXX_Unmarshal(b []byte) error {
...@@ -1770,7 +1722,7 @@ func (m *AccountPrivacyKey) Reset() { *m = AccountPrivacyKey{} } ...@@ -1770,7 +1722,7 @@ func (m *AccountPrivacyKey) Reset() { *m = AccountPrivacyKey{} }
func (m *AccountPrivacyKey) String() string { return proto.CompactTextString(m) } func (m *AccountPrivacyKey) String() string { return proto.CompactTextString(m) }
func (*AccountPrivacyKey) ProtoMessage() {} func (*AccountPrivacyKey) ProtoMessage() {}
func (*AccountPrivacyKey) Descriptor() ([]byte, []int) { func (*AccountPrivacyKey) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{29} return fileDescriptor_5c21d519a9be369a, []int{28}
} }
func (m *AccountPrivacyKey) XXX_Unmarshal(b []byte) error { func (m *AccountPrivacyKey) XXX_Unmarshal(b []byte) error {
...@@ -1817,7 +1769,7 @@ func (m *WalletAddrPrivacy) Reset() { *m = WalletAddrPrivacy{} } ...@@ -1817,7 +1769,7 @@ func (m *WalletAddrPrivacy) Reset() { *m = WalletAddrPrivacy{} }
func (m *WalletAddrPrivacy) String() string { return proto.CompactTextString(m) } func (m *WalletAddrPrivacy) String() string { return proto.CompactTextString(m) }
func (*WalletAddrPrivacy) ProtoMessage() {} func (*WalletAddrPrivacy) ProtoMessage() {}
func (*WalletAddrPrivacy) Descriptor() ([]byte, []int) { func (*WalletAddrPrivacy) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{30} return fileDescriptor_5c21d519a9be369a, []int{29}
} }
func (m *WalletAddrPrivacy) XXX_Unmarshal(b []byte) error { func (m *WalletAddrPrivacy) XXX_Unmarshal(b []byte) error {
...@@ -1867,7 +1819,7 @@ func (m *SecretData) Reset() { *m = SecretData{} } ...@@ -1867,7 +1819,7 @@ func (m *SecretData) Reset() { *m = SecretData{} }
func (m *SecretData) String() string { return proto.CompactTextString(m) } func (m *SecretData) String() string { return proto.CompactTextString(m) }
func (*SecretData) ProtoMessage() {} func (*SecretData) ProtoMessage() {}
func (*SecretData) Descriptor() ([]byte, []int) { func (*SecretData) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{31} return fileDescriptor_5c21d519a9be369a, []int{30}
} }
func (m *SecretData) XXX_Unmarshal(b []byte) error { func (m *SecretData) XXX_Unmarshal(b []byte) error {
...@@ -1935,7 +1887,7 @@ func (m *EncodedSecretData) Reset() { *m = EncodedSecretData{} } ...@@ -1935,7 +1887,7 @@ func (m *EncodedSecretData) Reset() { *m = EncodedSecretData{} }
func (m *EncodedSecretData) String() string { return proto.CompactTextString(m) } func (m *EncodedSecretData) String() string { return proto.CompactTextString(m) }
func (*EncodedSecretData) ProtoMessage() {} func (*EncodedSecretData) ProtoMessage() {}
func (*EncodedSecretData) Descriptor() ([]byte, []int) { func (*EncodedSecretData) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{32} return fileDescriptor_5c21d519a9be369a, []int{31}
} }
func (m *EncodedSecretData) XXX_Unmarshal(b []byte) error { func (m *EncodedSecretData) XXX_Unmarshal(b []byte) error {
...@@ -1982,7 +1934,7 @@ func (m *EncryptSecretData) Reset() { *m = EncryptSecretData{} } ...@@ -1982,7 +1934,7 @@ func (m *EncryptSecretData) Reset() { *m = EncryptSecretData{} }
func (m *EncryptSecretData) String() string { return proto.CompactTextString(m) } func (m *EncryptSecretData) String() string { return proto.CompactTextString(m) }
func (*EncryptSecretData) ProtoMessage() {} func (*EncryptSecretData) ProtoMessage() {}
func (*EncryptSecretData) Descriptor() ([]byte, []int) { func (*EncryptSecretData) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{33} return fileDescriptor_5c21d519a9be369a, []int{32}
} }
func (m *EncryptSecretData) XXX_Unmarshal(b []byte) error { func (m *EncryptSecretData) XXX_Unmarshal(b []byte) error {
...@@ -2030,7 +1982,7 @@ func (m *DecryptSecretData) Reset() { *m = DecryptSecretData{} } ...@@ -2030,7 +1982,7 @@ func (m *DecryptSecretData) Reset() { *m = DecryptSecretData{} }
func (m *DecryptSecretData) String() string { return proto.CompactTextString(m) } func (m *DecryptSecretData) String() string { return proto.CompactTextString(m) }
func (*DecryptSecretData) ProtoMessage() {} func (*DecryptSecretData) ProtoMessage() {}
func (*DecryptSecretData) Descriptor() ([]byte, []int) { func (*DecryptSecretData) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{34} return fileDescriptor_5c21d519a9be369a, []int{33}
} }
func (m *DecryptSecretData) XXX_Unmarshal(b []byte) error { func (m *DecryptSecretData) XXX_Unmarshal(b []byte) error {
...@@ -2077,7 +2029,7 @@ type DepositProofReq struct { ...@@ -2077,7 +2029,7 @@ type DepositProofReq struct {
PaymentAddr string `protobuf:"bytes,1,opt,name=paymentAddr,proto3" json:"paymentAddr,omitempty"` PaymentAddr string `protobuf:"bytes,1,opt,name=paymentAddr,proto3" json:"paymentAddr,omitempty"`
ReturnAddr string `protobuf:"bytes,2,opt,name=returnAddr,proto3" json:"returnAddr,omitempty"` ReturnAddr string `protobuf:"bytes,2,opt,name=returnAddr,proto3" json:"returnAddr,omitempty"`
AuthorizeAddr string `protobuf:"bytes,3,opt,name=authorizeAddr,proto3" json:"authorizeAddr,omitempty"` AuthorizeAddr string `protobuf:"bytes,3,opt,name=authorizeAddr,proto3" json:"authorizeAddr,omitempty"`
Amount string `protobuf:"bytes,4,opt,name=amount,proto3" json:"amount,omitempty"` Amount uint64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -2087,7 +2039,7 @@ func (m *DepositProofReq) Reset() { *m = DepositProofReq{} } ...@@ -2087,7 +2039,7 @@ func (m *DepositProofReq) Reset() { *m = DepositProofReq{} }
func (m *DepositProofReq) String() string { return proto.CompactTextString(m) } func (m *DepositProofReq) String() string { return proto.CompactTextString(m) }
func (*DepositProofReq) ProtoMessage() {} func (*DepositProofReq) ProtoMessage() {}
func (*DepositProofReq) Descriptor() ([]byte, []int) { func (*DepositProofReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{35} return fileDescriptor_5c21d519a9be369a, []int{34}
} }
func (m *DepositProofReq) XXX_Unmarshal(b []byte) error { func (m *DepositProofReq) XXX_Unmarshal(b []byte) error {
...@@ -2129,11 +2081,11 @@ func (m *DepositProofReq) GetAuthorizeAddr() string { ...@@ -2129,11 +2081,11 @@ func (m *DepositProofReq) GetAuthorizeAddr() string {
return "" return ""
} }
func (m *DepositProofReq) GetAmount() string { func (m *DepositProofReq) GetAmount() uint64 {
if m != nil { if m != nil {
return m.Amount return m.Amount
} }
return "" return 0
} }
type DepositProofResp struct { type DepositProofResp struct {
...@@ -2149,7 +2101,7 @@ func (m *DepositProofResp) Reset() { *m = DepositProofResp{} } ...@@ -2149,7 +2101,7 @@ func (m *DepositProofResp) Reset() { *m = DepositProofResp{} }
func (m *DepositProofResp) String() string { return proto.CompactTextString(m) } func (m *DepositProofResp) String() string { return proto.CompactTextString(m) }
func (*DepositProofResp) ProtoMessage() {} func (*DepositProofResp) ProtoMessage() {}
func (*DepositProofResp) Descriptor() ([]byte, []int) { func (*DepositProofResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{36} return fileDescriptor_5c21d519a9be369a, []int{35}
} }
func (m *DepositProofResp) XXX_Unmarshal(b []byte) error { func (m *DepositProofResp) XXX_Unmarshal(b []byte) error {
...@@ -2205,7 +2157,7 @@ func (m *TreePathProof) Reset() { *m = TreePathProof{} } ...@@ -2205,7 +2157,7 @@ func (m *TreePathProof) Reset() { *m = TreePathProof{} }
func (m *TreePathProof) String() string { return proto.CompactTextString(m) } func (m *TreePathProof) String() string { return proto.CompactTextString(m) }
func (*TreePathProof) ProtoMessage() {} func (*TreePathProof) ProtoMessage() {}
func (*TreePathProof) Descriptor() ([]byte, []int) { func (*TreePathProof) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{37} return fileDescriptor_5c21d519a9be369a, []int{36}
} }
func (m *TreePathProof) XXX_Unmarshal(b []byte) error { func (m *TreePathProof) XXX_Unmarshal(b []byte) error {
...@@ -2265,7 +2217,7 @@ func (m *WithdrawProofReq) Reset() { *m = WithdrawProofReq{} } ...@@ -2265,7 +2217,7 @@ func (m *WithdrawProofReq) Reset() { *m = WithdrawProofReq{} }
func (m *WithdrawProofReq) String() string { return proto.CompactTextString(m) } func (m *WithdrawProofReq) String() string { return proto.CompactTextString(m) }
func (*WithdrawProofReq) ProtoMessage() {} func (*WithdrawProofReq) ProtoMessage() {}
func (*WithdrawProofReq) Descriptor() ([]byte, []int) { func (*WithdrawProofReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{38} return fileDescriptor_5c21d519a9be369a, []int{37}
} }
func (m *WithdrawProofReq) XXX_Unmarshal(b []byte) error { func (m *WithdrawProofReq) XXX_Unmarshal(b []byte) error {
...@@ -2311,7 +2263,7 @@ func (m *WithdrawProofResp) Reset() { *m = WithdrawProofResp{} } ...@@ -2311,7 +2263,7 @@ func (m *WithdrawProofResp) Reset() { *m = WithdrawProofResp{} }
func (m *WithdrawProofResp) String() string { return proto.CompactTextString(m) } func (m *WithdrawProofResp) String() string { return proto.CompactTextString(m) }
func (*WithdrawProofResp) ProtoMessage() {} func (*WithdrawProofResp) ProtoMessage() {}
func (*WithdrawProofResp) Descriptor() ([]byte, []int) { func (*WithdrawProofResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{39} return fileDescriptor_5c21d519a9be369a, []int{38}
} }
func (m *WithdrawProofResp) XXX_Unmarshal(b []byte) error { func (m *WithdrawProofResp) XXX_Unmarshal(b []byte) error {
...@@ -2390,7 +2342,7 @@ func (m *WithdrawProofResp) GetTreeProof() *TreePathProof { ...@@ -2390,7 +2342,7 @@ func (m *WithdrawProofResp) GetTreeProof() *TreePathProof {
type AuthProofReq struct { type AuthProofReq struct {
NoteHash string `protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"` NoteHash string `protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
AuthReturn uint32 `protobuf:"varint,2,opt,name=authReturn,proto3" json:"authReturn,omitempty"` ToReturn uint32 `protobuf:"varint,2,opt,name=toReturn,proto3" json:"toReturn,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -2400,7 +2352,7 @@ func (m *AuthProofReq) Reset() { *m = AuthProofReq{} } ...@@ -2400,7 +2352,7 @@ func (m *AuthProofReq) Reset() { *m = AuthProofReq{} }
func (m *AuthProofReq) String() string { return proto.CompactTextString(m) } func (m *AuthProofReq) String() string { return proto.CompactTextString(m) }
func (*AuthProofReq) ProtoMessage() {} func (*AuthProofReq) ProtoMessage() {}
func (*AuthProofReq) Descriptor() ([]byte, []int) { func (*AuthProofReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{40} return fileDescriptor_5c21d519a9be369a, []int{39}
} }
func (m *AuthProofReq) XXX_Unmarshal(b []byte) error { func (m *AuthProofReq) XXX_Unmarshal(b []byte) error {
...@@ -2428,9 +2380,9 @@ func (m *AuthProofReq) GetNoteHash() string { ...@@ -2428,9 +2380,9 @@ func (m *AuthProofReq) GetNoteHash() string {
return "" return ""
} }
func (m *AuthProofReq) GetAuthReturn() uint32 { func (m *AuthProofReq) GetToReturn() uint32 {
if m != nil { if m != nil {
return m.AuthReturn return m.ToReturn
} }
return 0 return 0
} }
...@@ -2453,7 +2405,7 @@ func (m *AuthProofResp) Reset() { *m = AuthProofResp{} } ...@@ -2453,7 +2405,7 @@ func (m *AuthProofResp) Reset() { *m = AuthProofResp{} }
func (m *AuthProofResp) String() string { return proto.CompactTextString(m) } func (m *AuthProofResp) String() string { return proto.CompactTextString(m) }
func (*AuthProofResp) ProtoMessage() {} func (*AuthProofResp) ProtoMessage() {}
func (*AuthProofResp) Descriptor() ([]byte, []int) { func (*AuthProofResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{41} return fileDescriptor_5c21d519a9be369a, []int{40}
} }
func (m *AuthProofResp) XXX_Unmarshal(b []byte) error { func (m *AuthProofResp) XXX_Unmarshal(b []byte) error {
...@@ -2530,6 +2482,441 @@ func (m *AuthProofResp) GetTreeProof() *TreePathProof { ...@@ -2530,6 +2482,441 @@ func (m *AuthProofResp) GetTreeProof() *TreePathProof {
return nil return nil
} }
type TransferProofReq struct {
NoteHash string `protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
ToAddr string `protobuf:"bytes,2,opt,name=toAddr,proto3" json:"toAddr,omitempty"`
ToAuthAddr string `protobuf:"bytes,3,opt,name=toAuthAddr,proto3" json:"toAuthAddr,omitempty"`
ReturnAddr string `protobuf:"bytes,4,opt,name=returnAddr,proto3" json:"returnAddr,omitempty"`
Amount uint64 `protobuf:"varint,5,opt,name=amount,proto3" json:"amount,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransferProofReq) Reset() { *m = TransferProofReq{} }
func (m *TransferProofReq) String() string { return proto.CompactTextString(m) }
func (*TransferProofReq) ProtoMessage() {}
func (*TransferProofReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{41}
}
func (m *TransferProofReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferProofReq.Unmarshal(m, b)
}
func (m *TransferProofReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransferProofReq.Marshal(b, m, deterministic)
}
func (m *TransferProofReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransferProofReq.Merge(m, src)
}
func (m *TransferProofReq) XXX_Size() int {
return xxx_messageInfo_TransferProofReq.Size(m)
}
func (m *TransferProofReq) XXX_DiscardUnknown() {
xxx_messageInfo_TransferProofReq.DiscardUnknown(m)
}
var xxx_messageInfo_TransferProofReq proto.InternalMessageInfo
func (m *TransferProofReq) GetNoteHash() string {
if m != nil {
return m.NoteHash
}
return ""
}
func (m *TransferProofReq) GetToAddr() string {
if m != nil {
return m.ToAddr
}
return ""
}
func (m *TransferProofReq) GetToAuthAddr() string {
if m != nil {
return m.ToAuthAddr
}
return ""
}
func (m *TransferProofReq) GetReturnAddr() string {
if m != nil {
return m.ReturnAddr
}
return ""
}
func (m *TransferProofReq) GetAmount() uint64 {
if m != nil {
return m.Amount
}
return 0
}
//加密了的input/output amount
type CommitValue struct {
X string `protobuf:"bytes,1,opt,name=X,proto3" json:"X,omitempty"`
Y string `protobuf:"bytes,2,opt,name=Y,proto3" json:"Y,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CommitValue) Reset() { *m = CommitValue{} }
func (m *CommitValue) String() string { return proto.CompactTextString(m) }
func (*CommitValue) ProtoMessage() {}
func (*CommitValue) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{42}
}
func (m *CommitValue) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommitValue.Unmarshal(m, b)
}
func (m *CommitValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CommitValue.Marshal(b, m, deterministic)
}
func (m *CommitValue) XXX_Merge(src proto.Message) {
xxx_messageInfo_CommitValue.Merge(m, src)
}
func (m *CommitValue) XXX_Size() int {
return xxx_messageInfo_CommitValue.Size(m)
}
func (m *CommitValue) XXX_DiscardUnknown() {
xxx_messageInfo_CommitValue.DiscardUnknown(m)
}
var xxx_messageInfo_CommitValue proto.InternalMessageInfo
func (m *CommitValue) GetX() string {
if m != nil {
return m.X
}
return ""
}
func (m *CommitValue) GetY() string {
if m != nil {
return m.Y
}
return ""
}
type TransferInputProof struct {
Proof *SecretData `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
NullifierHash string `protobuf:"bytes,2,opt,name=nullifierHash,proto3" json:"nullifierHash,omitempty"`
AuthSpendHash string `protobuf:"bytes,3,opt,name=authSpendHash,proto3" json:"authSpendHash,omitempty"`
NoteHash string `protobuf:"bytes,4,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
SpendPrivKey string `protobuf:"bytes,5,opt,name=spendPrivKey,proto3" json:"spendPrivKey,omitempty"`
SpendFlag uint32 `protobuf:"varint,6,opt,name=spendFlag,proto3" json:"spendFlag,omitempty"`
AuthFlag uint32 `protobuf:"varint,7,opt,name=authFlag,proto3" json:"authFlag,omitempty"`
TreeProof *TreePathProof `protobuf:"bytes,8,opt,name=treeProof,proto3" json:"treeProof,omitempty"`
CommitValue *CommitValue `protobuf:"bytes,9,opt,name=commitValue,proto3" json:"commitValue,omitempty"`
SpendRandom string `protobuf:"bytes,10,opt,name=spendRandom,proto3" json:"spendRandom,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransferInputProof) Reset() { *m = TransferInputProof{} }
func (m *TransferInputProof) String() string { return proto.CompactTextString(m) }
func (*TransferInputProof) ProtoMessage() {}
func (*TransferInputProof) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{43}
}
func (m *TransferInputProof) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferInputProof.Unmarshal(m, b)
}
func (m *TransferInputProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransferInputProof.Marshal(b, m, deterministic)
}
func (m *TransferInputProof) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransferInputProof.Merge(m, src)
}
func (m *TransferInputProof) XXX_Size() int {
return xxx_messageInfo_TransferInputProof.Size(m)
}
func (m *TransferInputProof) XXX_DiscardUnknown() {
xxx_messageInfo_TransferInputProof.DiscardUnknown(m)
}
var xxx_messageInfo_TransferInputProof proto.InternalMessageInfo
func (m *TransferInputProof) GetProof() *SecretData {
if m != nil {
return m.Proof
}
return nil
}
func (m *TransferInputProof) GetNullifierHash() string {
if m != nil {
return m.NullifierHash
}
return ""
}
func (m *TransferInputProof) GetAuthSpendHash() string {
if m != nil {
return m.AuthSpendHash
}
return ""
}
func (m *TransferInputProof) GetNoteHash() string {
if m != nil {
return m.NoteHash
}
return ""
}
func (m *TransferInputProof) GetSpendPrivKey() string {
if m != nil {
return m.SpendPrivKey
}
return ""
}
func (m *TransferInputProof) GetSpendFlag() uint32 {
if m != nil {
return m.SpendFlag
}
return 0
}
func (m *TransferInputProof) GetAuthFlag() uint32 {
if m != nil {
return m.AuthFlag
}
return 0
}
func (m *TransferInputProof) GetTreeProof() *TreePathProof {
if m != nil {
return m.TreeProof
}
return nil
}
func (m *TransferInputProof) GetCommitValue() *CommitValue {
if m != nil {
return m.CommitValue
}
return nil
}
func (m *TransferInputProof) GetSpendRandom() string {
if m != nil {
return m.SpendRandom
}
return ""
}
type TransferOutputProof struct {
Proof *SecretData `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"`
NoteHash string `protobuf:"bytes,2,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
Secrets *DHSecretGroup `protobuf:"bytes,3,opt,name=secrets,proto3" json:"secrets,omitempty"`
CommitValue *CommitValue `protobuf:"bytes,4,opt,name=commitValue,proto3" json:"commitValue,omitempty"`
SpendRandom string `protobuf:"bytes,5,opt,name=spendRandom,proto3" json:"spendRandom,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransferOutputProof) Reset() { *m = TransferOutputProof{} }
func (m *TransferOutputProof) String() string { return proto.CompactTextString(m) }
func (*TransferOutputProof) ProtoMessage() {}
func (*TransferOutputProof) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{44}
}
func (m *TransferOutputProof) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferOutputProof.Unmarshal(m, b)
}
func (m *TransferOutputProof) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransferOutputProof.Marshal(b, m, deterministic)
}
func (m *TransferOutputProof) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransferOutputProof.Merge(m, src)
}
func (m *TransferOutputProof) XXX_Size() int {
return xxx_messageInfo_TransferOutputProof.Size(m)
}
func (m *TransferOutputProof) XXX_DiscardUnknown() {
xxx_messageInfo_TransferOutputProof.DiscardUnknown(m)
}
var xxx_messageInfo_TransferOutputProof proto.InternalMessageInfo
func (m *TransferOutputProof) GetProof() *SecretData {
if m != nil {
return m.Proof
}
return nil
}
func (m *TransferOutputProof) GetNoteHash() string {
if m != nil {
return m.NoteHash
}
return ""
}
func (m *TransferOutputProof) GetSecrets() *DHSecretGroup {
if m != nil {
return m.Secrets
}
return nil
}
func (m *TransferOutputProof) GetCommitValue() *CommitValue {
if m != nil {
return m.CommitValue
}
return nil
}
func (m *TransferOutputProof) GetSpendRandom() string {
if m != nil {
return m.SpendRandom
}
return ""
}
type TransferProofResp struct {
TransferInput *TransferInputProof `protobuf:"bytes,1,opt,name=transferInput,proto3" json:"transferInput,omitempty"`
TargetOutput *TransferOutputProof `protobuf:"bytes,2,opt,name=targetOutput,proto3" json:"targetOutput,omitempty"`
ChangeOutput *TransferOutputProof `protobuf:"bytes,3,opt,name=changeOutput,proto3" json:"changeOutput,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TransferProofResp) Reset() { *m = TransferProofResp{} }
func (m *TransferProofResp) String() string { return proto.CompactTextString(m) }
func (*TransferProofResp) ProtoMessage() {}
func (*TransferProofResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{45}
}
func (m *TransferProofResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferProofResp.Unmarshal(m, b)
}
func (m *TransferProofResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_TransferProofResp.Marshal(b, m, deterministic)
}
func (m *TransferProofResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_TransferProofResp.Merge(m, src)
}
func (m *TransferProofResp) XXX_Size() int {
return xxx_messageInfo_TransferProofResp.Size(m)
}
func (m *TransferProofResp) XXX_DiscardUnknown() {
xxx_messageInfo_TransferProofResp.DiscardUnknown(m)
}
var xxx_messageInfo_TransferProofResp proto.InternalMessageInfo
func (m *TransferProofResp) GetTransferInput() *TransferInputProof {
if m != nil {
return m.TransferInput
}
return nil
}
func (m *TransferProofResp) GetTargetOutput() *TransferOutputProof {
if m != nil {
return m.TargetOutput
}
return nil
}
func (m *TransferProofResp) GetChangeOutput() *TransferOutputProof {
if m != nil {
return m.ChangeOutput
}
return nil
}
type CommitValueRst struct {
NoteRandom string `protobuf:"bytes,1,opt,name=noteRandom,proto3" json:"noteRandom,omitempty"`
TransferRandom string `protobuf:"bytes,2,opt,name=transferRandom,proto3" json:"transferRandom,omitempty"`
ChangeRandom string `protobuf:"bytes,3,opt,name=changeRandom,proto3" json:"changeRandom,omitempty"`
Note *CommitValue `protobuf:"bytes,4,opt,name=note,proto3" json:"note,omitempty"`
Transfer *CommitValue `protobuf:"bytes,5,opt,name=transfer,proto3" json:"transfer,omitempty"`
Change *CommitValue `protobuf:"bytes,6,opt,name=change,proto3" json:"change,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CommitValueRst) Reset() { *m = CommitValueRst{} }
func (m *CommitValueRst) String() string { return proto.CompactTextString(m) }
func (*CommitValueRst) ProtoMessage() {}
func (*CommitValueRst) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{46}
}
func (m *CommitValueRst) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommitValueRst.Unmarshal(m, b)
}
func (m *CommitValueRst) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CommitValueRst.Marshal(b, m, deterministic)
}
func (m *CommitValueRst) XXX_Merge(src proto.Message) {
xxx_messageInfo_CommitValueRst.Merge(m, src)
}
func (m *CommitValueRst) XXX_Size() int {
return xxx_messageInfo_CommitValueRst.Size(m)
}
func (m *CommitValueRst) XXX_DiscardUnknown() {
xxx_messageInfo_CommitValueRst.DiscardUnknown(m)
}
var xxx_messageInfo_CommitValueRst proto.InternalMessageInfo
func (m *CommitValueRst) GetNoteRandom() string {
if m != nil {
return m.NoteRandom
}
return ""
}
func (m *CommitValueRst) GetTransferRandom() string {
if m != nil {
return m.TransferRandom
}
return ""
}
func (m *CommitValueRst) GetChangeRandom() string {
if m != nil {
return m.ChangeRandom
}
return ""
}
func (m *CommitValueRst) GetNote() *CommitValue {
if m != nil {
return m.Note
}
return nil
}
func (m *CommitValueRst) GetTransfer() *CommitValue {
if m != nil {
return m.Transfer
}
return nil
}
func (m *CommitValueRst) GetChange() *CommitValue {
if m != nil {
return m.Change
}
return nil
}
type WalletIndexInfo struct { type WalletIndexInfo struct {
NoteHash string `protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"` NoteHash string `protobuf:"bytes,1,opt,name=noteHash,proto3" json:"noteHash,omitempty"`
Nullifier string `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` Nullifier string `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"`
...@@ -2547,7 +2934,7 @@ func (m *WalletIndexInfo) Reset() { *m = WalletIndexInfo{} } ...@@ -2547,7 +2934,7 @@ func (m *WalletIndexInfo) Reset() { *m = WalletIndexInfo{} }
func (m *WalletIndexInfo) String() string { return proto.CompactTextString(m) } func (m *WalletIndexInfo) String() string { return proto.CompactTextString(m) }
func (*WalletIndexInfo) ProtoMessage() {} func (*WalletIndexInfo) ProtoMessage() {}
func (*WalletIndexInfo) Descriptor() ([]byte, []int) { func (*WalletIndexInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{42} return fileDescriptor_5c21d519a9be369a, []int{47}
} }
func (m *WalletIndexInfo) XXX_Unmarshal(b []byte) error { func (m *WalletIndexInfo) XXX_Unmarshal(b []byte) error {
...@@ -2629,7 +3016,7 @@ func (m *WalletDbMixInfo) Reset() { *m = WalletDbMixInfo{} } ...@@ -2629,7 +3016,7 @@ func (m *WalletDbMixInfo) Reset() { *m = WalletDbMixInfo{} }
func (m *WalletDbMixInfo) String() string { return proto.CompactTextString(m) } func (m *WalletDbMixInfo) String() string { return proto.CompactTextString(m) }
func (*WalletDbMixInfo) ProtoMessage() {} func (*WalletDbMixInfo) ProtoMessage() {}
func (*WalletDbMixInfo) Descriptor() ([]byte, []int) { func (*WalletDbMixInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{43} return fileDescriptor_5c21d519a9be369a, []int{48}
} }
func (m *WalletDbMixInfo) XXX_Unmarshal(b []byte) error { func (m *WalletDbMixInfo) XXX_Unmarshal(b []byte) error {
...@@ -2681,7 +3068,7 @@ func (m *WalletMixIndexReq) Reset() { *m = WalletMixIndexReq{} } ...@@ -2681,7 +3068,7 @@ func (m *WalletMixIndexReq) Reset() { *m = WalletMixIndexReq{} }
func (m *WalletMixIndexReq) String() string { return proto.CompactTextString(m) } func (m *WalletMixIndexReq) String() string { return proto.CompactTextString(m) }
func (*WalletMixIndexReq) ProtoMessage() {} func (*WalletMixIndexReq) ProtoMessage() {}
func (*WalletMixIndexReq) Descriptor() ([]byte, []int) { func (*WalletMixIndexReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{44} return fileDescriptor_5c21d519a9be369a, []int{49}
} }
func (m *WalletMixIndexReq) XXX_Unmarshal(b []byte) error { func (m *WalletMixIndexReq) XXX_Unmarshal(b []byte) error {
...@@ -2762,7 +3149,7 @@ func (m *WalletIndexResp) Reset() { *m = WalletIndexResp{} } ...@@ -2762,7 +3149,7 @@ func (m *WalletIndexResp) Reset() { *m = WalletIndexResp{} }
func (m *WalletIndexResp) String() string { return proto.CompactTextString(m) } func (m *WalletIndexResp) String() string { return proto.CompactTextString(m) }
func (*WalletIndexResp) ProtoMessage() {} func (*WalletIndexResp) ProtoMessage() {}
func (*WalletIndexResp) Descriptor() ([]byte, []int) { func (*WalletIndexResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{45} return fileDescriptor_5c21d519a9be369a, []int{50}
} }
func (m *WalletIndexResp) XXX_Unmarshal(b []byte) error { func (m *WalletIndexResp) XXX_Unmarshal(b []byte) error {
...@@ -2801,7 +3188,7 @@ func (m *WalletReqAddrs) Reset() { *m = WalletReqAddrs{} } ...@@ -2801,7 +3188,7 @@ func (m *WalletReqAddrs) Reset() { *m = WalletReqAddrs{} }
func (m *WalletReqAddrs) String() string { return proto.CompactTextString(m) } func (m *WalletReqAddrs) String() string { return proto.CompactTextString(m) }
func (*WalletReqAddrs) ProtoMessage() {} func (*WalletReqAddrs) ProtoMessage() {}
func (*WalletReqAddrs) Descriptor() ([]byte, []int) { func (*WalletReqAddrs) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{46} return fileDescriptor_5c21d519a9be369a, []int{51}
} }
func (m *WalletReqAddrs) XXX_Unmarshal(b []byte) error { func (m *WalletReqAddrs) XXX_Unmarshal(b []byte) error {
...@@ -2842,7 +3229,7 @@ func (m *WalletEnablePrivacyRst) Reset() { *m = WalletEnablePrivacyRst{} ...@@ -2842,7 +3229,7 @@ func (m *WalletEnablePrivacyRst) Reset() { *m = WalletEnablePrivacyRst{}
func (m *WalletEnablePrivacyRst) String() string { return proto.CompactTextString(m) } func (m *WalletEnablePrivacyRst) String() string { return proto.CompactTextString(m) }
func (*WalletEnablePrivacyRst) ProtoMessage() {} func (*WalletEnablePrivacyRst) ProtoMessage() {}
func (*WalletEnablePrivacyRst) Descriptor() ([]byte, []int) { func (*WalletEnablePrivacyRst) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{47} return fileDescriptor_5c21d519a9be369a, []int{52}
} }
func (m *WalletEnablePrivacyRst) XXX_Unmarshal(b []byte) error { func (m *WalletEnablePrivacyRst) XXX_Unmarshal(b []byte) error {
...@@ -2895,7 +3282,7 @@ func (m *WalletEnablePrivacyResp) Reset() { *m = WalletEnablePrivacyResp ...@@ -2895,7 +3282,7 @@ func (m *WalletEnablePrivacyResp) Reset() { *m = WalletEnablePrivacyResp
func (m *WalletEnablePrivacyResp) String() string { return proto.CompactTextString(m) } func (m *WalletEnablePrivacyResp) String() string { return proto.CompactTextString(m) }
func (*WalletEnablePrivacyResp) ProtoMessage() {} func (*WalletEnablePrivacyResp) ProtoMessage() {}
func (*WalletEnablePrivacyResp) Descriptor() ([]byte, []int) { func (*WalletEnablePrivacyResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{48} return fileDescriptor_5c21d519a9be369a, []int{53}
} }
func (m *WalletEnablePrivacyResp) XXX_Unmarshal(b []byte) error { func (m *WalletEnablePrivacyResp) XXX_Unmarshal(b []byte) error {
...@@ -2936,7 +3323,7 @@ func (m *LocalMixTx) Reset() { *m = LocalMixTx{} } ...@@ -2936,7 +3323,7 @@ func (m *LocalMixTx) Reset() { *m = LocalMixTx{} }
func (m *LocalMixTx) String() string { return proto.CompactTextString(m) } func (m *LocalMixTx) String() string { return proto.CompactTextString(m) }
func (*LocalMixTx) ProtoMessage() {} func (*LocalMixTx) ProtoMessage() {}
func (*LocalMixTx) Descriptor() ([]byte, []int) { func (*LocalMixTx) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{49} return fileDescriptor_5c21d519a9be369a, []int{54}
} }
func (m *LocalMixTx) XXX_Unmarshal(b []byte) error { func (m *LocalMixTx) XXX_Unmarshal(b []byte) error {
...@@ -2994,7 +3381,7 @@ func (m *MixTxListReq) Reset() { *m = MixTxListReq{} } ...@@ -2994,7 +3381,7 @@ func (m *MixTxListReq) Reset() { *m = MixTxListReq{} }
func (m *MixTxListReq) String() string { return proto.CompactTextString(m) } func (m *MixTxListReq) String() string { return proto.CompactTextString(m) }
func (*MixTxListReq) ProtoMessage() {} func (*MixTxListReq) ProtoMessage() {}
func (*MixTxListReq) Descriptor() ([]byte, []int) { func (*MixTxListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{50} return fileDescriptor_5c21d519a9be369a, []int{55}
} }
func (m *MixTxListReq) XXX_Unmarshal(b []byte) error { func (m *MixTxListReq) XXX_Unmarshal(b []byte) error {
...@@ -3068,7 +3455,7 @@ func (m *MixTxListResp) Reset() { *m = MixTxListResp{} } ...@@ -3068,7 +3455,7 @@ func (m *MixTxListResp) Reset() { *m = MixTxListResp{} }
func (m *MixTxListResp) String() string { return proto.CompactTextString(m) } func (m *MixTxListResp) String() string { return proto.CompactTextString(m) }
func (*MixTxListResp) ProtoMessage() {} func (*MixTxListResp) ProtoMessage() {}
func (*MixTxListResp) Descriptor() ([]byte, []int) { func (*MixTxListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{51} return fileDescriptor_5c21d519a9be369a, []int{56}
} }
func (m *MixTxListResp) XXX_Unmarshal(b []byte) error { func (m *MixTxListResp) XXX_Unmarshal(b []byte) error {
...@@ -3109,7 +3496,7 @@ func (m *PrivacyAddrResult) Reset() { *m = PrivacyAddrResult{} } ...@@ -3109,7 +3496,7 @@ func (m *PrivacyAddrResult) Reset() { *m = PrivacyAddrResult{} }
func (m *PrivacyAddrResult) String() string { return proto.CompactTextString(m) } func (m *PrivacyAddrResult) String() string { return proto.CompactTextString(m) }
func (*PrivacyAddrResult) ProtoMessage() {} func (*PrivacyAddrResult) ProtoMessage() {}
func (*PrivacyAddrResult) Descriptor() ([]byte, []int) { func (*PrivacyAddrResult) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{52} return fileDescriptor_5c21d519a9be369a, []int{57}
} }
func (m *PrivacyAddrResult) XXX_Unmarshal(b []byte) error { func (m *PrivacyAddrResult) XXX_Unmarshal(b []byte) error {
...@@ -3162,7 +3549,7 @@ func (m *ReqEnablePrivacyRst) Reset() { *m = ReqEnablePrivacyRst{} } ...@@ -3162,7 +3549,7 @@ func (m *ReqEnablePrivacyRst) Reset() { *m = ReqEnablePrivacyRst{} }
func (m *ReqEnablePrivacyRst) String() string { return proto.CompactTextString(m) } func (m *ReqEnablePrivacyRst) String() string { return proto.CompactTextString(m) }
func (*ReqEnablePrivacyRst) ProtoMessage() {} func (*ReqEnablePrivacyRst) ProtoMessage() {}
func (*ReqEnablePrivacyRst) Descriptor() ([]byte, []int) { func (*ReqEnablePrivacyRst) Descriptor() ([]byte, []int) {
return fileDescriptor_5c21d519a9be369a, []int{53} return fileDescriptor_5c21d519a9be369a, []int{58}
} }
func (m *ReqEnablePrivacyRst) XXX_Unmarshal(b []byte) error { func (m *ReqEnablePrivacyRst) XXX_Unmarshal(b []byte) error {
...@@ -3211,7 +3598,6 @@ func init() { ...@@ -3211,7 +3598,6 @@ func init() {
proto.RegisterType((*MixAction)(nil), "types.MixAction") proto.RegisterType((*MixAction)(nil), "types.MixAction")
proto.RegisterType((*DepositPublicInput)(nil), "types.DepositPublicInput") proto.RegisterType((*DepositPublicInput)(nil), "types.DepositPublicInput")
proto.RegisterType((*WithdrawPublicInput)(nil), "types.WithdrawPublicInput") proto.RegisterType((*WithdrawPublicInput)(nil), "types.WithdrawPublicInput")
proto.RegisterType((*CommitAmount)(nil), "types.commitAmount")
proto.RegisterType((*TransferInputPublicInput)(nil), "types.TransferInputPublicInput") proto.RegisterType((*TransferInputPublicInput)(nil), "types.TransferInputPublicInput")
proto.RegisterType((*TransferOutputPublicInput)(nil), "types.TransferOutputPublicInput") proto.RegisterType((*TransferOutputPublicInput)(nil), "types.TransferOutputPublicInput")
proto.RegisterType((*AuthorizePublicInput)(nil), "types.AuthorizePublicInput") proto.RegisterType((*AuthorizePublicInput)(nil), "types.AuthorizePublicInput")
...@@ -3238,6 +3624,12 @@ func init() { ...@@ -3238,6 +3624,12 @@ func init() {
proto.RegisterType((*WithdrawProofResp)(nil), "types.WithdrawProofResp") proto.RegisterType((*WithdrawProofResp)(nil), "types.WithdrawProofResp")
proto.RegisterType((*AuthProofReq)(nil), "types.AuthProofReq") proto.RegisterType((*AuthProofReq)(nil), "types.AuthProofReq")
proto.RegisterType((*AuthProofResp)(nil), "types.AuthProofResp") proto.RegisterType((*AuthProofResp)(nil), "types.AuthProofResp")
proto.RegisterType((*TransferProofReq)(nil), "types.TransferProofReq")
proto.RegisterType((*CommitValue)(nil), "types.commitValue")
proto.RegisterType((*TransferInputProof)(nil), "types.TransferInputProof")
proto.RegisterType((*TransferOutputProof)(nil), "types.TransferOutputProof")
proto.RegisterType((*TransferProofResp)(nil), "types.TransferProofResp")
proto.RegisterType((*CommitValueRst)(nil), "types.CommitValueRst")
proto.RegisterType((*WalletIndexInfo)(nil), "types.WalletIndexInfo") proto.RegisterType((*WalletIndexInfo)(nil), "types.WalletIndexInfo")
proto.RegisterType((*WalletDbMixInfo)(nil), "types.WalletDbMixInfo") proto.RegisterType((*WalletDbMixInfo)(nil), "types.WalletDbMixInfo")
proto.RegisterType((*WalletMixIndexReq)(nil), "types.WalletMixIndexReq") proto.RegisterType((*WalletMixIndexReq)(nil), "types.WalletMixIndexReq")
...@@ -3257,149 +3649,164 @@ func init() { ...@@ -3257,149 +3649,164 @@ func init() {
} }
var fileDescriptor_5c21d519a9be369a = []byte{ var fileDescriptor_5c21d519a9be369a = []byte{
// 2266 bytes of a gzipped FileDescriptorProto // 2503 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x59, 0x4b, 0x93, 0x1b, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4b, 0x73, 0x1b, 0x4b,
0xf1, 0x57, 0xeb, 0xad, 0x94, 0x34, 0x23, 0x95, 0xbd, 0x5e, 0xed, 0xc4, 0x7f, 0xf7, 0x3f, 0xf4, 0x15, 0xf6, 0xe8, 0x69, 0x1d, 0x3d, 0x2c, 0x75, 0x72, 0x7d, 0x15, 0x17, 0x37, 0x98, 0xbe, 0xb9,
0x7a, 0x97, 0xd9, 0x31, 0x0c, 0xbb, 0xb2, 0x71, 0x40, 0x10, 0x40, 0x08, 0x4b, 0xb6, 0x64, 0x7b, 0xc1, 0x71, 0xc0, 0xdc, 0xab, 0x84, 0x14, 0x14, 0xc5, 0xbd, 0x25, 0x22, 0x39, 0xd2, 0x4d, 0x2c,
0x34, 0x8a, 0x92, 0xfc, 0xe4, 0x11, 0xd1, 0x23, 0xd5, 0x8c, 0x2a, 0x2c, 0x75, 0xf7, 0x74, 0xb7, 0xab, 0xda, 0xca, 0x93, 0x47, 0xd5, 0x58, 0x6a, 0x5b, 0x53, 0x91, 0x34, 0xe3, 0x99, 0x91, 0x23,
0xc6, 0x12, 0x37, 0x2e, 0x70, 0xe2, 0xc0, 0x85, 0x23, 0x04, 0x27, 0x22, 0x38, 0x13, 0x04, 0xc1, 0xb1, 0x82, 0x0d, 0xac, 0x28, 0x8a, 0x0d, 0x4b, 0x28, 0x56, 0x54, 0xb1, 0xa6, 0x28, 0x8a, 0x5f,
0x27, 0xe0, 0x2b, 0xf0, 0x2d, 0xf8, 0x08, 0x44, 0xbd, 0xba, 0xab, 0x7b, 0xa4, 0x79, 0x2c, 0xdc, 0xc0, 0x0f, 0x60, 0xc3, 0x96, 0x5f, 0xc0, 0x4f, 0xa0, 0xfa, 0x35, 0xd3, 0x33, 0x92, 0xfc, 0x08,
0x94, 0x59, 0xbf, 0xca, 0xca, 0xfc, 0x65, 0x56, 0x55, 0x76, 0x09, 0x4a, 0x73, 0xba, 0x3c, 0x70, 0x2c, 0xd9, 0xcd, 0x39, 0xfd, 0x75, 0xf7, 0xe9, 0xef, 0x9c, 0x3e, 0x7d, 0xba, 0x07, 0x72, 0x63,
0x3d, 0x27, 0x70, 0x50, 0x2e, 0x58, 0xb9, 0xc4, 0xdf, 0xa9, 0x8c, 0x9d, 0xf9, 0xdc, 0xb1, 0x85, 0x6b, 0xb6, 0xe7, 0xb8, 0xb6, 0x6f, 0xa3, 0xb4, 0x3f, 0x77, 0xa8, 0xb7, 0x55, 0xe8, 0xdb, 0xe3,
0x72, 0xa7, 0x1e, 0x78, 0x96, 0xed, 0x5b, 0xe3, 0x80, 0x2a, 0x95, 0xf9, 0x14, 0xca, 0x6f, 0xdf, 0xb1, 0x3d, 0x11, 0xca, 0xad, 0x8a, 0xef, 0x9a, 0x13, 0xcf, 0xec, 0xfb, 0x96, 0x52, 0xe1, 0x2f,
0xbd, 0x24, 0x1e, 0x3d, 0x59, 0x3d, 0x23, 0x2b, 0xf4, 0x19, 0x64, 0xd9, 0xc4, 0x86, 0xb1, 0x6b, 0x21, 0xff, 0xe6, 0xed, 0x0b, 0xea, 0x5a, 0x27, 0xf3, 0xa7, 0x74, 0x8e, 0x3e, 0x81, 0x14, 0xeb,
0xec, 0x6d, 0x35, 0xeb, 0x07, 0xdc, 0xca, 0x81, 0x18, 0x1f, 0xad, 0x5c, 0x82, 0xf9, 0x30, 0xba, 0x58, 0x35, 0xb6, 0x8d, 0x9d, 0x52, 0xad, 0xb2, 0xc7, 0x47, 0xd9, 0x13, 0xed, 0xbd, 0xb9, 0x43,
0x0d, 0xb9, 0x73, 0x6b, 0xb6, 0x20, 0x8d, 0xf4, 0xae, 0xb1, 0x57, 0xc2, 0x42, 0x30, 0x1f, 0x42, 0x09, 0x6f, 0x46, 0x37, 0x21, 0x7d, 0x6e, 0x8e, 0xa6, 0xb4, 0x9a, 0xd8, 0x36, 0x76, 0x72, 0x44,
0x45, 0xb3, 0xe5, 0xa3, 0xcf, 0x21, 0x3b, 0xb1, 0x02, 0xab, 0x61, 0xec, 0x66, 0xf6, 0xca, 0x4d, 0x08, 0xf8, 0x11, 0x14, 0xb4, 0xb1, 0x3c, 0x74, 0x17, 0x52, 0x03, 0xd3, 0x37, 0xab, 0xc6, 0x76,
0x24, 0x8d, 0x69, 0x10, 0xcc, 0xc7, 0xcd, 0x6f, 0x40, 0xb9, 0xb5, 0x08, 0xa6, 0x83, 0xc5, 0x31, 0x72, 0x27, 0x5f, 0x43, 0x72, 0x30, 0x0d, 0x42, 0x78, 0x3b, 0xfe, 0x1a, 0xe4, 0xeb, 0x53, 0x7f,
0x9f, 0x86, 0xb4, 0x69, 0x25, 0x09, 0x39, 0x03, 0x18, 0x58, 0xab, 0x39, 0xb1, 0x03, 0xe6, 0x25, 0xd8, 0x9d, 0x1e, 0xf3, 0x6e, 0x48, 0xeb, 0x96, 0x93, 0x90, 0x33, 0x80, 0xae, 0x39, 0x1f, 0xd3,
0x82, 0xac, 0x35, 0x99, 0x78, 0xdc, 0xcb, 0x12, 0xe6, 0xbf, 0xd1, 0xff, 0x41, 0xc9, 0xb5, 0x56, 0x89, 0xcf, 0xac, 0x44, 0x90, 0x32, 0x07, 0x03, 0x97, 0x5b, 0x99, 0x23, 0xfc, 0x1b, 0x7d, 0x05,
0xd4, 0x3e, 0x7d, 0x46, 0x56, 0xd2, 0xad, 0x48, 0x81, 0xbe, 0x82, 0x8a, 0x47, 0xc6, 0x84, 0x9e, 0x72, 0x8e, 0x39, 0xb7, 0x26, 0xa7, 0x4f, 0xe9, 0x5c, 0x9a, 0x15, 0x2a, 0xd0, 0x67, 0x50, 0x70,
0x4b, 0x40, 0x66, 0xd7, 0xd8, 0x2b, 0x37, 0xab, 0xd2, 0x25, 0xb1, 0x32, 0x8e, 0x41, 0xcc, 0x7f, 0x69, 0x9f, 0x5a, 0xe7, 0x12, 0x90, 0xdc, 0x36, 0x76, 0xf2, 0xb5, 0xa2, 0x34, 0x49, 0xcc, 0x4c,
0x1b, 0xb0, 0x7d, 0x48, 0x97, 0x8f, 0x1c, 0xfb, 0x84, 0x9e, 0xb6, 0x38, 0x67, 0xe8, 0x2e, 0xa4, 0x22, 0x10, 0xfc, 0x6f, 0x03, 0x36, 0x0e, 0xac, 0xd9, 0x63, 0x7b, 0x72, 0x62, 0x9d, 0xd6, 0x39,
0x47, 0x2b, 0x49, 0xce, 0x6d, 0x39, 0x39, 0xc4, 0x70, 0x7e, 0xd2, 0xa3, 0x15, 0xba, 0x07, 0x79, 0x67, 0xe8, 0x0e, 0x24, 0x7a, 0x73, 0x49, 0xce, 0x4d, 0xd9, 0x39, 0xc0, 0x70, 0x7e, 0x12, 0xbd,
0x81, 0xe7, 0x7e, 0x6c, 0x35, 0x6f, 0x25, 0x91, 0xad, 0x71, 0x80, 0x25, 0x04, 0x35, 0xa1, 0x74, 0x39, 0xba, 0x0f, 0x19, 0x81, 0xe7, 0x76, 0x94, 0x6a, 0x37, 0xe2, 0xc8, 0x7a, 0xdf, 0x27, 0x12,
0xae, 0xf8, 0x90, 0x6e, 0xad, 0x61, 0xaa, 0x9b, 0xc2, 0x11, 0x0c, 0x35, 0x20, 0x6f, 0x31, 0xc2, 0x82, 0x6a, 0x90, 0x3b, 0x57, 0x7c, 0x48, 0xb3, 0x96, 0x30, 0xd5, 0x5a, 0x23, 0x21, 0x0c, 0x55,
0xde, 0x35, 0xb2, 0x2c, 0xd0, 0x6e, 0x0a, 0x4b, 0x19, 0xdd, 0x07, 0x70, 0x43, 0x9e, 0x1a, 0x39, 0x21, 0x63, 0x32, 0xc2, 0xde, 0x56, 0x53, 0x6c, 0xa1, 0xad, 0x35, 0x22, 0x65, 0xf4, 0x00, 0xc0,
0x6e, 0x4e, 0x65, 0x31, 0x22, 0xb0, 0x9b, 0xc2, 0x1a, 0xec, 0x27, 0x05, 0x99, 0x4d, 0xf3, 0x11, 0x09, 0x78, 0xaa, 0xa6, 0xf9, 0x70, 0xca, 0x8b, 0x21, 0x81, 0xad, 0x35, 0xa2, 0xc1, 0x7e, 0x90,
0x14, 0xdb, 0xdd, 0x21, 0x19, 0x7b, 0x24, 0x40, 0xff, 0x0f, 0x19, 0xe2, 0xbe, 0xe3, 0xb1, 0x5e, 0x95, 0xde, 0xc4, 0x8f, 0x61, 0xbd, 0xd1, 0x3a, 0xa2, 0x7d, 0x97, 0xfa, 0xe8, 0xab, 0x90, 0xa4,
0x20, 0x8a, 0x8d, 0xa0, 0x3b, 0x90, 0xf7, 0x39, 0x94, 0x7b, 0x5d, 0xc2, 0x52, 0x32, 0x7f, 0x6f, 0xce, 0x5b, 0xbe, 0xd6, 0x05, 0xa2, 0x58, 0x0b, 0xda, 0x84, 0x8c, 0xc7, 0xa1, 0xdc, 0xea, 0x1c,
0x40, 0x55, 0x59, 0x79, 0xe2, 0x39, 0x0b, 0x17, 0x7d, 0x01, 0x05, 0xb9, 0x9a, 0x34, 0xb7, 0x2d, 0x91, 0x12, 0xfe, 0xad, 0x01, 0x45, 0x35, 0xca, 0x13, 0xd7, 0x9e, 0x3a, 0xe8, 0x1e, 0x64, 0xe5,
0xcd, 0x29, 0x18, 0x56, 0xe3, 0xe8, 0x1e, 0x14, 0x3d, 0x12, 0x2c, 0x3c, 0x9b, 0x78, 0x9c, 0xbc, 0x6c, 0x72, 0xb8, 0x0d, 0x39, 0x9c, 0x82, 0x11, 0xd5, 0x8e, 0xee, 0xc3, 0xba, 0x4b, 0xfd, 0xa9,
0x35, 0xd8, 0x10, 0x80, 0xbe, 0x0d, 0x25, 0x16, 0xb6, 0xe3, 0xd1, 0x5f, 0x12, 0x49, 0xdd, 0x05, 0x3b, 0xa1, 0x2e, 0x27, 0x6f, 0x09, 0x36, 0x00, 0xa0, 0x6f, 0x42, 0x8e, 0x2d, 0xdb, 0x76, 0xad,
0x74, 0x84, 0x30, 0xcf, 0x58, 0xa9, 0x0f, 0x3c, 0xc7, 0x39, 0xe9, 0xd9, 0x27, 0x0e, 0xab, 0x61, 0x9f, 0x52, 0x49, 0xdd, 0x02, 0x3a, 0x44, 0xe0, 0x33, 0x16, 0xea, 0x5d, 0xd7, 0xb6, 0x4f, 0xda,
0x97, 0x09, 0xb2, 0x8a, 0x84, 0x80, 0x76, 0xa1, 0xec, 0x2e, 0x8e, 0x67, 0x74, 0xdc, 0xb3, 0xdd, 0x93, 0x13, 0x9b, 0xc5, 0xb0, 0xc3, 0x04, 0x19, 0x45, 0x42, 0x40, 0xdb, 0x90, 0x77, 0xa6, 0xc7,
0x45, 0x20, 0x0b, 0x49, 0x57, 0xa1, 0x7d, 0xc8, 0x9d, 0xb2, 0xb0, 0xe4, 0x8a, 0xb7, 0x13, 0x2b, 0x23, 0xab, 0xdf, 0x9e, 0x38, 0x53, 0x5f, 0x06, 0x92, 0xae, 0x42, 0xbb, 0x90, 0x3e, 0x65, 0xcb,
0xf2, 0x90, 0xb1, 0x80, 0x98, 0xbf, 0x80, 0xda, 0x21, 0x5d, 0xb6, 0x89, 0xeb, 0xf8, 0x34, 0x90, 0x92, 0x33, 0xde, 0x8c, 0xcd, 0xc8, 0x97, 0x4c, 0x04, 0x04, 0xff, 0x04, 0xca, 0x07, 0xd6, 0xac,
0x09, 0xbf, 0x03, 0x79, 0x6b, 0xee, 0x2c, 0x24, 0x19, 0x59, 0x2c, 0x25, 0xd4, 0x04, 0xb0, 0xc9, 0x41, 0x1d, 0xdb, 0xb3, 0x7c, 0xe9, 0xf0, 0x4d, 0xc8, 0x98, 0x63, 0x7b, 0x2a, 0xc9, 0x48, 0x11,
0xfb, 0x47, 0xce, 0x7c, 0x4e, 0x03, 0xbf, 0x91, 0x4e, 0xec, 0x99, 0xd0, 0x6f, 0xac, 0xa1, 0x4c, 0x29, 0xa1, 0x1a, 0xc0, 0x84, 0xbe, 0x7b, 0x6c, 0x8f, 0xc7, 0x96, 0xef, 0x55, 0x13, 0xb1, 0x3d,
0x0a, 0xf5, 0x43, 0xba, 0x1c, 0xb1, 0x5d, 0x7d, 0x42, 0x3c, 0xb9, 0xc0, 0x1e, 0xe4, 0x28, 0x77, 0x13, 0xd8, 0x4d, 0x34, 0x14, 0xb6, 0xa0, 0x72, 0x60, 0xcd, 0x7a, 0x6c, 0x57, 0x9f, 0x50, 0x57,
0xde, 0xd8, 0x68, 0x43, 0x00, 0xd0, 0x3e, 0xe4, 0x9d, 0x45, 0x20, 0xe2, 0xdc, 0x04, 0x95, 0x08, 0x4e, 0xb0, 0x03, 0x69, 0x8b, 0x1b, 0x6f, 0xac, 0x1c, 0x43, 0x00, 0xd0, 0x2e, 0x64, 0xec, 0xa9,
0x73, 0xcc, 0x97, 0x7a, 0x45, 0x83, 0xe9, 0xc4, 0xb3, 0xde, 0x5f, 0x11, 0xcb, 0x43, 0xa8, 0xf8, 0x2f, 0xd6, 0xb9, 0x0a, 0x2a, 0x11, 0xb8, 0xcf, 0xa7, 0x7a, 0x69, 0xf9, 0xc3, 0x81, 0x6b, 0xbe,
0x2e, 0xb1, 0x27, 0x57, 0x47, 0x13, 0xc3, 0x99, 0x4f, 0x01, 0x1d, 0xd2, 0x65, 0x4b, 0xa5, 0x4c, 0xbb, 0x64, 0x2d, 0x8f, 0xa0, 0xe0, 0x39, 0x74, 0x32, 0xb8, 0x7c, 0x35, 0x11, 0x1c, 0xfe, 0x12,
0xae, 0xf2, 0x00, 0xca, 0x2c, 0x8b, 0xca, 0xd8, 0xe6, 0xb0, 0x74, 0x98, 0xf9, 0xb7, 0x34, 0x94, 0xd0, 0x81, 0x35, 0xab, 0x2b, 0x97, 0xc9, 0x59, 0x1e, 0x42, 0x9e, 0x79, 0x51, 0x0d, 0xb6, 0x7a,
0x98, 0x31, 0x61, 0x63, 0x0b, 0xd2, 0x81, 0xd8, 0xb9, 0x39, 0x9c, 0x0e, 0x56, 0xe8, 0x4b, 0xc8, 0x59, 0x3a, 0x0c, 0xff, 0x25, 0x01, 0x39, 0x36, 0x98, 0x18, 0xa3, 0x04, 0x09, 0x5f, 0xec, 0xdc,
0x8f, 0xf9, 0x5e, 0x94, 0x65, 0x76, 0x67, 0xcd, 0x1e, 0xa5, 0x8e, 0xcd, 0xb6, 0x96, 0xc0, 0xa1, 0x34, 0x49, 0xf8, 0x73, 0xf4, 0x29, 0x64, 0xfa, 0x7c, 0x2f, 0xca, 0x30, 0xdb, 0x5c, 0xb2, 0x47,
0xfb, 0x50, 0x98, 0x88, 0x44, 0xca, 0xcc, 0x7f, 0x18, 0x4d, 0x89, 0x65, 0xb8, 0x9b, 0xc2, 0x0a, 0x2d, 0x7b, 0xc2, 0xb6, 0x96, 0xc0, 0xa1, 0x07, 0x90, 0x1d, 0x08, 0x47, 0x4a, 0xcf, 0x7f, 0x18,
0x89, 0x1e, 0x42, 0xf1, 0xbd, 0xa4, 0x8c, 0xef, 0xd5, 0x72, 0xb3, 0x11, 0xcd, 0x8a, 0x93, 0xd9, 0x76, 0x89, 0x78, 0xb8, 0xb5, 0x46, 0x14, 0x12, 0x3d, 0x82, 0xf5, 0x77, 0x92, 0x32, 0xbe, 0x57,
0x4d, 0xe1, 0x10, 0xcb, 0xe6, 0x05, 0x32, 0xab, 0x72, 0x17, 0x6b, 0xf3, 0xe2, 0xf9, 0x66, 0xf3, 0xf3, 0xb5, 0x6a, 0xd8, 0x2b, 0x4a, 0x66, 0x6b, 0x8d, 0x04, 0x58, 0xd6, 0xcf, 0x97, 0x5e, 0x95,
0x14, 0x16, 0x7d, 0x5f, 0xdf, 0x12, 0x79, 0x3e, 0xf1, 0xa3, 0x68, 0x62, 0x82, 0x58, 0x76, 0xa8, 0xbb, 0x58, 0xeb, 0x17, 0xf5, 0x37, 0xeb, 0xa7, 0xb0, 0xe8, 0xbb, 0xfa, 0x96, 0xc8, 0xf0, 0x8e,
0x84, 0xe8, 0xe8, 0x14, 0xe8, 0x02, 0x92, 0xf1, 0x0c, 0xb4, 0xb2, 0xdf, 0x81, 0xa2, 0xed, 0x04, 0xb7, 0xc2, 0x8e, 0x31, 0x62, 0x59, 0x52, 0x09, 0xd0, 0x61, 0x16, 0x68, 0x01, 0x92, 0xeb, 0xe9,
0xa4, 0x6b, 0xf9, 0x53, 0xb9, 0x63, 0x42, 0x59, 0x2b, 0x03, 0xb1, 0x5f, 0xa4, 0x64, 0xfe, 0xd9, 0x6a, 0x61, 0xbf, 0x05, 0xeb, 0x13, 0xdb, 0xa7, 0x2d, 0xd3, 0x1b, 0xca, 0x1d, 0x13, 0xc8, 0x5a,
0x80, 0x5b, 0x2a, 0x48, 0xdd, 0x96, 0x09, 0x95, 0xc0, 0x23, 0x04, 0x3b, 0x4e, 0xa0, 0xd9, 0x8b, 0x18, 0x88, 0xfd, 0x22, 0x25, 0xfc, 0x47, 0x03, 0x6e, 0xa8, 0x45, 0xea, 0x63, 0x61, 0x28, 0xf8,
0xe9, 0xd0, 0x5d, 0xa8, 0xda, 0x8b, 0xd9, 0x8c, 0x9e, 0x50, 0xe2, 0x71, 0x90, 0x30, 0x1d, 0x57, 0x2e, 0xa5, 0xc4, 0xb6, 0x7d, 0x6d, 0xbc, 0x88, 0x0e, 0xdd, 0x81, 0xe2, 0x64, 0x3a, 0x1a, 0x59,
0xa2, 0x03, 0x40, 0x61, 0x04, 0x43, 0x56, 0x49, 0x1c, 0x2a, 0x0e, 0xa4, 0x35, 0x23, 0x9a, 0xa7, 0x27, 0x16, 0x75, 0x39, 0x48, 0x0c, 0x1d, 0x55, 0xa2, 0x3d, 0x40, 0xc1, 0x0a, 0x8e, 0x58, 0x24,
0xd9, 0x98, 0xa7, 0xfb, 0xc0, 0x6f, 0x4a, 0x1a, 0xb4, 0x44, 0x01, 0x57, 0xc0, 0x78, 0x2d, 0xdd, 0x71, 0xa8, 0x48, 0x48, 0x4b, 0x5a, 0x34, 0x4b, 0x53, 0x11, 0x4b, 0xff, 0x6e, 0x40, 0x55, 0xd1,
0x32, 0x5e, 0x33, 0xe9, 0x8d, 0x5c, 0xdf, 0x78, 0x63, 0xfe, 0xd3, 0x80, 0x86, 0x4a, 0x01, 0x8f, 0xca, 0x6d, 0xbc, 0xae, 0xb9, 0x55, 0xc8, 0x8a, 0xa1, 0x5e, 0x49, 0x43, 0x95, 0x18, 0xb6, 0xbc,
0xe7, 0xa6, 0xa1, 0x35, 0xa0, 0x20, 0x96, 0x7d, 0x2d, 0x8d, 0x2a, 0x31, 0x1a, 0x79, 0x23, 0x63, 0x96, 0x76, 0x29, 0x71, 0x85, 0xf1, 0xa9, 0x95, 0xc6, 0x2f, 0x50, 0x92, 0x5e, 0x42, 0x09, 0xfe,
0x50, 0xe2, 0x86, 0x40, 0xb3, 0x1b, 0x03, 0xbd, 0x40, 0x5f, 0x6e, 0x0d, 0x7d, 0xe6, 0x1f, 0x0d, 0xbd, 0x01, 0xb7, 0xd4, 0x52, 0x0e, 0xf9, 0xde, 0xbd, 0xaa, 0x1b, 0xdf, 0x67, 0x0d, 0x35, 0xc8,
0xf8, 0x48, 0x85, 0x72, 0xc4, 0xf7, 0xf9, 0x75, 0x53, 0xfe, 0x75, 0x62, 0x68, 0x42, 0x69, 0x32, 0x0d, 0x86, 0x22, 0xf3, 0x79, 0x32, 0xc2, 0x97, 0x67, 0xc4, 0x10, 0x86, 0xff, 0x66, 0xc0, 0xcd,
0x15, 0xa7, 0xa4, 0x2f, 0x77, 0xc3, 0xfa, 0xd3, 0x33, 0x82, 0x99, 0xff, 0x30, 0xe0, 0x76, 0x58, 0x20, 0x14, 0xaf, 0x4b, 0xf4, 0x0e, 0x6c, 0x98, 0x5a, 0xdf, 0xf0, 0xb4, 0x8f, 0xab, 0x19, 0x5d,
0xb6, 0x37, 0x25, 0x7a, 0x0f, 0xb6, 0x2d, 0x6d, 0x6e, 0xd4, 0x19, 0x24, 0xd5, 0x8c, 0xae, 0x50, 0x81, 0x4a, 0x0b, 0x8b, 0xa8, 0xf2, 0xba, 0x4e, 0xc0, 0xdb, 0x00, 0xcd, 0x99, 0xe5, 0xf9, 0x2f,
0xa5, 0x95, 0x50, 0x5c, 0x79, 0xd3, 0x24, 0x98, 0xbb, 0x00, 0x9d, 0x25, 0xf5, 0x83, 0x97, 0x6c, 0xd8, 0x5e, 0xd1, 0x6a, 0x15, 0x63, 0x67, 0x5d, 0xd6, 0x2a, 0x77, 0xa1, 0x2c, 0x72, 0x50, 0xcf,
0x5f, 0x69, 0x7d, 0x8d, 0xb1, 0x57, 0x94, 0x7d, 0xcd, 0xe7, 0x50, 0x13, 0xe7, 0xd5, 0xc8, 0x23, 0xa5, 0xf4, 0x19, 0x35, 0xcf, 0x69, 0xb4, 0xa6, 0x29, 0x48, 0xdc, 0x27, 0xb0, 0x11, 0xe2, 0xd8,
0xe4, 0x39, 0xb1, 0xce, 0x49, 0xbc, 0xff, 0xa9, 0x48, 0xdc, 0x67, 0xb0, 0x1d, 0xe1, 0x58, 0x7c, 0xfa, 0x96, 0xc3, 0xfe, 0x60, 0xe8, 0xb8, 0xae, 0x6b, 0x9f, 0x53, 0xe6, 0x45, 0x37, 0x4a, 0x52,
0xeb, 0x61, 0x7f, 0x32, 0x74, 0xdc, 0xc0, 0x73, 0xce, 0x09, 0xcb, 0xa2, 0x17, 0x27, 0x29, 0x94, 0x20, 0xb3, 0x36, 0x7e, 0x94, 0x1d, 0x51, 0x91, 0xd6, 0x73, 0x24, 0x90, 0xd1, 0x6d, 0x00, 0x47,
0xd9, 0x18, 0xbf, 0xf6, 0x86, 0x44, 0x5c, 0x01, 0x25, 0x1c, 0xca, 0xe8, 0x13, 0x00, 0x57, 0x9c, 0x64, 0xcb, 0x01, 0x9d, 0x71, 0x3e, 0x8a, 0x44, 0xd3, 0xb0, 0x22, 0x6a, 0x32, 0x1d, 0x0b, 0x9b,
0xac, 0x13, 0xb2, 0xe4, 0x7c, 0x54, 0xb1, 0xa6, 0x61, 0x0d, 0x97, 0xbd, 0x98, 0x0b, 0x9f, 0x39, 0x39, 0x07, 0x45, 0x12, 0x2a, 0x58, 0x14, 0x0c, 0xe9, 0xc8, 0xa1, 0xae, 0x57, 0x4d, 0x6f, 0x27,
0x07, 0x55, 0x1c, 0x29, 0x58, 0x15, 0x4c, 0xc9, 0xcc, 0x25, 0x9e, 0xdf, 0xc8, 0xed, 0x66, 0xf6, 0x77, 0x8a, 0x44, 0x89, 0xb8, 0x09, 0x79, 0x66, 0x1c, 0x4f, 0xc2, 0xf4, 0xec, 0x32, 0xf3, 0x46,
0xaa, 0x58, 0x89, 0x66, 0x07, 0xca, 0xcc, 0x39, 0x7e, 0x60, 0x93, 0xb3, 0xab, 0xdc, 0x9b, 0x11, 0xd4, 0x3c, 0xd1, 0xb6, 0x74, 0x20, 0xe3, 0x3b, 0x50, 0xe0, 0x9c, 0x59, 0x9e, 0x4f, 0xa8, 0xe7,
0xeb, 0x44, 0xdb, 0xfe, 0xa1, 0x6c, 0xde, 0x85, 0x0a, 0xe7, 0x8c, 0xfa, 0x01, 0x26, 0xbe, 0xcb, 0xb0, 0x23, 0x9a, 0x51, 0xe0, 0xc9, 0x52, 0x50, 0x08, 0xb8, 0x01, 0xa5, 0xb0, 0x94, 0xe9, 0x9a,
0xae, 0x73, 0x46, 0x81, 0x2f, 0xdb, 0x46, 0x21, 0x98, 0x6d, 0xd8, 0x8a, 0xda, 0x9e, 0x81, 0x45, 0x96, 0xcb, 0x76, 0xb5, 0x63, 0xf2, 0x02, 0x4a, 0xcc, 0x26, 0x25, 0x36, 0x17, 0x3f, 0x5e, 0xc2,
0x3d, 0x76, 0x02, 0xb8, 0x16, 0x6f, 0xb6, 0xc4, 0x6a, 0x52, 0x62, 0x6b, 0xf1, 0xab, 0x28, 0x2a, 0x20, 0x09, 0x64, 0x7c, 0x07, 0x32, 0x32, 0x4e, 0x0a, 0x60, 0xbc, 0x92, 0x1d, 0x8d, 0x57, 0x4c,
0x92, 0x50, 0x36, 0xef, 0x42, 0x5e, 0xd6, 0xc9, 0x65, 0xe7, 0xc2, 0xc7, 0x50, 0x18, 0x78, 0xf4, 0x7a, 0x2d, 0xc1, 0xc6, 0x6b, 0xfc, 0x11, 0x64, 0xbb, 0xae, 0x75, 0x2e, 0x8b, 0xce, 0xc0, 0xd5,
0x5c, 0x36, 0xa8, 0x61, 0xaa, 0x55, 0x0b, 0xeb, 0x00, 0x1a, 0x4e, 0x2d, 0x8f, 0x88, 0xca, 0x56, 0xaa, 0x2c, 0xb5, 0x01, 0x1d, 0x0d, 0x4d, 0x97, 0x8a, 0xc8, 0x56, 0xe6, 0xec, 0x40, 0xd6, 0x11,
0xee, 0xec, 0x41, 0xc1, 0x15, 0x93, 0x64, 0x6f, 0xb4, 0xa5, 0x5a, 0x2d, 0xa1, 0xc5, 0x6a, 0x18, 0x9d, 0x64, 0xbd, 0x53, 0x52, 0xe5, 0x93, 0xd0, 0x12, 0xd5, 0x8c, 0xbe, 0x05, 0xf9, 0xa0, 0xe6,
0x7d, 0x07, 0xca, 0x61, 0x7f, 0x3a, 0x78, 0x27, 0xaf, 0xad, 0x44, 0x63, 0xa6, 0x23, 0xcc, 0xdf, 0xec, 0xbe, 0x95, 0x47, 0x51, 0xac, 0xd8, 0xd2, 0x11, 0xf8, 0x57, 0x06, 0x54, 0xea, 0xfd, 0x3e,
0x1a, 0x50, 0x6f, 0x8d, 0xc7, 0x6c, 0xef, 0x31, 0x63, 0xd6, 0x98, 0xc7, 0xf9, 0xdd, 0x58, 0x87, 0xdb, 0x7b, 0x6c, 0x30, 0xb3, 0xcf, 0xd7, 0xf9, 0xed, 0x48, 0xd5, 0x27, 0xe6, 0xfc, 0x60, 0xa1,
0x28, 0xd6, 0xfc, 0xe0, 0x42, 0x87, 0xc8, 0x7c, 0xd3, 0x7b, 0x44, 0xd4, 0x82, 0x2d, 0x3f, 0xe6, 0xea, 0x63, 0xb6, 0xe9, 0x75, 0x1f, 0xaa, 0x43, 0xc9, 0x8b, 0x58, 0x2f, 0x0d, 0x50, 0x27, 0xc6,
0xbd, 0x74, 0x40, 0xdd, 0x2e, 0x17, 0x43, 0xc3, 0x89, 0x09, 0xe6, 0x4f, 0xa1, 0xfe, 0xca, 0x9a, 0xe2, 0xd2, 0x48, 0xac, 0x03, 0xfe, 0x21, 0x54, 0x5e, 0x9a, 0xa3, 0x11, 0xf5, 0xeb, 0x83, 0x81,
0xcd, 0x48, 0xd0, 0x9a, 0x4c, 0x3c, 0xe9, 0x11, 0x6a, 0x8a, 0xf8, 0xad, 0xb1, 0xf2, 0x45, 0xdd, 0x2b, 0x2d, 0x42, 0x35, 0xb1, 0x7e, 0xb3, 0xaf, 0x6c, 0x51, 0x67, 0xd7, 0x82, 0xe5, 0x44, 0x01,
0x73, 0x17, 0x3c, 0xc7, 0x0a, 0x18, 0xb6, 0xff, 0xe9, 0xa8, 0xfd, 0x37, 0xff, 0x6e, 0x00, 0x88, 0x83, 0x92, 0x3e, 0x11, 0x96, 0xf4, 0xf8, 0xaf, 0x06, 0x80, 0x98, 0xaa, 0x61, 0xfa, 0x26, 0xdb,
0xa5, 0xda, 0x56, 0x60, 0xb1, 0xfd, 0x2c, 0x9d, 0x97, 0xfb, 0x5e, 0x64, 0x22, 0xae, 0x64, 0x67, 0xcf, 0xd2, 0x78, 0xb9, 0xef, 0x85, 0x27, 0xa2, 0x4a, 0x96, 0x43, 0x44, 0x81, 0x18, 0x49, 0x0e,
0x88, 0x68, 0x26, 0x63, 0x87, 0x43, 0x4c, 0xb7, 0xee, 0x0c, 0xc9, 0xac, 0x3f, 0x43, 0x36, 0xdc, 0x11, 0xdd, 0xb2, 0x1c, 0x92, 0x5c, 0x9e, 0x43, 0x56, 0x9c, 0x17, 0x6c, 0x23, 0xb1, 0xb4, 0x49,
0x2d, 0x6c, 0x23, 0xb1, 0x63, 0x13, 0x5b, 0xf6, 0xc4, 0x99, 0xcb, 0x73, 0x58, 0xd3, 0x98, 0x6f, 0xcc, 0xc9, 0xc0, 0x1e, 0xcb, 0x3c, 0xac, 0x69, 0xf0, 0x1b, 0xa8, 0x34, 0x27, 0x7d, 0x7b, 0x40,
0xa1, 0xde, 0xb1, 0xc7, 0xce, 0x84, 0x4c, 0xb4, 0x00, 0x1a, 0x50, 0x20, 0x42, 0x29, 0x5d, 0x57, 0x07, 0xda, 0x02, 0xaa, 0x90, 0xa5, 0x42, 0x29, 0x4d, 0x57, 0x22, 0xba, 0x0f, 0x59, 0xd7, 0x7c,
0x22, 0xba, 0x07, 0x05, 0xcf, 0x7a, 0xcf, 0x40, 0x32, 0x05, 0xaa, 0xbf, 0x8f, 0x66, 0x63, 0x85, 0xc7, 0x40, 0xd2, 0x05, 0xaa, 0x66, 0x0f, 0x7b, 0x13, 0x85, 0xc0, 0x3f, 0xe2, 0x63, 0xbb, 0x73,
0x30, 0x7f, 0xc6, 0x6d, 0x7b, 0x2b, 0x37, 0xd0, 0x6c, 0x47, 0x9d, 0xbb, 0xa1, 0x77, 0xee, 0x37, 0xc7, 0xd7, 0xc6, 0x0e, 0xab, 0x71, 0x43, 0xaf, 0xc6, 0xaf, 0x1f, 0x61, 0xbf, 0x30, 0xa0, 0xd2,
0xaf, 0xb0, 0x5f, 0x1b, 0x50, 0x6f, 0x93, 0xeb, 0x9a, 0xff, 0x1e, 0x6c, 0x47, 0x93, 0x3d, 0x1a, 0xa0, 0x57, 0x1d, 0xfe, 0x3b, 0xb0, 0x11, 0x76, 0x76, 0xad, 0x30, 0x86, 0xe2, 0x21, 0x1f, 0x87,
0xd5, 0x50, 0xb2, 0xe4, 0x93, 0x30, 0xf5, 0x2d, 0x92, 0xd9, 0xf4, 0x2d, 0x62, 0xfe, 0xce, 0x80, 0xa9, 0xfb, 0x45, 0x72, 0xd5, 0xfd, 0x02, 0xff, 0xc6, 0x80, 0x0d, 0x55, 0x87, 0xb0, 0x0c, 0xc5,
0x6d, 0xd5, 0xb3, 0xb0, 0x13, 0x8a, 0x1d, 0x2c, 0xac, 0x93, 0x17, 0xd9, 0x6e, 0x45, 0xdf, 0x8a, 0x12, 0x0b, 0xab, 0xce, 0x85, 0xb7, 0xeb, 0xe1, 0xfd, 0x4f, 0x57, 0x31, 0xc7, 0x08, 0x57, 0xd7,
0xba, 0x8a, 0x25, 0x46, 0xa4, 0xba, 0x15, 0x55, 0x93, 0xa6, 0x89, 0x5d, 0x0a, 0x1c, 0x92, 0xbc, 0xc3, 0x68, 0xd2, 0x34, 0x91, 0x43, 0x81, 0x43, 0xe2, 0x87, 0x02, 0x47, 0x45, 0xdd, 0x1e, 0xd4,
0x14, 0x38, 0x6a, 0x53, 0x4b, 0xf1, 0x1b, 0x03, 0x6a, 0x71, 0x9f, 0x7c, 0xf7, 0xd2, 0x2b, 0xf5, 0xb5, 0xf8, 0x97, 0x06, 0x94, 0xa3, 0x36, 0x79, 0xce, 0x85, 0x47, 0xea, 0xd7, 0xd5, 0x25, 0x63,
0x9b, 0xea, 0x83, 0x64, 0x63, 0x5a, 0xe5, 0x37, 0xca, 0x01, 0x14, 0x7c, 0x79, 0x8b, 0x5e, 0xf6, 0xa5, 0x5b, 0xe5, 0xbd, 0x63, 0x0f, 0xb2, 0x9e, 0x3c, 0x45, 0x2f, 0xba, 0x57, 0x28, 0x10, 0xb3,
0x0d, 0xa2, 0x40, 0xcc, 0x93, 0x2a, 0xbf, 0x0f, 0xac, 0x60, 0xca, 0x5d, 0xb9, 0xd6, 0xe5, 0xb9, 0xa4, 0xc8, 0xcf, 0x03, 0xd3, 0x1f, 0x72, 0x53, 0xae, 0x74, 0x78, 0x6e, 0xb1, 0xb2, 0x52, 0x74,
0xc3, 0x5a, 0x50, 0x31, 0x49, 0xdd, 0x0d, 0x4a, 0xd6, 0x4f, 0xf7, 0x4c, 0xec, 0x74, 0x67, 0xb7, 0x52, 0x67, 0x83, 0x92, 0xf5, 0xec, 0x9e, 0x8c, 0x64, 0x77, 0x76, 0x2a, 0x9c, 0x9b, 0x23, 0x6b,
0xc2, 0xb9, 0x35, 0xa3, 0x13, 0x3e, 0x2d, 0xcb, 0xc7, 0x22, 0x85, 0x79, 0x00, 0xb5, 0xb0, 0x1f, 0xc0, 0xbb, 0xa5, 0x78, 0x5b, 0xa8, 0xc0, 0x7b, 0x50, 0x0e, 0x6a, 0x3c, 0xe5, 0xa7, 0x0b, 0x28,
0x54, 0x79, 0xba, 0x84, 0x12, 0xd6, 0xc3, 0xd7, 0x13, 0x13, 0x7c, 0x37, 0x22, 0xca, 0xb8, 0x82, 0x61, 0x75, 0x79, 0x25, 0xd6, 0xc1, 0x73, 0x42, 0xa2, 0x8c, 0x4b, 0x88, 0xba, 0x5a, 0x5d, 0x28,
0xa8, 0xeb, 0xf5, 0x90, 0x32, 0xcd, 0xc9, 0xf6, 0x31, 0xae, 0x8c, 0xb9, 0x99, 0x4d, 0x64, 0xce, 0xdd, 0x1c, 0x2f, 0x09, 0xa3, 0xca, 0x88, 0x99, 0xa9, 0x98, 0xe7, 0xb0, 0xbc, 0xc2, 0xc8, 0x00,
0x94, 0x9f, 0x3b, 0xb2, 0x80, 0xe5, 0x1e, 0x8f, 0xe9, 0x18, 0x31, 0x5c, 0x7e, 0x3c, 0xb3, 0x4e, 0x96, 0x7b, 0x3c, 0xa2, 0x63, 0xc4, 0x70, 0x79, 0x7f, 0x64, 0x9e, 0xf2, 0x6a, 0xbb, 0x48, 0x42,
0x79, 0x67, 0x5e, 0xc5, 0x91, 0x82, 0x59, 0x67, 0xcb, 0xf1, 0xc1, 0x02, 0x1f, 0x0c, 0x65, 0xd6, 0x05, 0x1b, 0x9d, 0x4d, 0xc7, 0x1b, 0xb3, 0xbc, 0x31, 0x90, 0x59, 0xd9, 0xe4, 0x8b, 0xd3, 0xdc,
0x36, 0x05, 0xe2, 0x36, 0x77, 0x4e, 0x1a, 0xc5, 0x58, 0xc2, 0x63, 0x59, 0xc5, 0x11, 0xcc, 0x7c, 0x3e, 0xa9, 0xae, 0x47, 0x1c, 0x1e, 0xf1, 0x2a, 0x09, 0x61, 0x78, 0x1f, 0x0a, 0xfc, 0x99, 0xe4,
0x0a, 0x15, 0xfe, 0xa4, 0x72, 0x0d, 0x92, 0xd9, 0x36, 0x60, 0x6b, 0x61, 0x5e, 0xf8, 0x9c, 0xa2, 0x0a, 0x24, 0x73, 0x47, 0xdb, 0x84, 0x87, 0x3d, 0x27, 0xa8, 0x48, 0x02, 0x19, 0xff, 0x29, 0x01,
0x2a, 0xd6, 0x34, 0xe6, 0x5f, 0xd2, 0x50, 0xd5, 0x8c, 0xdd, 0x24, 0x01, 0xd2, 0x74, 0xec, 0x78, 0x45, 0x6d, 0xa0, 0xeb, 0x90, 0x7f, 0x1b, 0xc0, 0x0c, 0x5e, 0x6a, 0xd4, 0xee, 0x0a, 0x35, 0x6c,
0xd5, 0x34, 0x6c, 0x8f, 0x72, 0x49, 0xf2, 0x26, 0x88, 0xd7, 0x55, 0x8a, 0x18, 0x9d, 0x76, 0x25, 0x7f, 0x72, 0x49, 0x72, 0x26, 0x48, 0xd7, 0x55, 0x8a, 0x14, 0x9d, 0x72, 0x25, 0x2f, 0x3a, 0x2d,
0x5f, 0x4c, 0x5c, 0xee, 0xaa, 0xc4, 0xe5, 0x13, 0xa1, 0xc7, 0x92, 0x52, 0x48, 0x26, 0xe5, 0xeb, 0x7d, 0x99, 0xd3, 0x32, 0xb1, 0x65, 0x47, 0x1c, 0x92, 0x8d, 0x3b, 0xe4, 0x7d, 0x48, 0xff, 0x9d,
0x10, 0xff, 0xab, 0x34, 0x6c, 0x8b, 0x5b, 0x8e, 0x77, 0x49, 0xfc, 0xa5, 0xe1, 0x32, 0xf2, 0x79, 0x01, 0x65, 0x55, 0x4d, 0x5f, 0x89, 0xf9, 0x4d, 0xc8, 0xf8, 0xb6, 0x96, 0x7c, 0xa4, 0xc4, 0xa8,
0x17, 0x25, 0xab, 0x51, 0x3d, 0x5b, 0x85, 0x8a, 0x6b, 0x96, 0xe6, 0x27, 0x00, 0xd4, 0xc7, 0xea, 0xf3, 0x6d, 0x46, 0xbb, 0x96, 0x75, 0x34, 0x4d, 0x2c, 0x71, 0xa5, 0x16, 0x12, 0x57, 0x98, 0x92,
0xd9, 0x24, 0xcb, 0xdb, 0x4b, 0x4d, 0xc3, 0x3b, 0x72, 0x71, 0x9b, 0x4a, 0x86, 0x94, 0x88, 0xbe, 0xd2, 0x91, 0x94, 0x74, 0x0f, 0xf2, 0x7d, 0x5e, 0x1d, 0x8a, 0x82, 0xf4, 0xa2, 0x62, 0xe6, 0xd7,
0x80, 0xbc, 0x1f, 0x58, 0xc1, 0xc2, 0xe7, 0xcc, 0x44, 0x0f, 0x7e, 0x7d, 0x27, 0x20, 0x43, 0x3e, 0x49, 0x40, 0xd1, 0x4b, 0x0e, 0x77, 0xea, 0xff, 0xb7, 0xde, 0x65, 0x51, 0x80, 0x1e, 0x46, 0x48,
0x80, 0x25, 0x80, 0x43, 0xc5, 0xa9, 0x5e, 0xd8, 0x94, 0x74, 0xf5, 0x02, 0xf4, 0x4a, 0x51, 0xd0, 0xae, 0xe6, 0x22, 0xcf, 0x74, 0x5a, 0x0b, 0x89, 0xf8, 0x62, 0x1b, 0xf2, 0xdc, 0x24, 0x59, 0x25,
0x3e, 0x3e, 0xa4, 0x82, 0x82, 0x7d, 0xc8, 0x52, 0xfb, 0xc4, 0x91, 0x05, 0xa3, 0x3e, 0xb6, 0x13, 0x80, 0xd8, 0x0d, 0x9a, 0x0a, 0xff, 0xcb, 0x80, 0x1b, 0xb1, 0xbb, 0xda, 0xf5, 0x5c, 0xa2, 0xd3,
0x44, 0x61, 0x8e, 0x61, 0xee, 0x06, 0x4b, 0xd1, 0x75, 0xca, 0x4f, 0x0b, 0x29, 0x9a, 0xff, 0x32, 0x98, 0x88, 0xd1, 0x78, 0xcd, 0x23, 0x25, 0xbe, 0xc8, 0xd4, 0x7b, 0x2d, 0x32, 0xbd, 0xb8, 0xc8,
0x54, 0x0b, 0xc1, 0xed, 0x4e, 0xc8, 0xf2, 0xaa, 0xda, 0xfe, 0x5f, 0xd0, 0xbb, 0x99, 0xbe, 0x3b, 0x7f, 0x18, 0x50, 0x89, 0x6d, 0x21, 0xcf, 0x41, 0x5f, 0x40, 0xd1, 0xd7, 0x63, 0x51, 0x2e, 0xf5,
0x31, 0xfa, 0x72, 0x21, 0x57, 0xb7, 0x21, 0x27, 0xf0, 0x05, 0xae, 0x16, 0x02, 0xf3, 0x65, 0x42, 0x56, 0xe0, 0x8a, 0x78, 0x9c, 0x92, 0x28, 0x1e, 0x7d, 0x0e, 0x05, 0xdf, 0x74, 0x4f, 0xa9, 0x7f,
0x3d, 0x22, 0x5e, 0x06, 0x8b, 0x7c, 0x24, 0x52, 0x98, 0x3f, 0x8e, 0xd5, 0x0d, 0xdf, 0x66, 0xdf, 0xa8, 0x9e, 0xb0, 0x58, 0xff, 0xad, 0x58, 0x7f, 0x8d, 0x55, 0x12, 0xc1, 0xb3, 0xfe, 0xfd, 0xa1,
0xd2, 0x5b, 0xda, 0xcd, 0xac, 0xc9, 0x56, 0xf7, 0x2e, 0x6c, 0x89, 0x11, 0x4c, 0xce, 0xd8, 0xc5, 0x39, 0x39, 0xa5, 0xb2, 0x7f, 0xf2, 0xf2, 0xfe, 0x3a, 0x1e, 0xff, 0x2c, 0x01, 0xa5, 0xc7, 0x1a,
0xb4, 0xfe, 0x21, 0x15, 0xc3, 0x1d, 0x81, 0xea, 0xd8, 0xd6, 0xf1, 0x8c, 0xc8, 0xf6, 0x0a, 0xfb, 0x2b, 0x5e, 0xbc, 0x2a, 0x34, 0xe2, 0x55, 0x21, 0xba, 0x0b, 0x25, 0xb5, 0x06, 0x89, 0x11, 0x3e,
0xc1, 0xda, 0x47, 0x55, 0x04, 0x59, 0xea, 0x1f, 0x3d, 0xe3, 0xcc, 0x15, 0x31, 0xff, 0x8d, 0x6a, 0x8b, 0x69, 0xd9, 0x06, 0x10, 0x53, 0x49, 0x94, 0xd8, 0x41, 0x11, 0x1d, 0xba, 0x0b, 0x29, 0x36,
0x90, 0x99, 0xfb, 0xa7, 0x92, 0x2a, 0xf6, 0xd3, 0x7c, 0x0e, 0x1f, 0xae, 0xb3, 0xc9, 0x42, 0xf8, 0xf2, 0x05, 0x6e, 0xe2, 0xed, 0x68, 0x6f, 0xe1, 0x25, 0x69, 0x19, 0x36, 0x7c, 0x41, 0xda, 0x85,
0x2a, 0xf6, 0x04, 0xfc, 0x71, 0x2c, 0x82, 0xa4, 0x07, 0xd2, 0xc3, 0x3e, 0xc0, 0x73, 0x67, 0x6c, 0x8c, 0x98, 0x47, 0x3e, 0x1f, 0x2d, 0x43, 0x4b, 0x04, 0xfe, 0x79, 0x02, 0x36, 0x44, 0xf9, 0xcf,
0xcd, 0x0e, 0xe9, 0x72, 0xb4, 0x64, 0x1e, 0x4c, 0xa3, 0xc4, 0xf2, 0xdf, 0x8c, 0xf6, 0x29, 0xa1, 0xaf, 0x8f, 0xfc, 0x59, 0xf5, 0xa2, 0xdc, 0xc8, 0xaf, 0x97, 0x32, 0x57, 0xa8, 0x37, 0xfa, 0x40,
0xa7, 0x53, 0xf1, 0xdc, 0x90, 0xc1, 0x52, 0x62, 0xb4, 0xd3, 0xf0, 0x63, 0x25, 0x83, 0x85, 0x60, 0x71, 0xc5, 0xc4, 0x71, 0x1b, 0xc0, 0xf2, 0x88, 0x7a, 0x23, 0x4e, 0xf1, 0x7b, 0xb7, 0xa6, 0xe1,
0xfe, 0xc1, 0x80, 0x0a, 0xb7, 0x25, 0x3e, 0x15, 0xce, 0xf4, 0xfa, 0x32, 0x62, 0xf5, 0x15, 0x2e, 0x4f, 0x15, 0xe2, 0x9a, 0x21, 0x63, 0x51, 0x89, 0xe8, 0x1e, 0x64, 0x3c, 0xdf, 0xf4, 0xa7, 0x1e,
0x96, 0x5e, 0xbb, 0x58, 0x66, 0xfd, 0x62, 0x59, 0x6d, 0xb1, 0x28, 0xf3, 0xb9, 0x8d, 0x99, 0xcf, 0x5f, 0x59, 0xf8, 0x77, 0xa3, 0x63, 0xfb, 0xf4, 0x88, 0x37, 0x10, 0x09, 0xe0, 0x50, 0x51, 0xee,
0x27, 0x33, 0xff, 0x00, 0xaa, 0x9a, 0x7f, 0xbe, 0x8b, 0x3e, 0x85, 0x4c, 0xb0, 0x54, 0x59, 0x57, 0x66, 0x57, 0x6d, 0x40, 0xf5, 0xdc, 0xfd, 0x52, 0x51, 0xd0, 0x38, 0x3e, 0xb0, 0x04, 0x05, 0xbb,
0xfb, 0x2c, 0xe2, 0x04, 0xb3, 0x51, 0xf3, 0x10, 0xea, 0x92, 0x3a, 0x96, 0x6c, 0x4c, 0xfc, 0xc5, 0x90, 0xb2, 0x26, 0x27, 0xb6, 0x8c, 0x68, 0xf5, 0xb2, 0x18, 0x23, 0x8a, 0x70, 0x0c, 0x33, 0xd7,
0xec, 0xbf, 0xc9, 0x61, 0x0f, 0x6e, 0x61, 0x72, 0x76, 0xa1, 0x28, 0x9a, 0x50, 0xf0, 0xb8, 0x69, 0x9f, 0x89, 0xeb, 0xb8, 0x7c, 0x73, 0x91, 0x22, 0xfe, 0xa7, 0xa1, 0xee, 0x56, 0x7c, 0xdc, 0x01,
0xe5, 0x4e, 0x43, 0xeb, 0xd5, 0x62, 0x6b, 0x63, 0x05, 0xdc, 0xff, 0x39, 0x40, 0xf4, 0x87, 0x01, 0x9d, 0x5d, 0x76, 0xf4, 0xfc, 0x2f, 0xe8, 0x5d, 0x4d, 0xdf, 0x66, 0x84, 0xbe, 0x74, 0xc0, 0xd5,
0x2a, 0x43, 0xa1, 0xdd, 0x19, 0x1c, 0x0d, 0x7b, 0xa3, 0x5a, 0x0a, 0x55, 0xa0, 0xf8, 0xaa, 0x37, 0x4d, 0x48, 0x0b, 0x7c, 0x96, 0xab, 0x85, 0xc0, 0x6c, 0x19, 0x58, 0x2e, 0x15, 0xbf, 0x41, 0xd6,
0xea, 0xb6, 0x71, 0xeb, 0x55, 0xcd, 0x40, 0x75, 0xa8, 0x8e, 0x70, 0xab, 0x3f, 0x7c, 0xdc, 0xc1, 0x79, 0x4b, 0xa8, 0xc0, 0x5f, 0x44, 0xe2, 0x86, 0xe7, 0x83, 0x6f, 0xe8, 0x77, 0xfd, 0xd5, 0xac,
0xbd, 0xfe, 0xe0, 0xc5, 0xa8, 0x96, 0x46, 0x08, 0xb6, 0x94, 0xea, 0xe8, 0xc5, 0x88, 0xe9, 0x32, 0xc9, 0x37, 0x80, 0x3b, 0x50, 0x12, 0x2d, 0x84, 0x9e, 0xb1, 0xe3, 0x71, 0xf9, 0x5f, 0x23, 0x02,
0xa8, 0x0a, 0xa5, 0xd6, 0x8b, 0x51, 0xf7, 0x08, 0xf7, 0xde, 0x76, 0x6a, 0xd9, 0xfd, 0x16, 0xa7, 0x9b, 0x02, 0xd5, 0x9c, 0x98, 0xc7, 0x23, 0x2a, 0xef, 0x9d, 0x6c, 0xa7, 0x2e, 0xfb, 0x83, 0x84,
0x2b, 0x7a, 0x72, 0x67, 0xe3, 0xe1, 0x3b, 0x79, 0x2d, 0x85, 0xb6, 0x00, 0xa2, 0x7f, 0x13, 0xc4, 0x20, 0x65, 0x79, 0x87, 0x4f, 0x39, 0x73, 0xeb, 0x84, 0x7f, 0xa3, 0x32, 0x24, 0xc7, 0xde, 0xa9,
0x2a, 0x03, 0xbd, 0xeb, 0xaf, 0xa5, 0xf7, 0x3f, 0xe5, 0x15, 0x11, 0xbe, 0xf3, 0xa1, 0x02, 0x64, 0xa4, 0x8a, 0x7d, 0xe2, 0x67, 0xf0, 0xe1, 0xb2, 0x31, 0xd9, 0x12, 0x3e, 0x8b, 0xfc, 0xef, 0xfa,
0x5a, 0x93, 0x49, 0x2d, 0x85, 0x00, 0xf2, 0x6d, 0x32, 0x23, 0x01, 0xa9, 0x19, 0xfb, 0x3f, 0x00, 0x28, 0xb2, 0x82, 0xb8, 0x05, 0xd2, 0xc2, 0x0e, 0xc0, 0x33, 0xbb, 0x6f, 0x8e, 0x0e, 0xac, 0x59,
0x88, 0x8e, 0x41, 0x54, 0x82, 0xdc, 0x8b, 0x7e, 0xbb, 0xf3, 0x58, 0x80, 0x1e, 0xe3, 0xa3, 0xb7, 0x6f, 0xc6, 0x2c, 0x18, 0x86, 0x8e, 0xe5, 0xdf, 0x8c, 0xf6, 0x21, 0xb5, 0x4e, 0x87, 0x22, 0xc1,
0x9d, 0x7e, 0xcd, 0x60, 0xea, 0x97, 0xad, 0xe7, 0xbd, 0x76, 0x2d, 0xcd, 0x02, 0xed, 0xf5, 0x85, 0x25, 0x89, 0x94, 0x18, 0xed, 0x56, 0xf0, 0x8a, 0x93, 0x24, 0x42, 0x60, 0xe5, 0x4a, 0x81, 0x8f,
0x90, 0xd9, 0xff, 0x21, 0x7c, 0x70, 0x48, 0x97, 0x6a, 0x3f, 0xfa, 0x63, 0xcb, 0x96, 0x76, 0x8a, 0x25, 0xde, 0x50, 0xce, 0xf4, 0xf8, 0x32, 0x22, 0xf1, 0x15, 0x4c, 0x96, 0x58, 0x3a, 0x59, 0x72,
0x90, 0xed, 0xb5, 0x9f, 0x77, 0x04, 0x17, 0xc3, 0x47, 0xad, 0x7e, 0xbf, 0xd7, 0x7f, 0x52, 0x33, 0xf9, 0x64, 0x29, 0x6d, 0xb2, 0xd0, 0xf3, 0xe9, 0x95, 0x9e, 0xcf, 0xc4, 0x3d, 0xff, 0x10, 0x8a,
0x98, 0xf4, 0xb8, 0xd7, 0xef, 0x0d, 0xbb, 0x9d, 0x76, 0x2d, 0xdd, 0xfc, 0xab, 0x01, 0x30, 0xa7, 0x9a, 0x7d, 0x9e, 0x83, 0x3e, 0x86, 0xa4, 0x3f, 0x53, 0x5e, 0x57, 0xfb, 0x2c, 0xe4, 0x84, 0xb0,
0x4b, 0xf5, 0x91, 0xf4, 0x00, 0xb6, 0x9f, 0x24, 0xec, 0xa8, 0x2e, 0x18, 0x93, 0xb3, 0x3e, 0x9d, 0x56, 0x7c, 0x00, 0x15, 0x49, 0x1d, 0x73, 0x36, 0xa1, 0xde, 0x74, 0xf4, 0xdf, 0xf8, 0xb0, 0x0d,
0xed, 0xd4, 0x22, 0x71, 0x18, 0x78, 0xd4, 0x3e, 0x35, 0x53, 0xe8, 0x4b, 0x28, 0x8b, 0x29, 0x2c, 0x37, 0x08, 0x3d, 0x5b, 0x08, 0x8a, 0x1a, 0x64, 0x5d, 0x3e, 0xb4, 0x32, 0xa7, 0xaa, 0x5d, 0x62,
0x8c, 0x6b, 0xcd, 0xf8, 0x11, 0x54, 0x63, 0x15, 0x80, 0xb6, 0x23, 0x10, 0x3f, 0x52, 0x76, 0x76, 0x23, 0x73, 0x13, 0x05, 0xdc, 0xfd, 0x31, 0x40, 0xf8, 0x77, 0x14, 0xe5, 0x21, 0xdb, 0x68, 0x76,
0x22, 0x45, 0xb2, 0x56, 0xcc, 0xd4, 0x71, 0x9e, 0xff, 0xa7, 0x74, 0xff, 0x3f, 0x01, 0x00, 0x00, 0x0f, 0x8f, 0xda, 0xbd, 0xf2, 0x1a, 0x2a, 0xc0, 0xfa, 0xcb, 0x76, 0xaf, 0xd5, 0x20, 0xf5, 0x97,
0xff, 0xff, 0xb2, 0x56, 0xda, 0xeb, 0x88, 0x1a, 0x00, 0x00, 0x65, 0x03, 0x55, 0xa0, 0xd8, 0x23, 0xf5, 0xce, 0xd1, 0x7e, 0x93, 0xb4, 0x3b, 0xdd, 0xe7, 0xbd,
0x72, 0x02, 0x21, 0x28, 0x29, 0xd5, 0xe1, 0xf3, 0x1e, 0xd3, 0x25, 0x51, 0x11, 0x72, 0xf5, 0xe7,
0xbd, 0xd6, 0x21, 0x69, 0xbf, 0x69, 0x96, 0x53, 0xbb, 0x75, 0x4e, 0x57, 0xf8, 0x7f, 0x91, 0xb5,
0x07, 0x3f, 0x05, 0xcb, 0x6b, 0xa8, 0x04, 0x10, 0xfe, 0x3a, 0x15, 0xb3, 0x74, 0xf5, 0xe7, 0x90,
0x72, 0x62, 0xf7, 0x63, 0x1e, 0x11, 0xc1, 0x4f, 0x0d, 0x94, 0x85, 0x64, 0x7d, 0x30, 0x28, 0xaf,
0x21, 0x80, 0x4c, 0x83, 0x8e, 0xa8, 0x4f, 0xcb, 0xc6, 0xee, 0xf7, 0x00, 0xc2, 0x34, 0x88, 0x72,
0x90, 0x7e, 0xde, 0x69, 0x34, 0xf7, 0x05, 0x68, 0x9f, 0x1c, 0xbe, 0x69, 0x76, 0xca, 0x06, 0x53,
0xbf, 0xa8, 0x3f, 0x6b, 0x37, 0xca, 0x09, 0xb6, 0xd0, 0x76, 0x47, 0x08, 0xc9, 0xdd, 0xef, 0xc3,
0x07, 0x07, 0xd6, 0x4c, 0xed, 0x47, 0xaf, 0x6f, 0x4e, 0xe4, 0x38, 0xeb, 0x90, 0x6a, 0x37, 0x9e,
0x35, 0x05, 0x17, 0x47, 0x8f, 0xeb, 0x9d, 0x4e, 0xbb, 0xf3, 0xa4, 0x6c, 0x30, 0x69, 0xbf, 0xdd,
0x69, 0x1f, 0xb5, 0x9a, 0x8d, 0x72, 0xa2, 0xf6, 0x67, 0x03, 0x60, 0x6c, 0xcd, 0xd4, 0xeb, 0xd1,
0x43, 0xd8, 0x78, 0x12, 0x1b, 0x47, 0x3d, 0x0f, 0x10, 0x7a, 0xd6, 0xb1, 0x46, 0x5b, 0xe5, 0x50,
0x3c, 0xf2, 0x5d, 0x6b, 0x72, 0x8a, 0xd7, 0xd0, 0xa7, 0x90, 0x17, 0x5d, 0xd8, 0x32, 0xae, 0xd4,
0xe3, 0x73, 0x28, 0x46, 0x22, 0x00, 0x6d, 0x84, 0x20, 0x9e, 0x52, 0xb6, 0xb6, 0x42, 0x45, 0x3c,
0x56, 0xf0, 0xda, 0x71, 0x86, 0xff, 0x40, 0x7f, 0xf0, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e,
0xab, 0x71, 0x40, 0x75, 0x1f, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
......
...@@ -13,6 +13,8 @@ import ( ...@@ -13,6 +13,8 @@ import (
log "github.com/33cn/chain33/common/log/log15" log "github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
"github.com/consensys/gurvy/bn256/fr"
"github.com/consensys/gurvy/bn256/twistededwards"
) )
var ( var (
...@@ -205,3 +207,40 @@ func DecodePubInput(ty VerifyType, input string) (interface{}, error) { ...@@ -205,3 +207,40 @@ func DecodePubInput(ty VerifyType, input string) (interface{}, error) {
} }
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
func MulCurvePointG(val interface{}) *twistededwards.Point {
v := fr.FromInterface(val)
var point twistededwards.Point
ed := twistededwards.GetEdwardsCurve()
point.ScalarMul(&ed.Base, *v.FromMont())
return &point
}
func MulCurvePointH(val string) *twistededwards.Point {
v := fr.FromInterface(val)
var pointV, pointH twistededwards.Point
pointH.X.SetString(PointHX)
pointH.Y.SetString(PointHY)
pointV.ScalarMul(&pointH, *v.FromMont())
return &pointV
}
//A=B+C
func CheckSumEqual(points ...*twistededwards.Point) bool {
if len(points) < 2 {
return false
}
//Add之前需初始化pointSum,不能空值,不然会等于0
pointSum := twistededwards.NewPoint(points[1].X, points[1].Y)
for _, a := range points[2:] {
pointSum.Add(&pointSum, a)
}
if pointSum.X.Equal(&points[0].X) && pointSum.Y.Equal(&points[0].Y) {
return true
}
return false
}
...@@ -54,3 +54,11 @@ func (policy *mixPolicy) On_DepositProof(req *mixTy.DepositProofReq) (types.Mess ...@@ -54,3 +54,11 @@ func (policy *mixPolicy) On_DepositProof(req *mixTy.DepositProofReq) (types.Mess
func (policy *mixPolicy) On_WithdrawProof(req *mixTy.WithdrawProofReq) (types.Message, error) { func (policy *mixPolicy) On_WithdrawProof(req *mixTy.WithdrawProofReq) (types.Message, error) {
return policy.withdrawProof(req) return policy.withdrawProof(req)
} }
func (policy *mixPolicy) On_AuthProof(req *mixTy.AuthProofReq) (types.Message, error) {
return policy.authProof(req)
}
func (policy *mixPolicy) On_TransferProof(req *mixTy.TransferProofReq) (types.Message, error) {
return policy.transferProof(req)
}
...@@ -41,9 +41,10 @@ func TestNewPrivacyWithPrivKey(t *testing.T) { ...@@ -41,9 +41,10 @@ func TestNewPrivacyWithPrivKey(t *testing.T) {
// NoteRandom:"2824204835", // NoteRandom:"2824204835",
// Amount:"28242048", // Amount:"28242048",
//} //}
pub1, cryptData1, err := encryptData(pairs.ShareSecretKey.ReceivingPk, types.Encode(secret1)) data := encryptData(pairs.ShareSecretKey.ReceivingPk, types.Encode(secret1))
crypData, err := common.FromHex(data.Secret)
assert.Nil(t, err) assert.Nil(t, err)
decryData1, err := decryptData(pairs.ShareSecretKey.PrivKey, pub1, cryptData1) decryData1, err := decryptData(pairs.ShareSecretKey.PrivKey, data.Epk, crypData)
assert.Nil(t, err) assert.Nil(t, err)
var val mixTy.SecretData var val mixTy.SecretData
err = types.Decode(decryData1, &val) err = types.Decode(decryData1, &val)
......
...@@ -12,13 +12,10 @@ import ( ...@@ -12,13 +12,10 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"github.com/pkg/errors"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/crypto" "github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
mixExec "github.com/33cn/plugin/plugin/dapp/mix/executor"
mixTy "github.com/33cn/plugin/plugin/dapp/mix/types" mixTy "github.com/33cn/plugin/plugin/dapp/mix/types"
) )
...@@ -102,31 +99,32 @@ func (pubkey *MixSignPublicKey) Bytes() []byte { ...@@ -102,31 +99,32 @@ func (pubkey *MixSignPublicKey) Bytes() []byte {
return pubkey.key[:] return pubkey.key[:]
} }
func verifyCommitAmount(transfer *mixTy.MixTransferAction) error { //
var inputs []*mixTy.TransferInputPublicInput //func verifyCommitAmount(transfer *mixTy.MixTransferAction) error {
var outputs []*mixTy.TransferOutputPublicInput // var inputs []*mixTy.TransferInputPublicInput
// var outputs []*mixTy.TransferOutputPublicInput
for _, k := range transfer.Input { //
v, err := mixTy.DecodePubInput(mixTy.VerifyType_TRANSFERINPUT, k.PublicInput) // for _, k := range transfer.Input {
if err != nil { // v, err := mixTy.DecodePubInput(mixTy.VerifyType_TRANSFERINPUT, k.PublicInput)
return errors.Wrap(types.ErrInvalidParam, "decode transfer Input") // if err != nil {
} // return errors.Wrap(types.ErrInvalidParam, "decode transfer Input")
inputs = append(inputs, v.(*mixTy.TransferInputPublicInput)) // }
} // inputs = append(inputs, v.(*mixTy.TransferInputPublicInput))
// }
for _, k := range transfer.Output { //
v, err := mixTy.DecodePubInput(mixTy.VerifyType_TRANSFEROUTPUT, k.PublicInput) // for _, k := range transfer.Output {
if err != nil { // v, err := mixTy.DecodePubInput(mixTy.VerifyType_TRANSFEROUTPUT, k.PublicInput)
return errors.Wrap(types.ErrInvalidParam, "decode transfer output") // if err != nil {
} // return errors.Wrap(types.ErrInvalidParam, "decode transfer output")
outputs = append(outputs, v.(*mixTy.TransferOutputPublicInput)) // }
} // outputs = append(outputs, v.(*mixTy.TransferOutputPublicInput))
// }
if !mixExec.VerifyCommitValues(inputs, outputs) { //
return errors.Wrap(types.ErrInvalidParam, "verify commit amount") // if !mixExec.VerifyCommitValues(inputs, outputs) {
} // return errors.Wrap(types.ErrInvalidParam, "verify commit amount")
return nil // }
} // return nil
//}
// VerifyBytes verify bytes // VerifyBytes verify bytes
func (pubkey *MixSignPublicKey) VerifyBytes(msg []byte, sign crypto.Signature) bool { func (pubkey *MixSignPublicKey) VerifyBytes(msg []byte, sign crypto.Signature) bool {
...@@ -157,11 +155,6 @@ func (pubkey *MixSignPublicKey) VerifyBytes(msg []byte, sign crypto.Signature) b ...@@ -157,11 +155,6 @@ func (pubkey *MixSignPublicKey) VerifyBytes(msg []byte, sign crypto.Signature) b
return false return false
} }
if err := verifyCommitAmount(action.GetTransfer()); err != nil {
bizlog.Error("pubkey.VerifyBytes verify amount", "err", err)
return false
}
return true return true
} }
......
// Copyright Fuzamei Corp. 2018 All Rights Reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package wallet
import (
"math/big"
"strconv"
"github.com/pkg/errors"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
mixTy "github.com/33cn/plugin/plugin/dapp/mix/types"
fr_bn256 "github.com/consensys/gurvy/bn256/fr"
)
//对secretData 编码为string,同时增加随机值
func encodeSecretData(secret *mixTy.SecretData) (*mixTy.EncodedSecretData, error) {
if secret == nil {
return nil, errors.Wrap(types.ErrInvalidParam, "para is nil")
}
if len(secret.PaymentPubKey) <= 0 {
return nil, errors.Wrap(types.ErrInvalidParam, "spendPubKey is nil")
}
var val big.Int
ret, succ := val.SetString(secret.Amount, 10)
if !succ {
return nil, errors.Wrapf(types.ErrInvalidParam, "wrong amount = %s", secret.Amount)
}
if ret.Sign() <= 0 {
return nil, errors.Wrapf(types.ErrInvalidParam, "amount = %s, need bigger than 0", secret.Amount)
}
//获取随机值
var fr fr_bn256.Element
fr.SetRandom()
secret.NoteRandom = fr.String()
code := types.Encode(secret)
var resp mixTy.EncodedSecretData
resp.Encoded = common.ToHex(code)
resp.RawData = secret
return &resp, nil
}
//产生随机秘钥和receivingPk对data DH加密,返回随机秘钥的公钥
func encryptSecretData(req *mixTy.EncryptSecretData) (*mixTy.DHSecret, error) {
secret, err := common.FromHex(req.Secret)
if err != nil {
return nil, errors.Wrap(err, "decode secret")
}
return encryptData(req.ReceivingPk, secret), nil
}
func decryptSecretData(req *mixTy.DecryptSecretData) (*mixTy.SecretData, error) {
secret, err := common.FromHex(req.Secret)
if err != nil {
return nil, errors.Wrap(err, "decode req.secret")
}
decrypt, err := decryptData(req.ReceivingPriKey, req.Epk, secret)
if err != nil {
return nil, errors.Wrap(err, "decrypt secret")
}
var raw mixTy.SecretData
err = types.Decode(decrypt, &raw)
if err != nil {
return nil, errors.Wrap(mixTy.ErrDecryptDataFail, "decode decrypt.secret")
}
return &raw, nil
}
func (policy *mixPolicy) getPaymentKey(addr string) (*mixTy.PaymentKey, error) {
msg, err := policy.walletOperate.GetAPI().QueryChain(&types.ChainExecutor{
Driver: "mix",
FuncName: "PaymentPubKey",
Param: types.Encode(&types.ReqString{Data: addr}),
})
if err != nil {
return nil, err
}
return msg.(*mixTy.PaymentKey), err
}
func (policy *mixPolicy) depositProof(req *mixTy.DepositProofReq) (*mixTy.DepositProofResp, error) {
if req == nil || len(req.PaymentAddr) <= 0 {
return nil, errors.Wrap(types.ErrInvalidParam, "paymentAddr is nil")
}
if req.Amount <= 0 {
return nil, errors.Wrapf(types.ErrInvalidParam, "deposit amount=%d need big than 0", req.Amount)
}
var secret mixTy.SecretData
secret.Amount = strconv.FormatUint(req.Amount, 10)
//1. nullifier 获取随机值
var fr fr_bn256.Element
fr.SetRandom()
secret.NoteRandom = fr.String()
// 获取addr对应的paymentKey
toKey, errr := policy.getPaymentKey(req.PaymentAddr)
if errr != nil {
return nil, errors.Wrapf(errr, "get payment key for addr = %s", req.PaymentAddr)
}
secret.PaymentPubKey = toKey.PayingKey
var returnKey *mixTy.PaymentKey
var err error
if len(req.ReturnAddr) > 0 {
returnKey, err = policy.getPaymentKey(req.PaymentAddr)
if err != nil {
return nil, errors.Wrapf(err, "get payment key for addr = %s", req.PaymentAddr)
}
secret.ReturnPubKey = returnKey.PayingKey
}
var authKey *mixTy.PaymentKey
if len(req.ReturnAddr) > 0 {
authKey, err = policy.getPaymentKey(req.PaymentAddr)
if err != nil {
return nil, errors.Wrapf(err, "get payment key for addr = %s", req.PaymentAddr)
}
secret.AuthorizePubKey = authKey.PayingKey
}
//DH加密
data := types.Encode(&secret)
var group mixTy.DHSecretGroup
group.Payment = encryptData(toKey.ReceivingKey, data)
if returnKey != nil {
group.Returner = encryptData(returnKey.ReceivingKey, data)
}
if authKey != nil {
group.Authorize = encryptData(authKey.ReceivingKey, data)
}
var resp mixTy.DepositProofResp
resp.Proof = &secret
resp.Secrets = &group
keys := []string{
secret.PaymentPubKey,
secret.ReturnPubKey,
secret.AuthorizePubKey,
secret.Amount,
secret.NoteRandom,
}
resp.NoteHash = getFrString(mimcHashString(keys))
return &resp, nil
}
func (policy *mixPolicy) getPathProof(leaf string) (*mixTy.CommitTreeProve, error) {
msg, err := policy.walletOperate.GetAPI().QueryChain(&types.ChainExecutor{
Driver: "mix",
FuncName: "GetTreePath",
Param: types.Encode(&mixTy.TreeInfoReq{LeafHash: leaf}),
})
if err != nil {
return nil, err
}
return msg.(*mixTy.CommitTreeProve), nil
}
func (policy *mixPolicy) getNoteInfo(noteHash string, noteStatus mixTy.NoteStatus) (*mixTy.WalletIndexInfo, error) {
if policy.walletOperate.IsWalletLocked() {
return nil, types.ErrWalletIsLocked
}
var index mixTy.WalletMixIndexReq
index.NoteHash = noteHash
msg, err := policy.listMixInfos(&index)
if err != nil {
return nil, errors.Wrapf(err, "list table fail noteHash=%s", noteHash)
}
note := msg.(*mixTy.WalletIndexResp).Datas[0]
if note.Status != noteStatus {
return nil, errors.Wrapf(types.ErrNotAllow, "note status=%s", note.Status.String())
}
return note, nil
}
func (policy *mixPolicy) withdrawProof(req *mixTy.WithdrawProofReq) (*mixTy.WithdrawProofResp, error) {
note, err := policy.getNoteInfo(req.NoteHash, mixTy.NoteStatus_VALID)
if err != nil {
return nil, err
}
var resp mixTy.WithdrawProofResp
resp.Proof = note.Secret
resp.NullifierHash = note.Nullifier
resp.AuthSpendHash = note.AuthSpendHash
resp.NoteHash = note.NoteHash
resp.SpendFlag = 1
if note.IsReturner {
resp.SpendFlag = 0
}
if len(resp.AuthSpendHash) > 0 {
resp.AuthFlag = 1
}
//get spend privacy key
privacyKey, err := policy.getAccountPrivacyKey(note.Account)
if err != nil {
return nil, errors.Wrapf(err, "getAccountPrivacyKey addr=%s", note.Account)
}
resp.SpendPrivKey = privacyKey.Privacy.PaymentKey.SpendKey
//get tree path
path, err := policy.getPathProof(note.NoteHash)
if err != nil {
return nil, errors.Wrapf(err, "get tree proof for noteHash=%s", note.NoteHash)
}
resp.TreeProof.TreePath = path.ProofSet[1:]
resp.TreeProof.Helpers = path.Helpers
for i := 0; i < len(resp.TreeProof.TreePath); i++ {
resp.TreeProof.ValidPath = append(resp.TreeProof.ValidPath, 1)
}
resp.TreeProof.TreeRootHash = path.RootHash
return &resp, nil
}
func (policy *mixPolicy) authProof(req *mixTy.AuthProofReq) (*mixTy.AuthProofResp, error) {
note, err := policy.getNoteInfo(req.NoteHash, mixTy.NoteStatus_FROZEN)
if err != nil {
return nil, err
}
//get spend privacy key
privacyKey, err := policy.getAccountPrivacyKey(note.Account)
if err != nil {
return nil, errors.Wrapf(err, "getAccountPrivacyKey addr=%s", note.Account)
}
var resp mixTy.AuthProofResp
resp.Proof = note.Secret
resp.NoteHash = note.NoteHash
resp.AuthPrivKey = privacyKey.Privacy.PaymentKey.SpendKey
resp.AuthPubKey = privacyKey.Privacy.PaymentKey.PayKey
if privacyKey.Privacy.PaymentKey.PayKey != note.Secret.AuthorizePubKey {
return nil, errors.Wrapf(types.ErrInvalidParam, "auth pubkey from note=%s, from privacyKey=%s,for account =%s",
note.Secret.AuthorizePubKey, privacyKey.Privacy.PaymentKey.PayKey, note.Account)
}
resp.AuthHash = getFrString(mimcHashString([]string{resp.AuthPubKey, note.Secret.NoteRandom}))
//default auto to paymenter
resp.SpendFlag = 1
resp.AuthSpendHash = getFrString(mimcHashString([]string{note.Secret.PaymentPubKey, note.Secret.Amount, note.Secret.NoteRandom}))
if req.ToReturn != 0 {
resp.SpendFlag = 0
//auth to returner
resp.AuthSpendHash = getFrString(mimcHashString([]string{note.Secret.ReturnPubKey, note.Secret.Amount, note.Secret.NoteRandom}))
}
//get tree path
path, err := policy.getPathProof(note.NoteHash)
if err != nil {
return nil, errors.Wrapf(err, "get tree proof for noteHash=%s", note.NoteHash)
}
resp.TreeProof.TreePath = path.ProofSet[1:]
resp.TreeProof.Helpers = path.Helpers
for i := 0; i < len(resp.TreeProof.TreePath); i++ {
resp.TreeProof.ValidPath = append(resp.TreeProof.ValidPath, 1)
}
resp.TreeProof.TreeRootHash = path.RootHash
return &resp, nil
}
func (policy *mixPolicy) getTransferInputPart(note *mixTy.WalletIndexInfo) (*mixTy.TransferInputProof, error) {
//get spend privacy key
privacyKey, err := policy.getAccountPrivacyKey(note.Account)
if err != nil {
return nil, errors.Wrapf(err, "getAccountPrivacyKey addr=%s", note.Account)
}
var input mixTy.TransferInputProof
input.Proof = note.Secret
input.NoteHash = note.NoteHash
input.NullifierHash = note.Nullifier
//自己是payment 还是returner已经在解析note时候算好了,authSpendHash也对应算好了,如果note valid,则就用本地即可
input.AuthSpendHash = note.AuthSpendHash
input.SpendPrivKey = privacyKey.Privacy.PaymentKey.SpendKey
if privacyKey.Privacy.PaymentKey.PayKey != note.Secret.AuthorizePubKey {
return nil, errors.Wrapf(types.ErrInvalidParam, "payment pubkey from note=%s not match from privacyKey=%s,for account =%s",
note.Secret.AuthorizePubKey, privacyKey.Privacy.PaymentKey.PayKey, note.Account)
}
input.SpendFlag = 1
if note.IsReturner {
input.SpendFlag = 0
}
if len(input.AuthSpendHash) > 0 {
input.AuthFlag = 1
}
return &input, nil
}
func getCommitValue(noteAmount, transferAmount, minTxFee uint64) (*mixTy.CommitValueRst, error) {
if noteAmount < transferAmount+minTxFee {
return nil, errors.Wrapf(types.ErrInvalidParam, "transfer amount=%d big than note=%d - fee=%d", transferAmount, noteAmount, minTxFee)
}
change := noteAmount - transferAmount - minTxFee
//get amount*G point
//note = transfer + change + minTxFee
noteAmountG := mixTy.MulCurvePointG(noteAmount)
transAmountG := mixTy.MulCurvePointG(transferAmount)
changeAmountG := mixTy.MulCurvePointG(change)
minTxFeeG := mixTy.MulCurvePointG(minTxFee)
if !mixTy.CheckSumEqual(noteAmountG, transAmountG, changeAmountG, minTxFeeG) {
return nil, errors.Wrapf(types.ErrInvalidParam, "amount sum fail for mul G point")
}
//获取随机值,截取一半给change和transfer,和值给Note,直接用完整的random值会溢出
var changeRandom, transRandom, v fr_bn256.Element
random := v.SetRandom().String()
changeRandom.SetString(random[0 : len(random)/2])
transRandom.SetString(random[len(random)/2:])
var noteRandom fr_bn256.Element
noteRandom.Add(&changeRandom, &transRandom)
noteH := mixTy.MulCurvePointH(noteRandom.String())
transferH := mixTy.MulCurvePointH(transRandom.String())
changeH := mixTy.MulCurvePointH(changeRandom.String())
//fmt.Println("change",changeRandom.String())
//fmt.Println("transfer",transRandom.String())
//fmt.Println("note",noteRandom.String())
if !mixTy.CheckSumEqual(noteH, transferH, changeH) {
return nil, errors.Wrapf(types.ErrInvalidParam, "random sum error")
}
noteAmountG.Add(noteAmountG, noteH)
transAmountG.Add(transAmountG, transferH)
changeAmountG.Add(changeAmountG, changeH)
if !mixTy.CheckSumEqual(noteAmountG, transAmountG, changeAmountG, minTxFeeG) {
return nil, errors.Wrapf(types.ErrInvalidParam, "amount sum fail for G+H point")
}
rst := &mixTy.CommitValueRst{
NoteRandom: noteRandom.String(),
TransferRandom: transRandom.String(),
ChangeRandom: changeRandom.String(),
Note: &mixTy.CommitValue{X: noteAmountG.X.String(), Y: noteAmountG.Y.String()},
Transfer: &mixTy.CommitValue{X: transAmountG.X.String(), Y: transAmountG.Y.String()},
Change: &mixTy.CommitValue{X: changeAmountG.X.String(), Y: changeAmountG.Y.String()},
}
return rst, nil
}
func (policy *mixPolicy) transferProof(req *mixTy.TransferProofReq) (*mixTy.TransferProofResp, error) {
note, err := policy.getNoteInfo(req.NoteHash, mixTy.NoteStatus_VALID)
if err != nil {
return nil, err
}
inputPart, err := policy.getTransferInputPart(note)
noteAmount, err := strconv.ParseUint(note.Secret.Amount, 10, 64)
if err != nil {
return nil, errors.Wrapf(err, "input part parseUint=%s", inputPart.Proof.Amount)
}
//还要扣除手续费
minTxFee := uint64(policy.walletOperate.GetConfig().MinFee)
//output toAddr part
reqTransfer := &mixTy.DepositProofReq{
PaymentAddr: req.ToAddr,
AuthorizeAddr: req.ToAuthAddr,
ReturnAddr: req.ReturnAddr,
Amount: req.Amount,
}
depositTransfer, err := policy.depositProof(reqTransfer)
if err != nil {
return nil, errors.Wrapf(err, "deposit toAddr")
}
//output 找零 part,如果找零为0也需要设置,否则只有一个输入一个输出,H部分的随机数要相等,就能推测出转账值来
//在transfer output 部分特殊处理,如果amount是0的值则不加进tree
reqChange := &mixTy.DepositProofReq{
PaymentAddr: note.Account,
Amount: noteAmount - req.Amount - minTxFee,
}
depositChange, err := policy.depositProof(reqChange)
if err != nil {
return nil, errors.Wrapf(err, "deposit toAddr")
}
commitValue, err := getCommitValue(noteAmount, req.Amount, minTxFee)
if err != nil {
return nil, err
}
//noteCommitX, transferX, changeX
inputPart.CommitValue = commitValue.Note
inputPart.SpendRandom = commitValue.NoteRandom
transferOutput := &mixTy.TransferOutputProof{
Proof: depositTransfer.Proof,
NoteHash: depositTransfer.NoteHash,
Secrets: depositTransfer.Secrets,
CommitValue: commitValue.Transfer,
SpendRandom: commitValue.TransferRandom,
}
changeOutput := &mixTy.TransferOutputProof{
Proof: depositChange.Proof,
NoteHash: depositChange.NoteHash,
Secrets: depositChange.Secrets,
CommitValue: commitValue.Change,
SpendRandom: commitValue.ChangeRandom,
}
return &mixTy.TransferProofResp{
TransferInput: inputPart,
TargetOutput: transferOutput,
ChangeOutput: changeOutput}, nil
}
package wallet
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetCommitValue(t *testing.T) {
var note, transfer, minFee uint64
note = 100
transfer = 60
minFee = 1
_, err := getCommitValue(note, transfer, minFee)
assert.Nil(t, err)
//transfer > note
note = 100
transfer = 100
minFee = 1
_, err = getCommitValue(note, transfer, minFee)
t.Log(err)
assert.NotNil(t, err)
note = 100
transfer = 101
minFee = 0
_, err = getCommitValue(note, transfer, minFee)
t.Log(err)
assert.NotNil(t, err)
//change=0
note = 100
transfer = 99
minFee = 1
_, err = getCommitValue(note, transfer, minFee)
assert.Nil(t, err)
}
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