Commit f89f1b0a authored by jiangpeng's avatar jiangpeng

privacy:update wallet utxo manage

* add utxo store key with asset exec * fix rescan nil pointer
parent 3ef9413b
...@@ -284,6 +284,7 @@ func showPrivacyAccountSpendCmd() *cobra.Command { ...@@ -284,6 +284,7 @@ func showPrivacyAccountSpendCmd() *cobra.Command {
func showPrivacyAccountSpendFlag(cmd *cobra.Command) { func showPrivacyAccountSpendFlag(cmd *cobra.Command) {
cmd.Flags().StringP("addr", "a", "", "account address") cmd.Flags().StringP("addr", "a", "", "account address")
cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins")
cmd.Flags().StringP("symbol", "s", "BTY", "asset symbol, default BTY") cmd.Flags().StringP("symbol", "s", "BTY", "asset symbol, default BTY")
cmd.MarkFlagRequired("addr") cmd.MarkFlagRequired("addr")
} }
...@@ -291,10 +292,12 @@ func showPrivacyAccountSpendFlag(cmd *cobra.Command) { ...@@ -291,10 +292,12 @@ func showPrivacyAccountSpendFlag(cmd *cobra.Command) {
func showPrivacyAccountSpend(cmd *cobra.Command, args []string) { func showPrivacyAccountSpend(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
addr, _ := cmd.Flags().GetString("addr") addr, _ := cmd.Flags().GetString("addr")
exec, _ := cmd.Flags().GetString("exec")
symbol, _ := cmd.Flags().GetString("symbol") symbol, _ := cmd.Flags().GetString("symbol")
params := pty.ReqPrivBal4AddrToken{ params := pty.ReqPrivBal4AddrToken{
Addr: addr, Addr: addr,
Token: symbol, Token: symbol,
AssetExec: exec,
} }
var res pty.UTXOHaveTxHashs var res pty.UTXOHaveTxHashs
...@@ -453,7 +456,7 @@ func showPrivacyAccountInfoCmd() *cobra.Command { ...@@ -453,7 +456,7 @@ func showPrivacyAccountInfoCmd() *cobra.Command {
func showPrivacyAccountInfoFlag(cmd *cobra.Command) { func showPrivacyAccountInfoFlag(cmd *cobra.Command) {
cmd.Flags().StringP("addr", "a", "", "account address") cmd.Flags().StringP("addr", "a", "", "account address")
cmd.MarkFlagRequired("addr") cmd.MarkFlagRequired("addr")
cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins")
cmd.Flags().StringP("symbol", "s", "BTY", "asset symbol, default BTY") cmd.Flags().StringP("symbol", "s", "BTY", "asset symbol, default BTY")
cmd.Flags().Int32P("displaymode", "d", 0, "display mode.(0: display collect. 1:display available detail. 2:display frozen detail. 3:display all") cmd.Flags().Int32P("displaymode", "d", 0, "display mode.(0: display collect. 1:display available detail. 2:display frozen detail. 3:display all")
} }
...@@ -461,6 +464,7 @@ func showPrivacyAccountInfoFlag(cmd *cobra.Command) { ...@@ -461,6 +464,7 @@ func showPrivacyAccountInfoFlag(cmd *cobra.Command) {
func showPrivacyAccountInfo(cmd *cobra.Command, args []string) { func showPrivacyAccountInfo(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
addr, _ := cmd.Flags().GetString("addr") addr, _ := cmd.Flags().GetString("addr")
exec, _ := cmd.Flags().GetString("exec")
token, _ := cmd.Flags().GetString("symbol") token, _ := cmd.Flags().GetString("symbol")
mode, _ := cmd.Flags().GetInt32("displaymode") mode, _ := cmd.Flags().GetInt32("displaymode")
if mode < 0 || mode > 3 { if mode < 0 || mode > 3 {
...@@ -468,10 +472,11 @@ func showPrivacyAccountInfo(cmd *cobra.Command, args []string) { ...@@ -468,10 +472,11 @@ func showPrivacyAccountInfo(cmd *cobra.Command, args []string) {
return return
} }
params := pty.ReqPPrivacyAccount{ params := pty.ReqPrivacyAccount{
Addr: addr, Addr: addr,
Token: token, Token: token,
Displaymode: mode, Displaymode: mode,
AssetExec: exec,
} }
var res pty.ReplyPrivacyAccount var res pty.ReplyPrivacyAccount
...@@ -546,6 +551,7 @@ func addListPrivacyTxsFlags(cmd *cobra.Command) { ...@@ -546,6 +551,7 @@ func addListPrivacyTxsFlags(cmd *cobra.Command) {
// //
cmd.Flags().Int32P("sendrecv", "", 0, "send or recv flag (0: send, 1: recv), default 0") cmd.Flags().Int32P("sendrecv", "", 0, "send or recv flag (0: send, 1: recv), default 0")
cmd.Flags().Int32P("count", "c", 10, "number of transactions, default 10") cmd.Flags().Int32P("count", "c", 10, "number of transactions, default 10")
cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins")
cmd.Flags().StringP("token", "", types.BTY, "token name.(BTY supported)") cmd.Flags().StringP("token", "", types.BTY, "token name.(BTY supported)")
cmd.Flags().Int32P("direction", "d", 1, "query direction (0: pre page, 1: next page), valid with seedtxhash param") cmd.Flags().Int32P("direction", "d", 1, "query direction (0: pre page, 1: next page), valid with seedtxhash param")
cmd.Flags().StringP("seedtxhash", "", "", "seed trasnaction hash") cmd.Flags().StringP("seedtxhash", "", "", "seed trasnaction hash")
...@@ -559,7 +565,9 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) { ...@@ -559,7 +565,9 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) {
sendRecvFlag, _ := cmd.Flags().GetInt32("sendrecv") sendRecvFlag, _ := cmd.Flags().GetInt32("sendrecv")
tokenname, _ := cmd.Flags().GetString("token") tokenname, _ := cmd.Flags().GetString("token")
seedtxhash, _ := cmd.Flags().GetString("seedtxhash") seedtxhash, _ := cmd.Flags().GetString("seedtxhash")
exec, _ := cmd.Flags().GetString("exec")
params := pty.ReqPrivacyTransactionList{ params := pty.ReqPrivacyTransactionList{
AssetExec: exec,
Tokenname: tokenname, Tokenname: tokenname,
SendRecvFlag: sendRecvFlag, SendRecvFlag: sendRecvFlag,
Direction: direction, Direction: direction,
......
...@@ -43,8 +43,8 @@ func (p *privacy) Exec_Public2Privacy(payload *ty.Public2Privacy, tx *types.Tran ...@@ -43,8 +43,8 @@ func (p *privacy) Exec_Public2Privacy(payload *ty.Public2Privacy, tx *types.Tran
value := types.Encode(keyOutput) value := types.Encode(keyOutput)
receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value}) receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value})
} }
privacylog.Debug("testkey", "output", payload.GetOutput().Keyoutput)
receiptLogs := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput().GetKeyoutput()) receiptLogs := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput())
execlog := &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLogs)} execlog := &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLogs)}
receipt.Logs = append(receipt.Logs, execlog) receipt.Logs = append(receipt.Logs, execlog)
...@@ -79,7 +79,7 @@ func (p *privacy) Exec_Privacy2Privacy(payload *ty.Privacy2Privacy, tx *types.Tr ...@@ -79,7 +79,7 @@ func (p *privacy) Exec_Privacy2Privacy(payload *ty.Privacy2Privacy, tx *types.Tr
value := types.Encode(keyOutput) value := types.Encode(keyOutput)
receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value}) receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value})
} }
receiptLogs := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput().GetKeyoutput()) receiptLogs := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput())
execlog = &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLogs)} execlog = &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLogs)}
receipt.Logs = append(receipt.Logs, execlog) receipt.Logs = append(receipt.Logs, execlog)
...@@ -125,7 +125,7 @@ func (p *privacy) Exec_Privacy2Public(payload *ty.Privacy2Public, tx *types.Tran ...@@ -125,7 +125,7 @@ func (p *privacy) Exec_Privacy2Public(payload *ty.Privacy2Public, tx *types.Tran
receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value}) receipt.KV = append(receipt.KV, &types.KeyValue{Key: key, Value: value})
} }
receiptLog := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput().GetKeyoutput()) receiptLog := p.buildPrivacyReceiptLog(payload.GetAssetExec(), payload.GetTokenname(), payload.GetOutput())
execlog = &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLog)} execlog = &types.ReceiptLog{Ty: ty.TyLogPrivacyOutput, Log: types.Encode(receiptLog)}
receipt.Logs = append(receipt.Logs, execlog) receipt.Logs = append(receipt.Logs, execlog)
...@@ -146,14 +146,14 @@ func (p *privacy) createAccountDB(exec, symbol string) (*account.DB, error) { ...@@ -146,14 +146,14 @@ func (p *privacy) createAccountDB(exec, symbol string) (*account.DB, error) {
return account.NewAccountDB(cfg, exec, symbol, p.GetStateDB()) return account.NewAccountDB(cfg, exec, symbol, p.GetStateDB())
} }
func (p *privacy) buildPrivacyReceiptLog(assetExec, assetSymbol string, output []*ty.KeyOutput) *ty.ReceiptPrivacyOutput { func (p *privacy) buildPrivacyReceiptLog(assetExec, assetSymbol string, output *ty.PrivacyOutput) *ty.ReceiptPrivacyOutput {
if assetExec == "" { if assetExec == "" {
assetExec = "coins" assetExec = "coins"
} }
receipt := &ty.ReceiptPrivacyOutput{ receipt := &ty.ReceiptPrivacyOutput{
AssetExec: assetExec, AssetExec: assetExec,
AssetSymbol: assetSymbol, AssetSymbol: assetSymbol,
Keyoutput: output, Keyoutput: output.Keyoutput,
} }
return receipt return receipt
......
...@@ -208,8 +208,7 @@ func (p *privacy) CheckTx(tx *types.Transaction, index int) error { ...@@ -208,8 +208,7 @@ func (p *privacy) CheckTx(tx *types.Transaction, index int) error {
return types.ErrActionNotSupport return types.ErrActionNotSupport
} }
privacylog.Debug("PrivacyTrading CheckTx", "txhash", txhashstr, "action type ", action.Ty) privacylog.Debug("PrivacyTrading CheckTx", "txhash", txhashstr, "action type ", action.Ty)
assertExec := action.GetAssertExec() assertExec, token := action.GetAssetExecSymbol()
token := action.GetTokenName()
if token == "" { if token == "" {
return types.ErrInvalidParam return types.ErrInvalidParam
} }
......
...@@ -206,8 +206,9 @@ message ReplyPrivacyPkPair { ...@@ -206,8 +206,9 @@ message ReplyPrivacyPkPair {
} }
message ReqPrivBal4AddrToken { message ReqPrivBal4AddrToken {
string addr = 1; string addr = 1;
string token = 2; string token = 2;
string assetExec = 3;
} }
message ReplyPrivacyBalance { message ReplyPrivacyBalance {
...@@ -226,6 +227,7 @@ message PrivacyDBStore { ...@@ -226,6 +227,7 @@ message PrivacyDBStore {
int64 height = 8; int64 height = 8;
int32 txindex = 9; int32 txindex = 9;
bytes blockhash = 10; bytes blockhash = 10;
string assetExec = 11;
} }
message UTXO { message UTXO {
...@@ -271,9 +273,10 @@ message FTXOsSTXOsInOneTx { ...@@ -271,9 +273,10 @@ message FTXOsSTXOsInOneTx {
string tokenname = 1; string tokenname = 1;
string sender = 2; string sender = 2;
// FTXO的超期,设定原则与Transaction.expire一致 // FTXO的超期,设定原则与Transaction.expire一致
int64 expire = 3; int64 expire = 3;
string txhash = 4; string txhash = 4;
repeated UTXO utxos = 5; repeated UTXO utxos = 5;
string assetExec = 6;
} }
message RealKeyInput { message RealKeyInput {
...@@ -314,11 +317,6 @@ message ReplyCacheTxList { ...@@ -314,11 +317,6 @@ message ReplyCacheTxList {
} }
message ReqPrivacyAccount { message ReqPrivacyAccount {
string tokenname = 1;
string addr = 2;
}
message ReqPPrivacyAccount {
string addr = 1; string addr = 1;
string token = 2; string token = 2;
// 设定显示的数据类型信息 // 设定显示的数据类型信息
...@@ -326,7 +324,8 @@ message ReqPPrivacyAccount { ...@@ -326,7 +324,8 @@ message ReqPPrivacyAccount {
// 1: 显示UTXO明细 // 1: 显示UTXO明细
// 2: 显示FTXO明细 // 2: 显示FTXO明细
// 3: 全部显示 // 3: 全部显示
int32 displaymode = 3; int32 displaymode = 3;
string assetExec = 4;
} }
// 请求隐私账户信息的应答 // 请求隐私账户信息的应答
...@@ -354,6 +353,7 @@ message ReqPrivacyTransactionList { ...@@ -354,6 +353,7 @@ message ReqPrivacyTransactionList {
string from = 5; string from = 5;
string address = 6; string address = 6;
bytes seedtxhash = 7; bytes seedtxhash = 7;
string assetExec = 8;
} }
message ReqRescanUtxos { message ReqRescanUtxos {
......
...@@ -50,7 +50,7 @@ func (g *channelClient) CreateRawTransaction(ctx context.Context, in *pty.ReqCre ...@@ -50,7 +50,7 @@ func (g *channelClient) CreateRawTransaction(ctx context.Context, in *pty.ReqCre
} }
// ShowPrivacyAccountInfo display privacy account information for json rpc // ShowPrivacyAccountInfo display privacy account information for json rpc
func (c *Jrpc) ShowPrivacyAccountInfo(in *pty.ReqPPrivacyAccount, result *json.RawMessage) error { func (c *Jrpc) ShowPrivacyAccountInfo(in *pty.ReqPrivacyAccount, result *json.RawMessage) error {
reply, err := c.cli.ExecWalletFunc(pty.PrivacyX, "ShowPrivacyAccountInfo", in) reply, err := c.cli.ExecWalletFunc(pty.PrivacyX, "ShowPrivacyAccountInfo", in)
if err != nil { if err != nil {
return err return err
......
...@@ -72,7 +72,7 @@ func testShowPrivacyKey(t *testing.T, jrpc *jsonclient.JSONClient) error { ...@@ -72,7 +72,7 @@ func testShowPrivacyKey(t *testing.T, jrpc *jsonclient.JSONClient) error {
} }
func testShowPrivacyAccountInfo(t *testing.T, jrpc *jsonclient.JSONClient) error { func testShowPrivacyAccountInfo(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.ReqPPrivacyAccount{ params := pty.ReqPrivacyAccount{
Addr: "1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p", Addr: "1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p",
Token: types.BTY, Token: types.BTY,
Displaymode: 1, Displaymode: 1,
......
...@@ -41,7 +41,7 @@ func TestRPC_Call(t *testing.T) { ...@@ -41,7 +41,7 @@ func TestRPC_Call(t *testing.T) {
assert.NotNil(t, jsonClient) assert.NotNil(t, jsonClient)
//调用: //调用:
params := pty.ReqPPrivacyAccount{ params := pty.ReqPrivacyAccount{
Addr: "addr", Addr: "addr",
Token: "token", Token: "token",
Displaymode: 3, Displaymode: 3,
......
...@@ -81,7 +81,7 @@ func (t *PrivacyType) GetLogMap() map[int64]*types.LogInfo { ...@@ -81,7 +81,7 @@ func (t *PrivacyType) GetLogMap() map[int64]*types.LogInfo {
return map[int64]*types.LogInfo{ return map[int64]*types.LogInfo{
TyLogPrivacyFee: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogPrivacyFee"}, TyLogPrivacyFee: {Ty: reflect.TypeOf(types.ReceiptExecAccountTransfer{}), Name: "LogPrivacyFee"},
TyLogPrivacyInput: {Ty: reflect.TypeOf(PrivacyInput{}), Name: "LogPrivacyInput"}, TyLogPrivacyInput: {Ty: reflect.TypeOf(PrivacyInput{}), Name: "LogPrivacyInput"},
TyLogPrivacyOutput: {Ty: reflect.TypeOf(PrivacyOutput{}), Name: "LogPrivacyOutput"}, TyLogPrivacyOutput: {Ty: reflect.TypeOf(ReceiptPrivacyOutput{}), Name: "LogPrivacyOutput"},
} }
} }
...@@ -168,26 +168,14 @@ func (action *PrivacyAction) GetActionName() string { ...@@ -168,26 +168,14 @@ func (action *PrivacyAction) GetActionName() string {
return "unknow-privacy" return "unknow-privacy"
} }
// GetTokenName get action token name // GetAssetExecSymbol get assert exec and symbol
func (action *PrivacyAction) GetTokenName() string { func (action *PrivacyAction) GetAssetExecSymbol() (assetExec, assetSymbol string) {
if action.GetTy() == ActionPublic2Privacy && action.GetPublic2Privacy() != nil { if action.GetTy() == ActionPublic2Privacy && action.GetPublic2Privacy() != nil {
return action.GetPublic2Privacy().GetTokenname() return action.GetPublic2Privacy().GetAssetExec(), action.GetPublic2Privacy().GetTokenname()
} else if action.GetTy() == ActionPrivacy2Privacy && action.GetPrivacy2Privacy() != nil { } else if action.GetTy() == ActionPrivacy2Privacy && action.GetPrivacy2Privacy() != nil {
return action.GetPrivacy2Privacy().GetTokenname() return action.GetPrivacy2Privacy().GetAssetExec(), action.GetPrivacy2Privacy().GetTokenname()
} else if action.GetTy() == ActionPrivacy2Public && action.GetPrivacy2Public() != nil { } else if action.GetTy() == ActionPrivacy2Public && action.GetPrivacy2Public() != nil {
return action.GetPrivacy2Public().GetTokenname() return action.GetPrivacy2Public().GetAssetExec(), action.GetPrivacy2Public().GetTokenname()
} }
return "" return "", ""
}
// GetAssertExec get assert exec
func (action *PrivacyAction) GetAssertExec() string {
if action.GetTy() == ActionPublic2Privacy && action.GetPublic2Privacy() != nil {
return action.GetPublic2Privacy().GetAssetExec()
} else if action.GetTy() == ActionPrivacy2Privacy && action.GetPrivacy2Privacy() != nil {
return action.GetPrivacy2Privacy().GetAssetExec()
} else if action.GetTy() == ActionPrivacy2Public && action.GetPrivacy2Public() != nil {
return action.GetPrivacy2Public().GetAssetExec()
}
return ""
} }
...@@ -44,7 +44,7 @@ func (m *PrivacyAction) Reset() { *m = PrivacyAction{} } ...@@ -44,7 +44,7 @@ func (m *PrivacyAction) Reset() { *m = PrivacyAction{} }
func (m *PrivacyAction) String() string { return proto.CompactTextString(m) } func (m *PrivacyAction) String() string { return proto.CompactTextString(m) }
func (*PrivacyAction) ProtoMessage() {} func (*PrivacyAction) ProtoMessage() {}
func (*PrivacyAction) Descriptor() ([]byte, []int) { func (*PrivacyAction) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{0} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{0}
} }
func (m *PrivacyAction) XXX_Unmarshal(b []byte) error { func (m *PrivacyAction) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyAction.Unmarshal(m, b) return xxx_messageInfo_PrivacyAction.Unmarshal(m, b)
...@@ -229,7 +229,7 @@ func (m *Public2Privacy) Reset() { *m = Public2Privacy{} } ...@@ -229,7 +229,7 @@ func (m *Public2Privacy) Reset() { *m = Public2Privacy{} }
func (m *Public2Privacy) String() string { return proto.CompactTextString(m) } func (m *Public2Privacy) String() string { return proto.CompactTextString(m) }
func (*Public2Privacy) ProtoMessage() {} func (*Public2Privacy) ProtoMessage() {}
func (*Public2Privacy) Descriptor() ([]byte, []int) { func (*Public2Privacy) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{1} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{1}
} }
func (m *Public2Privacy) XXX_Unmarshal(b []byte) error { func (m *Public2Privacy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Public2Privacy.Unmarshal(m, b) return xxx_messageInfo_Public2Privacy.Unmarshal(m, b)
...@@ -300,7 +300,7 @@ func (m *Privacy2Privacy) Reset() { *m = Privacy2Privacy{} } ...@@ -300,7 +300,7 @@ func (m *Privacy2Privacy) Reset() { *m = Privacy2Privacy{} }
func (m *Privacy2Privacy) String() string { return proto.CompactTextString(m) } func (m *Privacy2Privacy) String() string { return proto.CompactTextString(m) }
func (*Privacy2Privacy) ProtoMessage() {} func (*Privacy2Privacy) ProtoMessage() {}
func (*Privacy2Privacy) Descriptor() ([]byte, []int) { func (*Privacy2Privacy) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{2} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{2}
} }
func (m *Privacy2Privacy) XXX_Unmarshal(b []byte) error { func (m *Privacy2Privacy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Privacy2Privacy.Unmarshal(m, b) return xxx_messageInfo_Privacy2Privacy.Unmarshal(m, b)
...@@ -379,7 +379,7 @@ func (m *Privacy2Public) Reset() { *m = Privacy2Public{} } ...@@ -379,7 +379,7 @@ func (m *Privacy2Public) Reset() { *m = Privacy2Public{} }
func (m *Privacy2Public) String() string { return proto.CompactTextString(m) } func (m *Privacy2Public) String() string { return proto.CompactTextString(m) }
func (*Privacy2Public) ProtoMessage() {} func (*Privacy2Public) ProtoMessage() {}
func (*Privacy2Public) Descriptor() ([]byte, []int) { func (*Privacy2Public) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{3} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{3}
} }
func (m *Privacy2Public) XXX_Unmarshal(b []byte) error { func (m *Privacy2Public) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Privacy2Public.Unmarshal(m, b) return xxx_messageInfo_Privacy2Public.Unmarshal(m, b)
...@@ -462,7 +462,7 @@ func (m *UTXOGlobalIndex) Reset() { *m = UTXOGlobalIndex{} } ...@@ -462,7 +462,7 @@ func (m *UTXOGlobalIndex) Reset() { *m = UTXOGlobalIndex{} }
func (m *UTXOGlobalIndex) String() string { return proto.CompactTextString(m) } func (m *UTXOGlobalIndex) String() string { return proto.CompactTextString(m) }
func (*UTXOGlobalIndex) ProtoMessage() {} func (*UTXOGlobalIndex) ProtoMessage() {}
func (*UTXOGlobalIndex) Descriptor() ([]byte, []int) { func (*UTXOGlobalIndex) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{4} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{4}
} }
func (m *UTXOGlobalIndex) XXX_Unmarshal(b []byte) error { func (m *UTXOGlobalIndex) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOGlobalIndex.Unmarshal(m, b) return xxx_messageInfo_UTXOGlobalIndex.Unmarshal(m, b)
...@@ -510,7 +510,7 @@ func (m *KeyInput) Reset() { *m = KeyInput{} } ...@@ -510,7 +510,7 @@ func (m *KeyInput) Reset() { *m = KeyInput{} }
func (m *KeyInput) String() string { return proto.CompactTextString(m) } func (m *KeyInput) String() string { return proto.CompactTextString(m) }
func (*KeyInput) ProtoMessage() {} func (*KeyInput) ProtoMessage() {}
func (*KeyInput) Descriptor() ([]byte, []int) { func (*KeyInput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{5} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{5}
} }
func (m *KeyInput) XXX_Unmarshal(b []byte) error { func (m *KeyInput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyInput.Unmarshal(m, b) return xxx_messageInfo_KeyInput.Unmarshal(m, b)
...@@ -562,7 +562,7 @@ func (m *PrivacyInput) Reset() { *m = PrivacyInput{} } ...@@ -562,7 +562,7 @@ func (m *PrivacyInput) Reset() { *m = PrivacyInput{} }
func (m *PrivacyInput) String() string { return proto.CompactTextString(m) } func (m *PrivacyInput) String() string { return proto.CompactTextString(m) }
func (*PrivacyInput) ProtoMessage() {} func (*PrivacyInput) ProtoMessage() {}
func (*PrivacyInput) Descriptor() ([]byte, []int) { func (*PrivacyInput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{6} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{6}
} }
func (m *PrivacyInput) XXX_Unmarshal(b []byte) error { func (m *PrivacyInput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyInput.Unmarshal(m, b) return xxx_messageInfo_PrivacyInput.Unmarshal(m, b)
...@@ -602,7 +602,7 @@ func (m *KeyOutput) Reset() { *m = KeyOutput{} } ...@@ -602,7 +602,7 @@ func (m *KeyOutput) Reset() { *m = KeyOutput{} }
func (m *KeyOutput) String() string { return proto.CompactTextString(m) } func (m *KeyOutput) String() string { return proto.CompactTextString(m) }
func (*KeyOutput) ProtoMessage() {} func (*KeyOutput) ProtoMessage() {}
func (*KeyOutput) Descriptor() ([]byte, []int) { func (*KeyOutput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{7} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{7}
} }
func (m *KeyOutput) XXX_Unmarshal(b []byte) error { func (m *KeyOutput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyOutput.Unmarshal(m, b) return xxx_messageInfo_KeyOutput.Unmarshal(m, b)
...@@ -648,7 +648,7 @@ func (m *PrivacyOutput) Reset() { *m = PrivacyOutput{} } ...@@ -648,7 +648,7 @@ func (m *PrivacyOutput) Reset() { *m = PrivacyOutput{} }
func (m *PrivacyOutput) String() string { return proto.CompactTextString(m) } func (m *PrivacyOutput) String() string { return proto.CompactTextString(m) }
func (*PrivacyOutput) ProtoMessage() {} func (*PrivacyOutput) ProtoMessage() {}
func (*PrivacyOutput) Descriptor() ([]byte, []int) { func (*PrivacyOutput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{8} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{8}
} }
func (m *PrivacyOutput) XXX_Unmarshal(b []byte) error { func (m *PrivacyOutput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyOutput.Unmarshal(m, b) return xxx_messageInfo_PrivacyOutput.Unmarshal(m, b)
...@@ -694,7 +694,7 @@ func (m *GroupUTXOGlobalIndex) Reset() { *m = GroupUTXOGlobalIndex{} } ...@@ -694,7 +694,7 @@ func (m *GroupUTXOGlobalIndex) Reset() { *m = GroupUTXOGlobalIndex{} }
func (m *GroupUTXOGlobalIndex) String() string { return proto.CompactTextString(m) } func (m *GroupUTXOGlobalIndex) String() string { return proto.CompactTextString(m) }
func (*GroupUTXOGlobalIndex) ProtoMessage() {} func (*GroupUTXOGlobalIndex) ProtoMessage() {}
func (*GroupUTXOGlobalIndex) Descriptor() ([]byte, []int) { func (*GroupUTXOGlobalIndex) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{9} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{9}
} }
func (m *GroupUTXOGlobalIndex) XXX_Unmarshal(b []byte) error { func (m *GroupUTXOGlobalIndex) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupUTXOGlobalIndex.Unmarshal(m, b) return xxx_messageInfo_GroupUTXOGlobalIndex.Unmarshal(m, b)
...@@ -743,7 +743,7 @@ func (m *LocalUTXOItem) Reset() { *m = LocalUTXOItem{} } ...@@ -743,7 +743,7 @@ func (m *LocalUTXOItem) Reset() { *m = LocalUTXOItem{} }
func (m *LocalUTXOItem) String() string { return proto.CompactTextString(m) } func (m *LocalUTXOItem) String() string { return proto.CompactTextString(m) }
func (*LocalUTXOItem) ProtoMessage() {} func (*LocalUTXOItem) ProtoMessage() {}
func (*LocalUTXOItem) Descriptor() ([]byte, []int) { func (*LocalUTXOItem) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{10} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{10}
} }
func (m *LocalUTXOItem) XXX_Unmarshal(b []byte) error { func (m *LocalUTXOItem) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LocalUTXOItem.Unmarshal(m, b) return xxx_messageInfo_LocalUTXOItem.Unmarshal(m, b)
...@@ -810,7 +810,7 @@ func (m *ReqUTXOPubKeys) Reset() { *m = ReqUTXOPubKeys{} } ...@@ -810,7 +810,7 @@ func (m *ReqUTXOPubKeys) Reset() { *m = ReqUTXOPubKeys{} }
func (m *ReqUTXOPubKeys) String() string { return proto.CompactTextString(m) } func (m *ReqUTXOPubKeys) String() string { return proto.CompactTextString(m) }
func (*ReqUTXOPubKeys) ProtoMessage() {} func (*ReqUTXOPubKeys) ProtoMessage() {}
func (*ReqUTXOPubKeys) Descriptor() ([]byte, []int) { func (*ReqUTXOPubKeys) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{11} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{11}
} }
func (m *ReqUTXOPubKeys) XXX_Unmarshal(b []byte) error { func (m *ReqUTXOPubKeys) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqUTXOPubKeys.Unmarshal(m, b) return xxx_messageInfo_ReqUTXOPubKeys.Unmarshal(m, b)
...@@ -856,7 +856,7 @@ func (m *PublicKeyData) Reset() { *m = PublicKeyData{} } ...@@ -856,7 +856,7 @@ func (m *PublicKeyData) Reset() { *m = PublicKeyData{} }
func (m *PublicKeyData) String() string { return proto.CompactTextString(m) } func (m *PublicKeyData) String() string { return proto.CompactTextString(m) }
func (*PublicKeyData) ProtoMessage() {} func (*PublicKeyData) ProtoMessage() {}
func (*PublicKeyData) Descriptor() ([]byte, []int) { func (*PublicKeyData) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{12} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{12}
} }
func (m *PublicKeyData) XXX_Unmarshal(b []byte) error { func (m *PublicKeyData) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PublicKeyData.Unmarshal(m, b) return xxx_messageInfo_PublicKeyData.Unmarshal(m, b)
...@@ -896,7 +896,7 @@ func (m *GroupUTXOPubKey) Reset() { *m = GroupUTXOPubKey{} } ...@@ -896,7 +896,7 @@ func (m *GroupUTXOPubKey) Reset() { *m = GroupUTXOPubKey{} }
func (m *GroupUTXOPubKey) String() string { return proto.CompactTextString(m) } func (m *GroupUTXOPubKey) String() string { return proto.CompactTextString(m) }
func (*GroupUTXOPubKey) ProtoMessage() {} func (*GroupUTXOPubKey) ProtoMessage() {}
func (*GroupUTXOPubKey) Descriptor() ([]byte, []int) { func (*GroupUTXOPubKey) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{13} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{13}
} }
func (m *GroupUTXOPubKey) XXX_Unmarshal(b []byte) error { func (m *GroupUTXOPubKey) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupUTXOPubKey.Unmarshal(m, b) return xxx_messageInfo_GroupUTXOPubKey.Unmarshal(m, b)
...@@ -941,7 +941,7 @@ func (m *ResUTXOPubKeys) Reset() { *m = ResUTXOPubKeys{} } ...@@ -941,7 +941,7 @@ func (m *ResUTXOPubKeys) Reset() { *m = ResUTXOPubKeys{} }
func (m *ResUTXOPubKeys) String() string { return proto.CompactTextString(m) } func (m *ResUTXOPubKeys) String() string { return proto.CompactTextString(m) }
func (*ResUTXOPubKeys) ProtoMessage() {} func (*ResUTXOPubKeys) ProtoMessage() {}
func (*ResUTXOPubKeys) Descriptor() ([]byte, []int) { func (*ResUTXOPubKeys) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{14} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{14}
} }
func (m *ResUTXOPubKeys) XXX_Unmarshal(b []byte) error { func (m *ResUTXOPubKeys) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResUTXOPubKeys.Unmarshal(m, b) return xxx_messageInfo_ResUTXOPubKeys.Unmarshal(m, b)
...@@ -981,7 +981,7 @@ func (m *ReqPrivacyToken) Reset() { *m = ReqPrivacyToken{} } ...@@ -981,7 +981,7 @@ func (m *ReqPrivacyToken) Reset() { *m = ReqPrivacyToken{} }
func (m *ReqPrivacyToken) String() string { return proto.CompactTextString(m) } func (m *ReqPrivacyToken) String() string { return proto.CompactTextString(m) }
func (*ReqPrivacyToken) ProtoMessage() {} func (*ReqPrivacyToken) ProtoMessage() {}
func (*ReqPrivacyToken) Descriptor() ([]byte, []int) { func (*ReqPrivacyToken) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{15} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{15}
} }
func (m *ReqPrivacyToken) XXX_Unmarshal(b []byte) error { func (m *ReqPrivacyToken) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqPrivacyToken.Unmarshal(m, b) return xxx_messageInfo_ReqPrivacyToken.Unmarshal(m, b)
...@@ -1034,7 +1034,7 @@ func (m *AmountDetail) Reset() { *m = AmountDetail{} } ...@@ -1034,7 +1034,7 @@ func (m *AmountDetail) Reset() { *m = AmountDetail{} }
func (m *AmountDetail) String() string { return proto.CompactTextString(m) } func (m *AmountDetail) String() string { return proto.CompactTextString(m) }
func (*AmountDetail) ProtoMessage() {} func (*AmountDetail) ProtoMessage() {}
func (*AmountDetail) Descriptor() ([]byte, []int) { func (*AmountDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{16} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{16}
} }
func (m *AmountDetail) XXX_Unmarshal(b []byte) error { func (m *AmountDetail) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AmountDetail.Unmarshal(m, b) return xxx_messageInfo_AmountDetail.Unmarshal(m, b)
...@@ -1079,7 +1079,7 @@ func (m *ReplyPrivacyAmounts) Reset() { *m = ReplyPrivacyAmounts{} } ...@@ -1079,7 +1079,7 @@ func (m *ReplyPrivacyAmounts) Reset() { *m = ReplyPrivacyAmounts{} }
func (m *ReplyPrivacyAmounts) String() string { return proto.CompactTextString(m) } func (m *ReplyPrivacyAmounts) String() string { return proto.CompactTextString(m) }
func (*ReplyPrivacyAmounts) ProtoMessage() {} func (*ReplyPrivacyAmounts) ProtoMessage() {}
func (*ReplyPrivacyAmounts) Descriptor() ([]byte, []int) { func (*ReplyPrivacyAmounts) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{17} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{17}
} }
func (m *ReplyPrivacyAmounts) XXX_Unmarshal(b []byte) error { func (m *ReplyPrivacyAmounts) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyPrivacyAmounts.Unmarshal(m, b) return xxx_messageInfo_ReplyPrivacyAmounts.Unmarshal(m, b)
...@@ -1117,7 +1117,7 @@ func (m *ReplyUTXOsOfAmount) Reset() { *m = ReplyUTXOsOfAmount{} } ...@@ -1117,7 +1117,7 @@ func (m *ReplyUTXOsOfAmount) Reset() { *m = ReplyUTXOsOfAmount{} }
func (m *ReplyUTXOsOfAmount) String() string { return proto.CompactTextString(m) } func (m *ReplyUTXOsOfAmount) String() string { return proto.CompactTextString(m) }
func (*ReplyUTXOsOfAmount) ProtoMessage() {} func (*ReplyUTXOsOfAmount) ProtoMessage() {}
func (*ReplyUTXOsOfAmount) Descriptor() ([]byte, []int) { func (*ReplyUTXOsOfAmount) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{18} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{18}
} }
func (m *ReplyUTXOsOfAmount) XXX_Unmarshal(b []byte) error { func (m *ReplyUTXOsOfAmount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyUTXOsOfAmount.Unmarshal(m, b) return xxx_messageInfo_ReplyUTXOsOfAmount.Unmarshal(m, b)
...@@ -1157,7 +1157,7 @@ func (m *ReceiptPrivacyOutput) Reset() { *m = ReceiptPrivacyOutput{} } ...@@ -1157,7 +1157,7 @@ func (m *ReceiptPrivacyOutput) Reset() { *m = ReceiptPrivacyOutput{} }
func (m *ReceiptPrivacyOutput) String() string { return proto.CompactTextString(m) } func (m *ReceiptPrivacyOutput) String() string { return proto.CompactTextString(m) }
func (*ReceiptPrivacyOutput) ProtoMessage() {} func (*ReceiptPrivacyOutput) ProtoMessage() {}
func (*ReceiptPrivacyOutput) Descriptor() ([]byte, []int) { func (*ReceiptPrivacyOutput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{19} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{19}
} }
func (m *ReceiptPrivacyOutput) XXX_Unmarshal(b []byte) error { func (m *ReceiptPrivacyOutput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReceiptPrivacyOutput.Unmarshal(m, b) return xxx_messageInfo_ReceiptPrivacyOutput.Unmarshal(m, b)
...@@ -1210,7 +1210,7 @@ func (m *AmountsOfUTXO) Reset() { *m = AmountsOfUTXO{} } ...@@ -1210,7 +1210,7 @@ func (m *AmountsOfUTXO) Reset() { *m = AmountsOfUTXO{} }
func (m *AmountsOfUTXO) String() string { return proto.CompactTextString(m) } func (m *AmountsOfUTXO) String() string { return proto.CompactTextString(m) }
func (*AmountsOfUTXO) ProtoMessage() {} func (*AmountsOfUTXO) ProtoMessage() {}
func (*AmountsOfUTXO) Descriptor() ([]byte, []int) { func (*AmountsOfUTXO) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{20} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{20}
} }
func (m *AmountsOfUTXO) XXX_Unmarshal(b []byte) error { func (m *AmountsOfUTXO) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AmountsOfUTXO.Unmarshal(m, b) return xxx_messageInfo_AmountsOfUTXO.Unmarshal(m, b)
...@@ -1248,7 +1248,7 @@ func (m *TokenNamesOfUTXO) Reset() { *m = TokenNamesOfUTXO{} } ...@@ -1248,7 +1248,7 @@ func (m *TokenNamesOfUTXO) Reset() { *m = TokenNamesOfUTXO{} }
func (m *TokenNamesOfUTXO) String() string { return proto.CompactTextString(m) } func (m *TokenNamesOfUTXO) String() string { return proto.CompactTextString(m) }
func (*TokenNamesOfUTXO) ProtoMessage() {} func (*TokenNamesOfUTXO) ProtoMessage() {}
func (*TokenNamesOfUTXO) Descriptor() ([]byte, []int) { func (*TokenNamesOfUTXO) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{21} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{21}
} }
func (m *TokenNamesOfUTXO) XXX_Unmarshal(b []byte) error { func (m *TokenNamesOfUTXO) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TokenNamesOfUTXO.Unmarshal(m, b) return xxx_messageInfo_TokenNamesOfUTXO.Unmarshal(m, b)
...@@ -1288,7 +1288,7 @@ func (m *UTXOGlobalIndex4Print) Reset() { *m = UTXOGlobalIndex4Print{} } ...@@ -1288,7 +1288,7 @@ func (m *UTXOGlobalIndex4Print) Reset() { *m = UTXOGlobalIndex4Print{} }
func (m *UTXOGlobalIndex4Print) String() string { return proto.CompactTextString(m) } func (m *UTXOGlobalIndex4Print) String() string { return proto.CompactTextString(m) }
func (*UTXOGlobalIndex4Print) ProtoMessage() {} func (*UTXOGlobalIndex4Print) ProtoMessage() {}
func (*UTXOGlobalIndex4Print) Descriptor() ([]byte, []int) { func (*UTXOGlobalIndex4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{22} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{22}
} }
func (m *UTXOGlobalIndex4Print) XXX_Unmarshal(b []byte) error { func (m *UTXOGlobalIndex4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOGlobalIndex4Print.Unmarshal(m, b) return xxx_messageInfo_UTXOGlobalIndex4Print.Unmarshal(m, b)
...@@ -1335,7 +1335,7 @@ func (m *KeyInput4Print) Reset() { *m = KeyInput4Print{} } ...@@ -1335,7 +1335,7 @@ func (m *KeyInput4Print) Reset() { *m = KeyInput4Print{} }
func (m *KeyInput4Print) String() string { return proto.CompactTextString(m) } func (m *KeyInput4Print) String() string { return proto.CompactTextString(m) }
func (*KeyInput4Print) ProtoMessage() {} func (*KeyInput4Print) ProtoMessage() {}
func (*KeyInput4Print) Descriptor() ([]byte, []int) { func (*KeyInput4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{23} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{23}
} }
func (m *KeyInput4Print) XXX_Unmarshal(b []byte) error { func (m *KeyInput4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyInput4Print.Unmarshal(m, b) return xxx_messageInfo_KeyInput4Print.Unmarshal(m, b)
...@@ -1388,7 +1388,7 @@ func (m *KeyOutput4Print) Reset() { *m = KeyOutput4Print{} } ...@@ -1388,7 +1388,7 @@ func (m *KeyOutput4Print) Reset() { *m = KeyOutput4Print{} }
func (m *KeyOutput4Print) String() string { return proto.CompactTextString(m) } func (m *KeyOutput4Print) String() string { return proto.CompactTextString(m) }
func (*KeyOutput4Print) ProtoMessage() {} func (*KeyOutput4Print) ProtoMessage() {}
func (*KeyOutput4Print) Descriptor() ([]byte, []int) { func (*KeyOutput4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{24} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{24}
} }
func (m *KeyOutput4Print) XXX_Unmarshal(b []byte) error { func (m *KeyOutput4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KeyOutput4Print.Unmarshal(m, b) return xxx_messageInfo_KeyOutput4Print.Unmarshal(m, b)
...@@ -1433,7 +1433,7 @@ func (m *PrivacyInput4Print) Reset() { *m = PrivacyInput4Print{} } ...@@ -1433,7 +1433,7 @@ func (m *PrivacyInput4Print) Reset() { *m = PrivacyInput4Print{} }
func (m *PrivacyInput4Print) String() string { return proto.CompactTextString(m) } func (m *PrivacyInput4Print) String() string { return proto.CompactTextString(m) }
func (*PrivacyInput4Print) ProtoMessage() {} func (*PrivacyInput4Print) ProtoMessage() {}
func (*PrivacyInput4Print) Descriptor() ([]byte, []int) { func (*PrivacyInput4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{25} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{25}
} }
func (m *PrivacyInput4Print) XXX_Unmarshal(b []byte) error { func (m *PrivacyInput4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyInput4Print.Unmarshal(m, b) return xxx_messageInfo_PrivacyInput4Print.Unmarshal(m, b)
...@@ -1472,7 +1472,7 @@ func (m *PrivacyOutput4Print) Reset() { *m = PrivacyOutput4Print{} } ...@@ -1472,7 +1472,7 @@ func (m *PrivacyOutput4Print) Reset() { *m = PrivacyOutput4Print{} }
func (m *PrivacyOutput4Print) String() string { return proto.CompactTextString(m) } func (m *PrivacyOutput4Print) String() string { return proto.CompactTextString(m) }
func (*PrivacyOutput4Print) ProtoMessage() {} func (*PrivacyOutput4Print) ProtoMessage() {}
func (*PrivacyOutput4Print) Descriptor() ([]byte, []int) { func (*PrivacyOutput4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{26} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{26}
} }
func (m *PrivacyOutput4Print) XXX_Unmarshal(b []byte) error { func (m *PrivacyOutput4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyOutput4Print.Unmarshal(m, b) return xxx_messageInfo_PrivacyOutput4Print.Unmarshal(m, b)
...@@ -1520,7 +1520,7 @@ func (m *Public2Privacy4Print) Reset() { *m = Public2Privacy4Print{} } ...@@ -1520,7 +1520,7 @@ func (m *Public2Privacy4Print) Reset() { *m = Public2Privacy4Print{} }
func (m *Public2Privacy4Print) String() string { return proto.CompactTextString(m) } func (m *Public2Privacy4Print) String() string { return proto.CompactTextString(m) }
func (*Public2Privacy4Print) ProtoMessage() {} func (*Public2Privacy4Print) ProtoMessage() {}
func (*Public2Privacy4Print) Descriptor() ([]byte, []int) { func (*Public2Privacy4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{27} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{27}
} }
func (m *Public2Privacy4Print) XXX_Unmarshal(b []byte) error { func (m *Public2Privacy4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Public2Privacy4Print.Unmarshal(m, b) return xxx_messageInfo_Public2Privacy4Print.Unmarshal(m, b)
...@@ -1583,7 +1583,7 @@ func (m *Privacy2Privacy4Print) Reset() { *m = Privacy2Privacy4Print{} } ...@@ -1583,7 +1583,7 @@ func (m *Privacy2Privacy4Print) Reset() { *m = Privacy2Privacy4Print{} }
func (m *Privacy2Privacy4Print) String() string { return proto.CompactTextString(m) } func (m *Privacy2Privacy4Print) String() string { return proto.CompactTextString(m) }
func (*Privacy2Privacy4Print) ProtoMessage() {} func (*Privacy2Privacy4Print) ProtoMessage() {}
func (*Privacy2Privacy4Print) Descriptor() ([]byte, []int) { func (*Privacy2Privacy4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{28} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{28}
} }
func (m *Privacy2Privacy4Print) XXX_Unmarshal(b []byte) error { func (m *Privacy2Privacy4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Privacy2Privacy4Print.Unmarshal(m, b) return xxx_messageInfo_Privacy2Privacy4Print.Unmarshal(m, b)
...@@ -1653,7 +1653,7 @@ func (m *Privacy2Public4Print) Reset() { *m = Privacy2Public4Print{} } ...@@ -1653,7 +1653,7 @@ func (m *Privacy2Public4Print) Reset() { *m = Privacy2Public4Print{} }
func (m *Privacy2Public4Print) String() string { return proto.CompactTextString(m) } func (m *Privacy2Public4Print) String() string { return proto.CompactTextString(m) }
func (*Privacy2Public4Print) ProtoMessage() {} func (*Privacy2Public4Print) ProtoMessage() {}
func (*Privacy2Public4Print) Descriptor() ([]byte, []int) { func (*Privacy2Public4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{29} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{29}
} }
func (m *Privacy2Public4Print) XXX_Unmarshal(b []byte) error { func (m *Privacy2Public4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Privacy2Public4Print.Unmarshal(m, b) return xxx_messageInfo_Privacy2Public4Print.Unmarshal(m, b)
...@@ -1724,7 +1724,7 @@ func (m *PrivacyAction4Print) Reset() { *m = PrivacyAction4Print{} } ...@@ -1724,7 +1724,7 @@ func (m *PrivacyAction4Print) Reset() { *m = PrivacyAction4Print{} }
func (m *PrivacyAction4Print) String() string { return proto.CompactTextString(m) } func (m *PrivacyAction4Print) String() string { return proto.CompactTextString(m) }
func (*PrivacyAction4Print) ProtoMessage() {} func (*PrivacyAction4Print) ProtoMessage() {}
func (*PrivacyAction4Print) Descriptor() ([]byte, []int) { func (*PrivacyAction4Print) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{30} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{30}
} }
func (m *PrivacyAction4Print) XXX_Unmarshal(b []byte) error { func (m *PrivacyAction4Print) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyAction4Print.Unmarshal(m, b) return xxx_messageInfo_PrivacyAction4Print.Unmarshal(m, b)
...@@ -1908,7 +1908,7 @@ func (m *ReplyPrivacyPkPair) Reset() { *m = ReplyPrivacyPkPair{} } ...@@ -1908,7 +1908,7 @@ func (m *ReplyPrivacyPkPair) Reset() { *m = ReplyPrivacyPkPair{} }
func (m *ReplyPrivacyPkPair) String() string { return proto.CompactTextString(m) } func (m *ReplyPrivacyPkPair) String() string { return proto.CompactTextString(m) }
func (*ReplyPrivacyPkPair) ProtoMessage() {} func (*ReplyPrivacyPkPair) ProtoMessage() {}
func (*ReplyPrivacyPkPair) Descriptor() ([]byte, []int) { func (*ReplyPrivacyPkPair) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{31} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{31}
} }
func (m *ReplyPrivacyPkPair) XXX_Unmarshal(b []byte) error { func (m *ReplyPrivacyPkPair) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyPrivacyPkPair.Unmarshal(m, b) return xxx_messageInfo_ReplyPrivacyPkPair.Unmarshal(m, b)
...@@ -1945,6 +1945,7 @@ func (m *ReplyPrivacyPkPair) GetPubkeypair() string { ...@@ -1945,6 +1945,7 @@ func (m *ReplyPrivacyPkPair) GetPubkeypair() string {
type ReqPrivBal4AddrToken struct { type ReqPrivBal4AddrToken struct {
Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
AssetExec string `protobuf:"bytes,3,opt,name=assetExec,proto3" json:"assetExec,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:"-"`
...@@ -1954,7 +1955,7 @@ func (m *ReqPrivBal4AddrToken) Reset() { *m = ReqPrivBal4AddrToken{} } ...@@ -1954,7 +1955,7 @@ func (m *ReqPrivBal4AddrToken) Reset() { *m = ReqPrivBal4AddrToken{} }
func (m *ReqPrivBal4AddrToken) String() string { return proto.CompactTextString(m) } func (m *ReqPrivBal4AddrToken) String() string { return proto.CompactTextString(m) }
func (*ReqPrivBal4AddrToken) ProtoMessage() {} func (*ReqPrivBal4AddrToken) ProtoMessage() {}
func (*ReqPrivBal4AddrToken) Descriptor() ([]byte, []int) { func (*ReqPrivBal4AddrToken) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{32} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{32}
} }
func (m *ReqPrivBal4AddrToken) XXX_Unmarshal(b []byte) error { func (m *ReqPrivBal4AddrToken) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqPrivBal4AddrToken.Unmarshal(m, b) return xxx_messageInfo_ReqPrivBal4AddrToken.Unmarshal(m, b)
...@@ -1988,6 +1989,13 @@ func (m *ReqPrivBal4AddrToken) GetToken() string { ...@@ -1988,6 +1989,13 @@ func (m *ReqPrivBal4AddrToken) GetToken() string {
return "" return ""
} }
func (m *ReqPrivBal4AddrToken) GetAssetExec() string {
if m != nil {
return m.AssetExec
}
return ""
}
type ReplyPrivacyBalance struct { type ReplyPrivacyBalance struct {
Onetimeaddr string `protobuf:"bytes,1,opt,name=onetimeaddr,proto3" json:"onetimeaddr,omitempty"` Onetimeaddr string `protobuf:"bytes,1,opt,name=onetimeaddr,proto3" json:"onetimeaddr,omitempty"`
Balance int64 `protobuf:"varint,2,opt,name=balance,proto3" json:"balance,omitempty"` Balance int64 `protobuf:"varint,2,opt,name=balance,proto3" json:"balance,omitempty"`
...@@ -2000,7 +2008,7 @@ func (m *ReplyPrivacyBalance) Reset() { *m = ReplyPrivacyBalance{} } ...@@ -2000,7 +2008,7 @@ func (m *ReplyPrivacyBalance) Reset() { *m = ReplyPrivacyBalance{} }
func (m *ReplyPrivacyBalance) String() string { return proto.CompactTextString(m) } func (m *ReplyPrivacyBalance) String() string { return proto.CompactTextString(m) }
func (*ReplyPrivacyBalance) ProtoMessage() {} func (*ReplyPrivacyBalance) ProtoMessage() {}
func (*ReplyPrivacyBalance) Descriptor() ([]byte, []int) { func (*ReplyPrivacyBalance) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{33} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{33}
} }
func (m *ReplyPrivacyBalance) XXX_Unmarshal(b []byte) error { func (m *ReplyPrivacyBalance) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyPrivacyBalance.Unmarshal(m, b) return xxx_messageInfo_ReplyPrivacyBalance.Unmarshal(m, b)
...@@ -2045,6 +2053,7 @@ type PrivacyDBStore struct { ...@@ -2045,6 +2053,7 @@ type PrivacyDBStore struct {
Height int64 `protobuf:"varint,8,opt,name=height,proto3" json:"height,omitempty"` Height int64 `protobuf:"varint,8,opt,name=height,proto3" json:"height,omitempty"`
Txindex int32 `protobuf:"varint,9,opt,name=txindex,proto3" json:"txindex,omitempty"` Txindex int32 `protobuf:"varint,9,opt,name=txindex,proto3" json:"txindex,omitempty"`
Blockhash []byte `protobuf:"bytes,10,opt,name=blockhash,proto3" json:"blockhash,omitempty"` Blockhash []byte `protobuf:"bytes,10,opt,name=blockhash,proto3" json:"blockhash,omitempty"`
AssetExec string `protobuf:"bytes,11,opt,name=assetExec,proto3" json:"assetExec,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:"-"`
...@@ -2054,7 +2063,7 @@ func (m *PrivacyDBStore) Reset() { *m = PrivacyDBStore{} } ...@@ -2054,7 +2063,7 @@ func (m *PrivacyDBStore) Reset() { *m = PrivacyDBStore{} }
func (m *PrivacyDBStore) String() string { return proto.CompactTextString(m) } func (m *PrivacyDBStore) String() string { return proto.CompactTextString(m) }
func (*PrivacyDBStore) ProtoMessage() {} func (*PrivacyDBStore) ProtoMessage() {}
func (*PrivacyDBStore) Descriptor() ([]byte, []int) { func (*PrivacyDBStore) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{34} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{34}
} }
func (m *PrivacyDBStore) XXX_Unmarshal(b []byte) error { func (m *PrivacyDBStore) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacyDBStore.Unmarshal(m, b) return xxx_messageInfo_PrivacyDBStore.Unmarshal(m, b)
...@@ -2144,6 +2153,13 @@ func (m *PrivacyDBStore) GetBlockhash() []byte { ...@@ -2144,6 +2153,13 @@ func (m *PrivacyDBStore) GetBlockhash() []byte {
return nil return nil
} }
func (m *PrivacyDBStore) GetAssetExec() string {
if m != nil {
return m.AssetExec
}
return ""
}
type UTXO struct { type UTXO struct {
Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"` Amount int64 `protobuf:"varint,1,opt,name=amount,proto3" json:"amount,omitempty"`
UtxoBasic *UTXOBasic `protobuf:"bytes,2,opt,name=utxoBasic,proto3" json:"utxoBasic,omitempty"` UtxoBasic *UTXOBasic `protobuf:"bytes,2,opt,name=utxoBasic,proto3" json:"utxoBasic,omitempty"`
...@@ -2156,7 +2172,7 @@ func (m *UTXO) Reset() { *m = UTXO{} } ...@@ -2156,7 +2172,7 @@ func (m *UTXO) Reset() { *m = UTXO{} }
func (m *UTXO) String() string { return proto.CompactTextString(m) } func (m *UTXO) String() string { return proto.CompactTextString(m) }
func (*UTXO) ProtoMessage() {} func (*UTXO) ProtoMessage() {}
func (*UTXO) Descriptor() ([]byte, []int) { func (*UTXO) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{35} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{35}
} }
func (m *UTXO) XXX_Unmarshal(b []byte) error { func (m *UTXO) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXO.Unmarshal(m, b) return xxx_messageInfo_UTXO.Unmarshal(m, b)
...@@ -2203,7 +2219,7 @@ func (m *UTXOHaveTxHash) Reset() { *m = UTXOHaveTxHash{} } ...@@ -2203,7 +2219,7 @@ func (m *UTXOHaveTxHash) Reset() { *m = UTXOHaveTxHash{} }
func (m *UTXOHaveTxHash) String() string { return proto.CompactTextString(m) } func (m *UTXOHaveTxHash) String() string { return proto.CompactTextString(m) }
func (*UTXOHaveTxHash) ProtoMessage() {} func (*UTXOHaveTxHash) ProtoMessage() {}
func (*UTXOHaveTxHash) Descriptor() ([]byte, []int) { func (*UTXOHaveTxHash) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{36} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{36}
} }
func (m *UTXOHaveTxHash) XXX_Unmarshal(b []byte) error { func (m *UTXOHaveTxHash) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOHaveTxHash.Unmarshal(m, b) return xxx_messageInfo_UTXOHaveTxHash.Unmarshal(m, b)
...@@ -2255,7 +2271,7 @@ func (m *UTXOs) Reset() { *m = UTXOs{} } ...@@ -2255,7 +2271,7 @@ func (m *UTXOs) Reset() { *m = UTXOs{} }
func (m *UTXOs) String() string { return proto.CompactTextString(m) } func (m *UTXOs) String() string { return proto.CompactTextString(m) }
func (*UTXOs) ProtoMessage() {} func (*UTXOs) ProtoMessage() {}
func (*UTXOs) Descriptor() ([]byte, []int) { func (*UTXOs) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{37} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{37}
} }
func (m *UTXOs) XXX_Unmarshal(b []byte) error { func (m *UTXOs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOs.Unmarshal(m, b) return xxx_messageInfo_UTXOs.Unmarshal(m, b)
...@@ -2293,7 +2309,7 @@ func (m *UTXOHaveTxHashs) Reset() { *m = UTXOHaveTxHashs{} } ...@@ -2293,7 +2309,7 @@ func (m *UTXOHaveTxHashs) Reset() { *m = UTXOHaveTxHashs{} }
func (m *UTXOHaveTxHashs) String() string { return proto.CompactTextString(m) } func (m *UTXOHaveTxHashs) String() string { return proto.CompactTextString(m) }
func (*UTXOHaveTxHashs) ProtoMessage() {} func (*UTXOHaveTxHashs) ProtoMessage() {}
func (*UTXOHaveTxHashs) Descriptor() ([]byte, []int) { func (*UTXOHaveTxHashs) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{38} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{38}
} }
func (m *UTXOHaveTxHashs) XXX_Unmarshal(b []byte) error { func (m *UTXOHaveTxHashs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOHaveTxHashs.Unmarshal(m, b) return xxx_messageInfo_UTXOHaveTxHashs.Unmarshal(m, b)
...@@ -2334,7 +2350,7 @@ func (m *ReqUTXOGlobalIndex) Reset() { *m = ReqUTXOGlobalIndex{} } ...@@ -2334,7 +2350,7 @@ func (m *ReqUTXOGlobalIndex) Reset() { *m = ReqUTXOGlobalIndex{} }
func (m *ReqUTXOGlobalIndex) String() string { return proto.CompactTextString(m) } func (m *ReqUTXOGlobalIndex) String() string { return proto.CompactTextString(m) }
func (*ReqUTXOGlobalIndex) ProtoMessage() {} func (*ReqUTXOGlobalIndex) ProtoMessage() {}
func (*ReqUTXOGlobalIndex) Descriptor() ([]byte, []int) { func (*ReqUTXOGlobalIndex) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{39} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{39}
} }
func (m *ReqUTXOGlobalIndex) XXX_Unmarshal(b []byte) error { func (m *ReqUTXOGlobalIndex) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqUTXOGlobalIndex.Unmarshal(m, b) return xxx_messageInfo_ReqUTXOGlobalIndex.Unmarshal(m, b)
...@@ -2394,7 +2410,7 @@ func (m *UTXOBasic) Reset() { *m = UTXOBasic{} } ...@@ -2394,7 +2410,7 @@ func (m *UTXOBasic) Reset() { *m = UTXOBasic{} }
func (m *UTXOBasic) String() string { return proto.CompactTextString(m) } func (m *UTXOBasic) String() string { return proto.CompactTextString(m) }
func (*UTXOBasic) ProtoMessage() {} func (*UTXOBasic) ProtoMessage() {}
func (*UTXOBasic) Descriptor() ([]byte, []int) { func (*UTXOBasic) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{40} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{40}
} }
func (m *UTXOBasic) XXX_Unmarshal(b []byte) error { func (m *UTXOBasic) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOBasic.Unmarshal(m, b) return xxx_messageInfo_UTXOBasic.Unmarshal(m, b)
...@@ -2440,7 +2456,7 @@ func (m *UTXOIndex4Amount) Reset() { *m = UTXOIndex4Amount{} } ...@@ -2440,7 +2456,7 @@ func (m *UTXOIndex4Amount) Reset() { *m = UTXOIndex4Amount{} }
func (m *UTXOIndex4Amount) String() string { return proto.CompactTextString(m) } func (m *UTXOIndex4Amount) String() string { return proto.CompactTextString(m) }
func (*UTXOIndex4Amount) ProtoMessage() {} func (*UTXOIndex4Amount) ProtoMessage() {}
func (*UTXOIndex4Amount) Descriptor() ([]byte, []int) { func (*UTXOIndex4Amount) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{41} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{41}
} }
func (m *UTXOIndex4Amount) XXX_Unmarshal(b []byte) error { func (m *UTXOIndex4Amount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOIndex4Amount.Unmarshal(m, b) return xxx_messageInfo_UTXOIndex4Amount.Unmarshal(m, b)
...@@ -2485,7 +2501,7 @@ func (m *ResUTXOGlobalIndex) Reset() { *m = ResUTXOGlobalIndex{} } ...@@ -2485,7 +2501,7 @@ func (m *ResUTXOGlobalIndex) Reset() { *m = ResUTXOGlobalIndex{} }
func (m *ResUTXOGlobalIndex) String() string { return proto.CompactTextString(m) } func (m *ResUTXOGlobalIndex) String() string { return proto.CompactTextString(m) }
func (*ResUTXOGlobalIndex) ProtoMessage() {} func (*ResUTXOGlobalIndex) ProtoMessage() {}
func (*ResUTXOGlobalIndex) Descriptor() ([]byte, []int) { func (*ResUTXOGlobalIndex) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{42} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{42}
} }
func (m *ResUTXOGlobalIndex) XXX_Unmarshal(b []byte) error { func (m *ResUTXOGlobalIndex) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResUTXOGlobalIndex.Unmarshal(m, b) return xxx_messageInfo_ResUTXOGlobalIndex.Unmarshal(m, b)
...@@ -2519,6 +2535,7 @@ type FTXOsSTXOsInOneTx struct { ...@@ -2519,6 +2535,7 @@ type FTXOsSTXOsInOneTx struct {
Expire int64 `protobuf:"varint,3,opt,name=expire,proto3" json:"expire,omitempty"` Expire int64 `protobuf:"varint,3,opt,name=expire,proto3" json:"expire,omitempty"`
Txhash string `protobuf:"bytes,4,opt,name=txhash,proto3" json:"txhash,omitempty"` Txhash string `protobuf:"bytes,4,opt,name=txhash,proto3" json:"txhash,omitempty"`
Utxos []*UTXO `protobuf:"bytes,5,rep,name=utxos,proto3" json:"utxos,omitempty"` Utxos []*UTXO `protobuf:"bytes,5,rep,name=utxos,proto3" json:"utxos,omitempty"`
AssetExec string `protobuf:"bytes,6,opt,name=assetExec,proto3" json:"assetExec,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:"-"`
...@@ -2528,7 +2545,7 @@ func (m *FTXOsSTXOsInOneTx) Reset() { *m = FTXOsSTXOsInOneTx{} } ...@@ -2528,7 +2545,7 @@ func (m *FTXOsSTXOsInOneTx) Reset() { *m = FTXOsSTXOsInOneTx{} }
func (m *FTXOsSTXOsInOneTx) String() string { return proto.CompactTextString(m) } func (m *FTXOsSTXOsInOneTx) String() string { return proto.CompactTextString(m) }
func (*FTXOsSTXOsInOneTx) ProtoMessage() {} func (*FTXOsSTXOsInOneTx) ProtoMessage() {}
func (*FTXOsSTXOsInOneTx) Descriptor() ([]byte, []int) { func (*FTXOsSTXOsInOneTx) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{43} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{43}
} }
func (m *FTXOsSTXOsInOneTx) XXX_Unmarshal(b []byte) error { func (m *FTXOsSTXOsInOneTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FTXOsSTXOsInOneTx.Unmarshal(m, b) return xxx_messageInfo_FTXOsSTXOsInOneTx.Unmarshal(m, b)
...@@ -2583,6 +2600,13 @@ func (m *FTXOsSTXOsInOneTx) GetUtxos() []*UTXO { ...@@ -2583,6 +2600,13 @@ func (m *FTXOsSTXOsInOneTx) GetUtxos() []*UTXO {
return nil return nil
} }
func (m *FTXOsSTXOsInOneTx) GetAssetExec() string {
if m != nil {
return m.AssetExec
}
return ""
}
type RealKeyInput struct { type RealKeyInput struct {
Realinputkey int32 `protobuf:"varint,1,opt,name=realinputkey,proto3" json:"realinputkey,omitempty"` Realinputkey int32 `protobuf:"varint,1,opt,name=realinputkey,proto3" json:"realinputkey,omitempty"`
Onetimeprivkey []byte `protobuf:"bytes,2,opt,name=onetimeprivkey,proto3" json:"onetimeprivkey,omitempty"` Onetimeprivkey []byte `protobuf:"bytes,2,opt,name=onetimeprivkey,proto3" json:"onetimeprivkey,omitempty"`
...@@ -2595,7 +2619,7 @@ func (m *RealKeyInput) Reset() { *m = RealKeyInput{} } ...@@ -2595,7 +2619,7 @@ func (m *RealKeyInput) Reset() { *m = RealKeyInput{} }
func (m *RealKeyInput) String() string { return proto.CompactTextString(m) } func (m *RealKeyInput) String() string { return proto.CompactTextString(m) }
func (*RealKeyInput) ProtoMessage() {} func (*RealKeyInput) ProtoMessage() {}
func (*RealKeyInput) Descriptor() ([]byte, []int) { func (*RealKeyInput) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{44} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{44}
} }
func (m *RealKeyInput) XXX_Unmarshal(b []byte) error { func (m *RealKeyInput) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RealKeyInput.Unmarshal(m, b) return xxx_messageInfo_RealKeyInput.Unmarshal(m, b)
...@@ -2640,7 +2664,7 @@ func (m *UTXOBasics) Reset() { *m = UTXOBasics{} } ...@@ -2640,7 +2664,7 @@ func (m *UTXOBasics) Reset() { *m = UTXOBasics{} }
func (m *UTXOBasics) String() string { return proto.CompactTextString(m) } func (m *UTXOBasics) String() string { return proto.CompactTextString(m) }
func (*UTXOBasics) ProtoMessage() {} func (*UTXOBasics) ProtoMessage() {}
func (*UTXOBasics) Descriptor() ([]byte, []int) { func (*UTXOBasics) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{45} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{45}
} }
func (m *UTXOBasics) XXX_Unmarshal(b []byte) error { func (m *UTXOBasics) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UTXOBasics.Unmarshal(m, b) return xxx_messageInfo_UTXOBasics.Unmarshal(m, b)
...@@ -2692,7 +2716,7 @@ func (m *CreateTransactionCache) Reset() { *m = CreateTransactionCache{} ...@@ -2692,7 +2716,7 @@ func (m *CreateTransactionCache) Reset() { *m = CreateTransactionCache{}
func (m *CreateTransactionCache) String() string { return proto.CompactTextString(m) } func (m *CreateTransactionCache) String() string { return proto.CompactTextString(m) }
func (*CreateTransactionCache) ProtoMessage() {} func (*CreateTransactionCache) ProtoMessage() {}
func (*CreateTransactionCache) Descriptor() ([]byte, []int) { func (*CreateTransactionCache) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{46} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{46}
} }
func (m *CreateTransactionCache) XXX_Unmarshal(b []byte) error { func (m *CreateTransactionCache) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateTransactionCache.Unmarshal(m, b) return xxx_messageInfo_CreateTransactionCache.Unmarshal(m, b)
...@@ -2787,7 +2811,7 @@ func (m *ReqCacheTxList) Reset() { *m = ReqCacheTxList{} } ...@@ -2787,7 +2811,7 @@ func (m *ReqCacheTxList) Reset() { *m = ReqCacheTxList{} }
func (m *ReqCacheTxList) String() string { return proto.CompactTextString(m) } func (m *ReqCacheTxList) String() string { return proto.CompactTextString(m) }
func (*ReqCacheTxList) ProtoMessage() {} func (*ReqCacheTxList) ProtoMessage() {}
func (*ReqCacheTxList) Descriptor() ([]byte, []int) { func (*ReqCacheTxList) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{47} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{47}
} }
func (m *ReqCacheTxList) XXX_Unmarshal(b []byte) error { func (m *ReqCacheTxList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqCacheTxList.Unmarshal(m, b) return xxx_messageInfo_ReqCacheTxList.Unmarshal(m, b)
...@@ -2832,7 +2856,7 @@ func (m *ReplyCacheTxList) Reset() { *m = ReplyCacheTxList{} } ...@@ -2832,7 +2856,7 @@ func (m *ReplyCacheTxList) Reset() { *m = ReplyCacheTxList{} }
func (m *ReplyCacheTxList) String() string { return proto.CompactTextString(m) } func (m *ReplyCacheTxList) String() string { return proto.CompactTextString(m) }
func (*ReplyCacheTxList) ProtoMessage() {} func (*ReplyCacheTxList) ProtoMessage() {}
func (*ReplyCacheTxList) Descriptor() ([]byte, []int) { func (*ReplyCacheTxList) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{48} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{48}
} }
func (m *ReplyCacheTxList) XXX_Unmarshal(b []byte) error { func (m *ReplyCacheTxList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyCacheTxList.Unmarshal(m, b) return xxx_messageInfo_ReplyCacheTxList.Unmarshal(m, b)
...@@ -2860,8 +2884,15 @@ func (m *ReplyCacheTxList) GetTxs() []*types.Transaction { ...@@ -2860,8 +2884,15 @@ func (m *ReplyCacheTxList) GetTxs() []*types.Transaction {
} }
type ReqPrivacyAccount struct { type ReqPrivacyAccount struct {
Tokenname string `protobuf:"bytes,1,opt,name=tokenname,proto3" json:"tokenname,omitempty"` Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
// 设定显示的数据类型信息
// 0: 只显示账户的数值信息
// 1: 显示UTXO明细
// 2: 显示FTXO明细
// 3: 全部显示
Displaymode int32 `protobuf:"varint,3,opt,name=displaymode,proto3" json:"displaymode,omitempty"`
AssetExec string `protobuf:"bytes,4,opt,name=assetExec,proto3" json:"assetExec,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:"-"`
...@@ -2871,7 +2902,7 @@ func (m *ReqPrivacyAccount) Reset() { *m = ReqPrivacyAccount{} } ...@@ -2871,7 +2902,7 @@ func (m *ReqPrivacyAccount) Reset() { *m = ReqPrivacyAccount{} }
func (m *ReqPrivacyAccount) String() string { return proto.CompactTextString(m) } func (m *ReqPrivacyAccount) String() string { return proto.CompactTextString(m) }
func (*ReqPrivacyAccount) ProtoMessage() {} func (*ReqPrivacyAccount) ProtoMessage() {}
func (*ReqPrivacyAccount) Descriptor() ([]byte, []int) { func (*ReqPrivacyAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{49} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{49}
} }
func (m *ReqPrivacyAccount) XXX_Unmarshal(b []byte) error { func (m *ReqPrivacyAccount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqPrivacyAccount.Unmarshal(m, b) return xxx_messageInfo_ReqPrivacyAccount.Unmarshal(m, b)
...@@ -2891,13 +2922,6 @@ func (m *ReqPrivacyAccount) XXX_DiscardUnknown() { ...@@ -2891,13 +2922,6 @@ func (m *ReqPrivacyAccount) XXX_DiscardUnknown() {
var xxx_messageInfo_ReqPrivacyAccount proto.InternalMessageInfo var xxx_messageInfo_ReqPrivacyAccount proto.InternalMessageInfo
func (m *ReqPrivacyAccount) GetTokenname() string {
if m != nil {
return m.Tokenname
}
return ""
}
func (m *ReqPrivacyAccount) GetAddr() string { func (m *ReqPrivacyAccount) GetAddr() string {
if m != nil { if m != nil {
return m.Addr return m.Addr
...@@ -2905,63 +2929,25 @@ func (m *ReqPrivacyAccount) GetAddr() string { ...@@ -2905,63 +2929,25 @@ func (m *ReqPrivacyAccount) GetAddr() string {
return "" return ""
} }
type ReqPPrivacyAccount struct { func (m *ReqPrivacyAccount) GetToken() string {
Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
// 设定显示的数据类型信息
// 0: 只显示账户的数值信息
// 1: 显示UTXO明细
// 2: 显示FTXO明细
// 3: 全部显示
Displaymode int32 `protobuf:"varint,3,opt,name=displaymode,proto3" json:"displaymode,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReqPPrivacyAccount) Reset() { *m = ReqPPrivacyAccount{} }
func (m *ReqPPrivacyAccount) String() string { return proto.CompactTextString(m) }
func (*ReqPPrivacyAccount) ProtoMessage() {}
func (*ReqPPrivacyAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{50}
}
func (m *ReqPPrivacyAccount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqPPrivacyAccount.Unmarshal(m, b)
}
func (m *ReqPPrivacyAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReqPPrivacyAccount.Marshal(b, m, deterministic)
}
func (dst *ReqPPrivacyAccount) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReqPPrivacyAccount.Merge(dst, src)
}
func (m *ReqPPrivacyAccount) XXX_Size() int {
return xxx_messageInfo_ReqPPrivacyAccount.Size(m)
}
func (m *ReqPPrivacyAccount) XXX_DiscardUnknown() {
xxx_messageInfo_ReqPPrivacyAccount.DiscardUnknown(m)
}
var xxx_messageInfo_ReqPPrivacyAccount proto.InternalMessageInfo
func (m *ReqPPrivacyAccount) GetAddr() string {
if m != nil { if m != nil {
return m.Addr return m.Token
} }
return "" return ""
} }
func (m *ReqPPrivacyAccount) GetToken() string { func (m *ReqPrivacyAccount) GetDisplaymode() int32 {
if m != nil { if m != nil {
return m.Token return m.Displaymode
} }
return "" return 0
} }
func (m *ReqPPrivacyAccount) GetDisplaymode() int32 { func (m *ReqPrivacyAccount) GetAssetExec() string {
if m != nil { if m != nil {
return m.Displaymode return m.AssetExec
} }
return 0 return ""
} }
// 请求隐私账户信息的应答 // 请求隐私账户信息的应答
...@@ -2980,7 +2966,7 @@ func (m *ReplyPrivacyAccount) Reset() { *m = ReplyPrivacyAccount{} } ...@@ -2980,7 +2966,7 @@ func (m *ReplyPrivacyAccount) Reset() { *m = ReplyPrivacyAccount{} }
func (m *ReplyPrivacyAccount) String() string { return proto.CompactTextString(m) } func (m *ReplyPrivacyAccount) String() string { return proto.CompactTextString(m) }
func (*ReplyPrivacyAccount) ProtoMessage() {} func (*ReplyPrivacyAccount) ProtoMessage() {}
func (*ReplyPrivacyAccount) Descriptor() ([]byte, []int) { func (*ReplyPrivacyAccount) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{51} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{50}
} }
func (m *ReplyPrivacyAccount) XXX_Unmarshal(b []byte) error { func (m *ReplyPrivacyAccount) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReplyPrivacyAccount.Unmarshal(m, b) return xxx_messageInfo_ReplyPrivacyAccount.Unmarshal(m, b)
...@@ -3033,7 +3019,7 @@ func (m *ReqCreateCacheTxKey) Reset() { *m = ReqCreateCacheTxKey{} } ...@@ -3033,7 +3019,7 @@ func (m *ReqCreateCacheTxKey) Reset() { *m = ReqCreateCacheTxKey{} }
func (m *ReqCreateCacheTxKey) String() string { return proto.CompactTextString(m) } func (m *ReqCreateCacheTxKey) String() string { return proto.CompactTextString(m) }
func (*ReqCreateCacheTxKey) ProtoMessage() {} func (*ReqCreateCacheTxKey) ProtoMessage() {}
func (*ReqCreateCacheTxKey) Descriptor() ([]byte, []int) { func (*ReqCreateCacheTxKey) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{52} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{51}
} }
func (m *ReqCreateCacheTxKey) XXX_Unmarshal(b []byte) error { func (m *ReqCreateCacheTxKey) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqCreateCacheTxKey.Unmarshal(m, b) return xxx_messageInfo_ReqCreateCacheTxKey.Unmarshal(m, b)
...@@ -3078,6 +3064,7 @@ type ReqPrivacyTransactionList struct { ...@@ -3078,6 +3064,7 @@ type ReqPrivacyTransactionList struct {
From string `protobuf:"bytes,5,opt,name=from,proto3" json:"from,omitempty"` From string `protobuf:"bytes,5,opt,name=from,proto3" json:"from,omitempty"`
Address string `protobuf:"bytes,6,opt,name=address,proto3" json:"address,omitempty"` Address string `protobuf:"bytes,6,opt,name=address,proto3" json:"address,omitempty"`
Seedtxhash []byte `protobuf:"bytes,7,opt,name=seedtxhash,proto3" json:"seedtxhash,omitempty"` Seedtxhash []byte `protobuf:"bytes,7,opt,name=seedtxhash,proto3" json:"seedtxhash,omitempty"`
AssetExec string `protobuf:"bytes,8,opt,name=assetExec,proto3" json:"assetExec,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:"-"`
...@@ -3087,7 +3074,7 @@ func (m *ReqPrivacyTransactionList) Reset() { *m = ReqPrivacyTransaction ...@@ -3087,7 +3074,7 @@ func (m *ReqPrivacyTransactionList) Reset() { *m = ReqPrivacyTransaction
func (m *ReqPrivacyTransactionList) String() string { return proto.CompactTextString(m) } func (m *ReqPrivacyTransactionList) String() string { return proto.CompactTextString(m) }
func (*ReqPrivacyTransactionList) ProtoMessage() {} func (*ReqPrivacyTransactionList) ProtoMessage() {}
func (*ReqPrivacyTransactionList) Descriptor() ([]byte, []int) { func (*ReqPrivacyTransactionList) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{53} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{52}
} }
func (m *ReqPrivacyTransactionList) XXX_Unmarshal(b []byte) error { func (m *ReqPrivacyTransactionList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqPrivacyTransactionList.Unmarshal(m, b) return xxx_messageInfo_ReqPrivacyTransactionList.Unmarshal(m, b)
...@@ -3156,6 +3143,13 @@ func (m *ReqPrivacyTransactionList) GetSeedtxhash() []byte { ...@@ -3156,6 +3143,13 @@ func (m *ReqPrivacyTransactionList) GetSeedtxhash() []byte {
return nil return nil
} }
func (m *ReqPrivacyTransactionList) GetAssetExec() string {
if m != nil {
return m.AssetExec
}
return ""
}
type ReqRescanUtxos struct { type ReqRescanUtxos struct {
Addrs []string `protobuf:"bytes,1,rep,name=addrs,proto3" json:"addrs,omitempty"` Addrs []string `protobuf:"bytes,1,rep,name=addrs,proto3" json:"addrs,omitempty"`
Flag int32 `protobuf:"varint,2,opt,name=flag,proto3" json:"flag,omitempty"` Flag int32 `protobuf:"varint,2,opt,name=flag,proto3" json:"flag,omitempty"`
...@@ -3168,7 +3162,7 @@ func (m *ReqRescanUtxos) Reset() { *m = ReqRescanUtxos{} } ...@@ -3168,7 +3162,7 @@ func (m *ReqRescanUtxos) Reset() { *m = ReqRescanUtxos{} }
func (m *ReqRescanUtxos) String() string { return proto.CompactTextString(m) } func (m *ReqRescanUtxos) String() string { return proto.CompactTextString(m) }
func (*ReqRescanUtxos) ProtoMessage() {} func (*ReqRescanUtxos) ProtoMessage() {}
func (*ReqRescanUtxos) Descriptor() ([]byte, []int) { func (*ReqRescanUtxos) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{54} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{53}
} }
func (m *ReqRescanUtxos) XXX_Unmarshal(b []byte) error { func (m *ReqRescanUtxos) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqRescanUtxos.Unmarshal(m, b) return xxx_messageInfo_ReqRescanUtxos.Unmarshal(m, b)
...@@ -3214,7 +3208,7 @@ func (m *RepRescanResult) Reset() { *m = RepRescanResult{} } ...@@ -3214,7 +3208,7 @@ func (m *RepRescanResult) Reset() { *m = RepRescanResult{} }
func (m *RepRescanResult) String() string { return proto.CompactTextString(m) } func (m *RepRescanResult) String() string { return proto.CompactTextString(m) }
func (*RepRescanResult) ProtoMessage() {} func (*RepRescanResult) ProtoMessage() {}
func (*RepRescanResult) Descriptor() ([]byte, []int) { func (*RepRescanResult) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{55} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{54}
} }
func (m *RepRescanResult) XXX_Unmarshal(b []byte) error { func (m *RepRescanResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RepRescanResult.Unmarshal(m, b) return xxx_messageInfo_RepRescanResult.Unmarshal(m, b)
...@@ -3260,7 +3254,7 @@ func (m *RepRescanUtxos) Reset() { *m = RepRescanUtxos{} } ...@@ -3260,7 +3254,7 @@ func (m *RepRescanUtxos) Reset() { *m = RepRescanUtxos{} }
func (m *RepRescanUtxos) String() string { return proto.CompactTextString(m) } func (m *RepRescanUtxos) String() string { return proto.CompactTextString(m) }
func (*RepRescanUtxos) ProtoMessage() {} func (*RepRescanUtxos) ProtoMessage() {}
func (*RepRescanUtxos) Descriptor() ([]byte, []int) { func (*RepRescanUtxos) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{56} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{55}
} }
func (m *RepRescanUtxos) XXX_Unmarshal(b []byte) error { func (m *RepRescanUtxos) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RepRescanUtxos.Unmarshal(m, b) return xxx_messageInfo_RepRescanUtxos.Unmarshal(m, b)
...@@ -3305,7 +3299,7 @@ func (m *ReqEnablePrivacy) Reset() { *m = ReqEnablePrivacy{} } ...@@ -3305,7 +3299,7 @@ func (m *ReqEnablePrivacy) Reset() { *m = ReqEnablePrivacy{} }
func (m *ReqEnablePrivacy) String() string { return proto.CompactTextString(m) } func (m *ReqEnablePrivacy) String() string { return proto.CompactTextString(m) }
func (*ReqEnablePrivacy) ProtoMessage() {} func (*ReqEnablePrivacy) ProtoMessage() {}
func (*ReqEnablePrivacy) Descriptor() ([]byte, []int) { func (*ReqEnablePrivacy) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{57} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{56}
} }
func (m *ReqEnablePrivacy) XXX_Unmarshal(b []byte) error { func (m *ReqEnablePrivacy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqEnablePrivacy.Unmarshal(m, b) return xxx_messageInfo_ReqEnablePrivacy.Unmarshal(m, b)
...@@ -3345,7 +3339,7 @@ func (m *PriAddrResult) Reset() { *m = PriAddrResult{} } ...@@ -3345,7 +3339,7 @@ func (m *PriAddrResult) Reset() { *m = PriAddrResult{} }
func (m *PriAddrResult) String() string { return proto.CompactTextString(m) } func (m *PriAddrResult) String() string { return proto.CompactTextString(m) }
func (*PriAddrResult) ProtoMessage() {} func (*PriAddrResult) ProtoMessage() {}
func (*PriAddrResult) Descriptor() ([]byte, []int) { func (*PriAddrResult) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{58} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{57}
} }
func (m *PriAddrResult) XXX_Unmarshal(b []byte) error { func (m *PriAddrResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PriAddrResult.Unmarshal(m, b) return xxx_messageInfo_PriAddrResult.Unmarshal(m, b)
...@@ -3397,7 +3391,7 @@ func (m *RepEnablePrivacy) Reset() { *m = RepEnablePrivacy{} } ...@@ -3397,7 +3391,7 @@ func (m *RepEnablePrivacy) Reset() { *m = RepEnablePrivacy{} }
func (m *RepEnablePrivacy) String() string { return proto.CompactTextString(m) } func (m *RepEnablePrivacy) String() string { return proto.CompactTextString(m) }
func (*RepEnablePrivacy) ProtoMessage() {} func (*RepEnablePrivacy) ProtoMessage() {}
func (*RepEnablePrivacy) Descriptor() ([]byte, []int) { func (*RepEnablePrivacy) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{59} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{58}
} }
func (m *RepEnablePrivacy) XXX_Unmarshal(b []byte) error { func (m *RepEnablePrivacy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RepEnablePrivacy.Unmarshal(m, b) return xxx_messageInfo_RepEnablePrivacy.Unmarshal(m, b)
...@@ -3438,7 +3432,7 @@ func (m *PrivacySignatureParam) Reset() { *m = PrivacySignatureParam{} } ...@@ -3438,7 +3432,7 @@ func (m *PrivacySignatureParam) Reset() { *m = PrivacySignatureParam{} }
func (m *PrivacySignatureParam) String() string { return proto.CompactTextString(m) } func (m *PrivacySignatureParam) String() string { return proto.CompactTextString(m) }
func (*PrivacySignatureParam) ProtoMessage() {} func (*PrivacySignatureParam) ProtoMessage() {}
func (*PrivacySignatureParam) Descriptor() ([]byte, []int) { func (*PrivacySignatureParam) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{60} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{59}
} }
func (m *PrivacySignatureParam) XXX_Unmarshal(b []byte) error { func (m *PrivacySignatureParam) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrivacySignatureParam.Unmarshal(m, b) return xxx_messageInfo_PrivacySignatureParam.Unmarshal(m, b)
...@@ -3493,7 +3487,7 @@ func (m *WalletAccountPrivacy) Reset() { *m = WalletAccountPrivacy{} } ...@@ -3493,7 +3487,7 @@ func (m *WalletAccountPrivacy) Reset() { *m = WalletAccountPrivacy{} }
func (m *WalletAccountPrivacy) String() string { return proto.CompactTextString(m) } func (m *WalletAccountPrivacy) String() string { return proto.CompactTextString(m) }
func (*WalletAccountPrivacy) ProtoMessage() {} func (*WalletAccountPrivacy) ProtoMessage() {}
func (*WalletAccountPrivacy) Descriptor() ([]byte, []int) { func (*WalletAccountPrivacy) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{61} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{60}
} }
func (m *WalletAccountPrivacy) XXX_Unmarshal(b []byte) error { func (m *WalletAccountPrivacy) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WalletAccountPrivacy.Unmarshal(m, b) return xxx_messageInfo_WalletAccountPrivacy.Unmarshal(m, b)
...@@ -3566,7 +3560,7 @@ func (m *ReqCreatePrivacyTx) Reset() { *m = ReqCreatePrivacyTx{} } ...@@ -3566,7 +3560,7 @@ func (m *ReqCreatePrivacyTx) Reset() { *m = ReqCreatePrivacyTx{} }
func (m *ReqCreatePrivacyTx) String() string { return proto.CompactTextString(m) } func (m *ReqCreatePrivacyTx) String() string { return proto.CompactTextString(m) }
func (*ReqCreatePrivacyTx) ProtoMessage() {} func (*ReqCreatePrivacyTx) ProtoMessage() {}
func (*ReqCreatePrivacyTx) Descriptor() ([]byte, []int) { func (*ReqCreatePrivacyTx) Descriptor() ([]byte, []int) {
return fileDescriptor_privacy_84669f04cb5de16e, []int{62} return fileDescriptor_privacy_6ecd2799f7ad9b76, []int{61}
} }
func (m *ReqCreatePrivacyTx) XXX_Unmarshal(b []byte) error { func (m *ReqCreatePrivacyTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReqCreatePrivacyTx.Unmarshal(m, b) return xxx_messageInfo_ReqCreatePrivacyTx.Unmarshal(m, b)
...@@ -3709,7 +3703,6 @@ func init() { ...@@ -3709,7 +3703,6 @@ func init() {
proto.RegisterType((*ReqCacheTxList)(nil), "types.ReqCacheTxList") proto.RegisterType((*ReqCacheTxList)(nil), "types.ReqCacheTxList")
proto.RegisterType((*ReplyCacheTxList)(nil), "types.ReplyCacheTxList") proto.RegisterType((*ReplyCacheTxList)(nil), "types.ReplyCacheTxList")
proto.RegisterType((*ReqPrivacyAccount)(nil), "types.ReqPrivacyAccount") proto.RegisterType((*ReqPrivacyAccount)(nil), "types.ReqPrivacyAccount")
proto.RegisterType((*ReqPPrivacyAccount)(nil), "types.ReqPPrivacyAccount")
proto.RegisterType((*ReplyPrivacyAccount)(nil), "types.ReplyPrivacyAccount") proto.RegisterType((*ReplyPrivacyAccount)(nil), "types.ReplyPrivacyAccount")
proto.RegisterType((*ReqCreateCacheTxKey)(nil), "types.ReqCreateCacheTxKey") proto.RegisterType((*ReqCreateCacheTxKey)(nil), "types.ReqCreateCacheTxKey")
proto.RegisterType((*ReqPrivacyTransactionList)(nil), "types.ReqPrivacyTransactionList") proto.RegisterType((*ReqPrivacyTransactionList)(nil), "types.ReqPrivacyTransactionList")
...@@ -3905,153 +3898,154 @@ var _Privacy_serviceDesc = grpc.ServiceDesc{ ...@@ -3905,153 +3898,154 @@ var _Privacy_serviceDesc = grpc.ServiceDesc{
Metadata: "privacy.proto", Metadata: "privacy.proto",
} }
func init() { proto.RegisterFile("privacy.proto", fileDescriptor_privacy_84669f04cb5de16e) } func init() { proto.RegisterFile("privacy.proto", fileDescriptor_privacy_6ecd2799f7ad9b76) }
var fileDescriptor_privacy_84669f04cb5de16e = []byte{ var fileDescriptor_privacy_6ecd2799f7ad9b76 = []byte{
// 2318 bytes of a gzipped FileDescriptorProto // 2329 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x39, 0x4d, 0x6f, 0x1c, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x39, 0xcb, 0x6f, 0x1c, 0x49,
0xd9, 0xee, 0x19, 0x8f, 0xed, 0x7e, 0x3c, 0xb6, 0x27, 0x15, 0xdb, 0xeb, 0x4c, 0xa2, 0xc8, 0x6f, 0xf9, 0xee, 0x79, 0xd8, 0xee, 0xcf, 0x63, 0x7b, 0x52, 0xb1, 0xbd, 0xce, 0x24, 0x8a, 0xfc, 0xab,
0xed, 0x2a, 0x6f, 0x58, 0x90, 0xd1, 0x06, 0x4b, 0xfb, 0x41, 0xd0, 0xae, 0xc7, 0x71, 0x12, 0xcb, 0x5d, 0xe5, 0x17, 0x16, 0x64, 0xb4, 0xc1, 0xd2, 0x3e, 0x08, 0x5a, 0x3c, 0x8e, 0x93, 0x58, 0xde,
0x9b, 0xd8, 0x94, 0xbd, 0xe2, 0x43, 0x20, 0x51, 0xd3, 0x53, 0x1e, 0xb7, 0xdc, 0xd3, 0xdd, 0xee, 0xc4, 0xa6, 0xec, 0x15, 0x0f, 0x01, 0x52, 0x4d, 0x4f, 0xd9, 0x6e, 0xb9, 0xa7, 0xbb, 0xdd, 0xdd,
0xee, 0xb1, 0x67, 0x4e, 0xcb, 0x69, 0xc5, 0x81, 0x03, 0x87, 0x15, 0x1c, 0x40, 0xdc, 0xe0, 0xcc, 0x63, 0xcf, 0x1c, 0xd0, 0x72, 0x5a, 0x71, 0xe0, 0xc0, 0x61, 0x05, 0x07, 0x24, 0x6e, 0xf0, 0x47,
0x9f, 0x80, 0x13, 0x27, 0xfe, 0x00, 0xe2, 0x0f, 0xf0, 0x1b, 0x50, 0x7d, 0x74, 0x77, 0x55, 0x4d, 0x70, 0x87, 0x13, 0xe2, 0xc0, 0x7f, 0xc0, 0x3f, 0xc0, 0x7f, 0x80, 0x84, 0xea, 0xd1, 0xdd, 0x55,
0x8f, 0x9d, 0x25, 0xe6, 0x32, 0xea, 0x7a, 0xea, 0xa9, 0xa7, 0x9e, 0xef, 0x8f, 0x1a, 0x58, 0x8a, 0x35, 0x3d, 0x76, 0x96, 0x98, 0xcb, 0xa8, 0xeb, 0xab, 0xaf, 0xbe, 0xfa, 0xde, 0x8f, 0x1a, 0x58,
0x13, 0xff, 0x92, 0x7a, 0xe3, 0xad, 0x38, 0x89, 0xb2, 0x08, 0x35, 0xb2, 0x71, 0xcc, 0xd2, 0x76, 0x8c, 0x13, 0xff, 0x92, 0x7a, 0xe3, 0xcd, 0x38, 0x89, 0xb2, 0x08, 0x35, 0xb3, 0x71, 0xcc, 0xd2,
0xd3, 0x8b, 0x06, 0x83, 0x28, 0x94, 0xc0, 0xf6, 0x9d, 0x2c, 0xa1, 0x61, 0x4a, 0xbd, 0xcc, 0xcf, 0x4e, 0xcb, 0x8b, 0x06, 0x83, 0x28, 0x94, 0xc0, 0xce, 0x9d, 0x2c, 0xa1, 0x61, 0x4a, 0xbd, 0xcc,
0x41, 0xf8, 0xdf, 0x0e, 0x2c, 0x1d, 0xc9, 0x93, 0x3b, 0x02, 0x8e, 0x3e, 0x85, 0xe5, 0x78, 0xd8, 0xcf, 0x41, 0xf8, 0x5f, 0x0e, 0x2c, 0x1e, 0xca, 0x93, 0xdb, 0x02, 0x8e, 0x3e, 0x85, 0xa5, 0x78,
0x0d, 0x7c, 0xef, 0x89, 0xa2, 0xb8, 0xe1, 0x6c, 0x3a, 0x8f, 0x17, 0x9f, 0xac, 0x6d, 0x09, 0x92, 0xd8, 0x0b, 0x7c, 0xef, 0x89, 0xa2, 0xb8, 0xee, 0x6c, 0x38, 0x8f, 0x17, 0x9e, 0xac, 0x6e, 0x0a,
0x5b, 0x47, 0x72, 0x53, 0x1d, 0x7a, 0x39, 0x43, 0x2c, 0x74, 0xd4, 0x81, 0x15, 0xf5, 0x59, 0x50, 0x92, 0x9b, 0x87, 0x72, 0x53, 0x1d, 0x7a, 0x39, 0x43, 0x2c, 0x74, 0xd4, 0x85, 0x65, 0xf5, 0x59,
0xa8, 0x09, 0x0a, 0xeb, 0x39, 0x05, 0xb5, 0x5b, 0x92, 0xb0, 0x0f, 0x08, 0x26, 0x72, 0x90, 0xa0, 0x50, 0xa8, 0x09, 0x0a, 0x6b, 0x39, 0x05, 0xb5, 0x5b, 0x92, 0xb0, 0x0f, 0x08, 0x26, 0x72, 0x90,
0xbe, 0x51, 0x37, 0x99, 0xc8, 0x49, 0x88, 0x4d, 0xc1, 0x84, 0x81, 0x8e, 0x96, 0xa1, 0x96, 0x8d, 0xa0, 0xbe, 0x5e, 0x37, 0x99, 0xc8, 0x49, 0x88, 0x4d, 0xc1, 0x84, 0x81, 0x8e, 0x96, 0xa0, 0x96,
0x37, 0x66, 0x37, 0x9d, 0xc7, 0x0d, 0x52, 0xcb, 0xc6, 0x9d, 0x79, 0x68, 0x5c, 0xd2, 0x60, 0xc8, 0x8d, 0xd7, 0x1b, 0x1b, 0xce, 0xe3, 0x26, 0xa9, 0x65, 0xe3, 0xee, 0x1c, 0x34, 0x2f, 0x69, 0x30,
0xf0, 0x9f, 0x1d, 0x58, 0x36, 0x45, 0x40, 0x0f, 0xc0, 0xcd, 0xa2, 0x73, 0x16, 0x86, 0x74, 0xc0, 0x64, 0xf8, 0x4f, 0x0e, 0x2c, 0x99, 0x22, 0xa0, 0x07, 0xe0, 0x66, 0xd1, 0x39, 0x0b, 0x43, 0x3a,
0x84, 0xb0, 0x2e, 0x29, 0x01, 0x68, 0x1d, 0xe6, 0xe8, 0x20, 0x1a, 0x86, 0x99, 0x90, 0xa2, 0x4e, 0x60, 0x42, 0x58, 0x97, 0x94, 0x00, 0xb4, 0x06, 0xb3, 0x74, 0x10, 0x0d, 0xc3, 0x4c, 0x48, 0x51,
0xd4, 0x0a, 0x21, 0x98, 0x0d, 0xa3, 0x8c, 0x6d, 0x34, 0xc4, 0x01, 0xf1, 0x8d, 0xbe, 0x03, 0x73, 0x27, 0x6a, 0x85, 0x10, 0x34, 0xc2, 0x28, 0x63, 0xeb, 0x4d, 0x71, 0x40, 0x7c, 0xa3, 0x6f, 0xc1,
0xd1, 0x30, 0x8b, 0x87, 0xd9, 0xc6, 0xbc, 0x60, 0x77, 0xd5, 0x64, 0xf7, 0x50, 0xec, 0x11, 0x85, 0x6c, 0x34, 0xcc, 0xe2, 0x61, 0xb6, 0x3e, 0x27, 0xd8, 0x5d, 0x31, 0xd9, 0x3d, 0x10, 0x7b, 0x44,
0xc3, 0xef, 0xa5, 0x69, 0xca, 0xb2, 0xbd, 0x11, 0xf3, 0x36, 0x16, 0xe4, 0xbd, 0x05, 0x00, 0xff, 0xe1, 0xf0, 0x7b, 0x69, 0x9a, 0xb2, 0x6c, 0x77, 0xc4, 0xbc, 0xf5, 0x79, 0x79, 0x6f, 0x01, 0xc0,
0xc3, 0x81, 0x15, 0x4b, 0x53, 0xb7, 0xc8, 0xe9, 0xb7, 0xa0, 0xe1, 0x87, 0x9c, 0xd1, 0x39, 0xc1, 0xff, 0x70, 0x60, 0xd9, 0xd2, 0xd4, 0x2d, 0x72, 0xfa, 0x0d, 0x68, 0xfa, 0x21, 0x67, 0x74, 0x56,
0xe8, 0x5d, 0x93, 0xd1, 0x7d, 0xbe, 0x45, 0x24, 0xc6, 0xad, 0x0a, 0xf5, 0x2f, 0xae, 0x7d, 0xc3, 0x30, 0x7a, 0xd7, 0x64, 0x74, 0x8f, 0x6f, 0x11, 0x89, 0x71, 0xab, 0x42, 0xfd, 0x93, 0x6b, 0xdf,
0x76, 0x6f, 0x29, 0x53, 0x5d, 0x93, 0x89, 0xdb, 0x3c, 0x12, 0x02, 0xb9, 0xa4, 0x96, 0x45, 0xa5, 0xb0, 0xdd, 0x5b, 0xca, 0x54, 0xd7, 0x64, 0xe2, 0x36, 0x8f, 0x84, 0x40, 0x2e, 0xa9, 0x65, 0x51,
0x8c, 0xb3, 0xdf, 0x40, 0xc6, 0xc6, 0x5b, 0xcb, 0xb8, 0x07, 0x2b, 0x5f, 0x9c, 0xfc, 0xf8, 0xf0, 0x29, 0x63, 0xe3, 0x6b, 0xc8, 0xd8, 0x7c, 0x6b, 0x19, 0x77, 0x61, 0xf9, 0xf3, 0xe3, 0x1f, 0x1d,
0x45, 0x10, 0x75, 0x69, 0xb0, 0x1f, 0xf6, 0xd8, 0x88, 0x4b, 0x91, 0x8d, 0xce, 0x68, 0x7a, 0x26, 0xbc, 0x08, 0xa2, 0x1e, 0x0d, 0xf6, 0xc2, 0x3e, 0x1b, 0x71, 0x29, 0xb2, 0xd1, 0x19, 0x4d, 0xcf,
0xf8, 0x6d, 0x12, 0xb5, 0x42, 0x6d, 0x58, 0x88, 0x86, 0x99, 0xcf, 0x71, 0x94, 0xaf, 0x16, 0x6b, 0x04, 0xbf, 0x2d, 0xa2, 0x56, 0xa8, 0x03, 0xf3, 0xd1, 0x30, 0xf3, 0x39, 0x8e, 0xf2, 0xd5, 0x62,
0xfc, 0x4b, 0x07, 0x16, 0x0e, 0x98, 0x64, 0x53, 0x53, 0x83, 0x63, 0xa8, 0xe1, 0x33, 0x58, 0x19, 0x8d, 0x7f, 0xe9, 0xc0, 0xfc, 0x3e, 0x93, 0x6c, 0x6a, 0x6a, 0x70, 0x0c, 0x35, 0x7c, 0x1f, 0x96,
0x66, 0xa3, 0x48, 0xbb, 0x6b, 0xa3, 0xb6, 0x59, 0xd7, 0x62, 0xcd, 0xe2, 0x84, 0xd8, 0xe8, 0x9c, 0x87, 0xd9, 0x28, 0xd2, 0xee, 0x5a, 0xaf, 0x6d, 0xd4, 0xb5, 0x58, 0xb3, 0x38, 0x21, 0x36, 0x3a,
0x85, 0x73, 0x36, 0xde, 0x1f, 0xd0, 0x3e, 0x53, 0xcc, 0x15, 0x6b, 0xfc, 0x7d, 0x68, 0xea, 0xca, 0x67, 0xe1, 0x9c, 0x8d, 0xf7, 0x06, 0xf4, 0x94, 0x29, 0xe6, 0x8a, 0x35, 0xfe, 0x2e, 0xb4, 0x74,
0x42, 0xdf, 0x16, 0xb8, 0x52, 0xa7, 0x8e, 0xb8, 0x66, 0x45, 0x5d, 0x93, 0x33, 0x4a, 0x0a, 0x04, 0x65, 0xa1, 0x6f, 0x0a, 0x5c, 0xa9, 0x53, 0x47, 0x5c, 0xb3, 0xac, 0xae, 0xc9, 0x19, 0x25, 0x05,
0xbc, 0x0f, 0xee, 0x39, 0x53, 0x9a, 0x9b, 0xca, 0xff, 0x7b, 0xb0, 0x14, 0x85, 0x2c, 0xf3, 0x07, 0x02, 0xde, 0x03, 0xf7, 0x9c, 0x29, 0xcd, 0x4d, 0xe5, 0xff, 0x3d, 0x58, 0x8c, 0x42, 0x96, 0xf9,
0x2c, 0x1e, 0x76, 0xcf, 0x99, 0xcc, 0x14, 0x4d, 0x62, 0x02, 0xf1, 0xcf, 0x8b, 0x1c, 0x75, 0x58, 0x03, 0x16, 0x0f, 0x7b, 0xe7, 0x4c, 0x66, 0x8a, 0x16, 0x31, 0x81, 0xf8, 0x67, 0x45, 0x8e, 0x3a,
0x18, 0x80, 0xc4, 0xc3, 0xee, 0x01, 0x1b, 0x67, 0x23, 0x41, 0xb1, 0x49, 0x4a, 0x00, 0xda, 0x12, 0x28, 0x0c, 0x40, 0xe2, 0x61, 0x6f, 0x9f, 0x8d, 0xb3, 0x91, 0xa0, 0xd8, 0x22, 0x25, 0x00, 0x6d,
0x37, 0x2b, 0x7b, 0x4a, 0x75, 0xb4, 0x14, 0x9f, 0x05, 0x47, 0xa4, 0x44, 0xc1, 0x31, 0xac, 0xbe, 0x8a, 0x9b, 0x95, 0x3d, 0xa5, 0x3a, 0xda, 0x8a, 0xcf, 0x82, 0x23, 0x52, 0xa2, 0xe0, 0x18, 0x56,
0x48, 0xa2, 0x61, 0x5c, 0x61, 0xb5, 0xff, 0x8d, 0xd2, 0xf1, 0xef, 0x1d, 0x58, 0xfa, 0x3c, 0xf2, 0x5e, 0x24, 0xd1, 0x30, 0xae, 0xb0, 0xda, 0xff, 0x46, 0xe9, 0xf8, 0xf7, 0x0e, 0x2c, 0x7e, 0x16,
0x68, 0xc0, 0x31, 0xf7, 0x33, 0x36, 0xe0, 0x77, 0x9d, 0x31, 0xbf, 0x7f, 0x56, 0xdc, 0x25, 0x57, 0x79, 0x34, 0xe0, 0x98, 0x7b, 0x19, 0x1b, 0xf0, 0xbb, 0xce, 0x98, 0x7f, 0x7a, 0x56, 0xdc, 0x25,
0x68, 0x03, 0xe6, 0xb3, 0x91, 0xaf, 0xee, 0xe0, 0x0e, 0x92, 0x2f, 0x0d, 0xdf, 0xa9, 0x9b, 0xbe, 0x57, 0x68, 0x1d, 0xe6, 0xb2, 0x91, 0xaf, 0xee, 0xe0, 0x0e, 0x92, 0x2f, 0x0d, 0xdf, 0xa9, 0x9b,
0xa3, 0xf9, 0xdb, 0xac, 0xe1, 0x6f, 0x13, 0xea, 0x6e, 0x54, 0xa9, 0xfb, 0x4b, 0x58, 0x26, 0xec, 0xbe, 0xa3, 0xf9, 0x5b, 0xc3, 0xf0, 0xb7, 0x09, 0x75, 0x37, 0xab, 0xd4, 0xfd, 0x05, 0x2c, 0x11,
0x82, 0xb3, 0x76, 0x24, 0x54, 0x9a, 0x16, 0x31, 0xfa, 0xda, 0x8e, 0x51, 0x0e, 0x40, 0x87, 0xb0, 0x76, 0xc1, 0x59, 0x3b, 0x14, 0x2a, 0x4d, 0x8b, 0x18, 0x7d, 0x6d, 0xc7, 0x28, 0x07, 0xa0, 0x03,
0xda, 0xaf, 0xd0, 0x9f, 0x52, 0xca, 0x7d, 0xa5, 0x94, 0x2a, 0x15, 0x93, 0xca, 0x83, 0xf8, 0x5d, 0x58, 0x39, 0xad, 0xd0, 0x9f, 0x52, 0xca, 0x7d, 0xa5, 0x94, 0x2a, 0x15, 0x93, 0xca, 0x83, 0xf8,
0x58, 0x92, 0xc9, 0xe1, 0x80, 0x8d, 0x9f, 0xd1, 0x8c, 0xf2, 0x68, 0xef, 0xd1, 0x8c, 0x0a, 0xa7, 0x5d, 0x58, 0x94, 0xc9, 0x61, 0x9f, 0x8d, 0x9f, 0xd1, 0x8c, 0xf2, 0x68, 0xef, 0xd3, 0x8c, 0x0a,
0x6b, 0x12, 0xf1, 0x8d, 0x77, 0x60, 0xa5, 0x20, 0x29, 0xf9, 0x9c, 0x6a, 0xb0, 0x75, 0x98, 0x2b, 0xa7, 0x6b, 0x11, 0xf1, 0x8d, 0xb7, 0x61, 0xb9, 0x20, 0x29, 0xf9, 0x9c, 0x6a, 0xb0, 0x35, 0x98,
0xdc, 0x8b, 0x13, 0x50, 0x2b, 0x7c, 0xc2, 0x05, 0x4d, 0x75, 0x41, 0x3b, 0xd0, 0xea, 0x9b, 0x44, 0x2d, 0xdc, 0x8b, 0x13, 0x50, 0x2b, 0x7c, 0xcc, 0x05, 0x4d, 0x75, 0x41, 0xbb, 0xd0, 0x3e, 0x35,
0x53, 0xe5, 0xe9, 0xeb, 0xb6, 0x18, 0x72, 0x9b, 0x4c, 0xe0, 0x63, 0x1f, 0x56, 0x08, 0xbb, 0x50, 0x89, 0xa6, 0xca, 0xd3, 0xd7, 0x6c, 0x31, 0xe4, 0x36, 0x99, 0xc0, 0xc7, 0x3e, 0x2c, 0x13, 0x76,
0x0e, 0x7b, 0xc2, 0xb5, 0x64, 0x26, 0x0c, 0xc7, 0x4a, 0x18, 0x68, 0x13, 0x16, 0xc5, 0xe2, 0x78, 0xa1, 0x1c, 0xf6, 0x98, 0x6b, 0xc9, 0x4c, 0x18, 0x8e, 0x95, 0x30, 0xd0, 0x06, 0x2c, 0x88, 0xc5,
0x3c, 0xe8, 0x46, 0x81, 0xb0, 0xb3, 0x4b, 0x74, 0x90, 0x26, 0x58, 0x5d, 0x17, 0x0c, 0x3f, 0x85, 0xd1, 0x78, 0xd0, 0x8b, 0x02, 0x61, 0x67, 0x97, 0xe8, 0x20, 0x4d, 0xb0, 0xba, 0x2e, 0x18, 0x7e,
0xe6, 0x8e, 0xf8, 0x7a, 0xc6, 0x32, 0xea, 0x07, 0x53, 0x15, 0xb0, 0x0a, 0x0d, 0x4f, 0x4b, 0xa2, 0x0a, 0xad, 0x6d, 0xf1, 0xf5, 0x8c, 0x65, 0xd4, 0x0f, 0xa6, 0x2a, 0x60, 0x05, 0x9a, 0x9e, 0x96,
0x72, 0x81, 0x5f, 0xc3, 0x5d, 0xc2, 0xe2, 0x60, 0x9c, 0xd7, 0x7f, 0x81, 0x9b, 0xa2, 0x0f, 0xa1, 0x44, 0xe5, 0x02, 0xbf, 0x86, 0xbb, 0x84, 0xc5, 0xc1, 0x38, 0xaf, 0xff, 0x02, 0x37, 0x45, 0x1f,
0x49, 0x35, 0xa2, 0x4a, 0xfe, 0x3c, 0x7b, 0xea, 0xf7, 0x11, 0x03, 0x11, 0x13, 0x40, 0x09, 0xa7, 0x42, 0x8b, 0x6a, 0x44, 0x95, 0xfc, 0x79, 0xf6, 0xd4, 0xef, 0x23, 0x06, 0x22, 0x26, 0x80, 0x12,
0xc7, 0x95, 0x91, 0x1e, 0x9e, 0x4a, 0x4c, 0xf4, 0x14, 0x96, 0x03, 0xdd, 0xd5, 0x73, 0x85, 0xe6, 0x4e, 0x8f, 0x2b, 0x23, 0x3d, 0x38, 0x91, 0x98, 0xe8, 0x29, 0x2c, 0x05, 0xba, 0xab, 0xe7, 0x0a,
0x29, 0xd6, 0x88, 0x03, 0x62, 0xe1, 0xe2, 0xaf, 0x1c, 0x58, 0x25, 0xcc, 0x63, 0x7e, 0x9c, 0x4d, 0xcd, 0x53, 0xac, 0x11, 0x07, 0xc4, 0xc2, 0xc5, 0x5f, 0x3a, 0xb0, 0x42, 0x98, 0xc7, 0xfc, 0x38,
0xa4, 0x80, 0xb7, 0x52, 0xa9, 0x91, 0x24, 0xea, 0x37, 0x27, 0x89, 0xdf, 0x38, 0xb0, 0xa4, 0x34, 0x9b, 0x48, 0x01, 0x6f, 0xa5, 0x52, 0x23, 0x49, 0xd4, 0x6f, 0x4e, 0x12, 0xbf, 0x71, 0x60, 0x51,
0x74, 0x78, 0xca, 0xf9, 0x43, 0x3b, 0xe0, 0x4a, 0xf1, 0x5f, 0xd1, 0x58, 0xc9, 0xf4, 0xae, 0xa1, 0x69, 0xe8, 0xe0, 0x84, 0xf3, 0x87, 0xb6, 0xc1, 0x95, 0xe2, 0xbf, 0xa2, 0xb1, 0x92, 0xe9, 0x5d,
0x24, 0x85, 0xa8, 0x56, 0xaf, 0x68, 0xbc, 0x17, 0x66, 0xc9, 0x98, 0x94, 0xa7, 0xda, 0x4f, 0x61, 0x43, 0x49, 0x0a, 0x51, 0xad, 0x5e, 0xd1, 0x78, 0x37, 0xcc, 0x92, 0x31, 0x29, 0x4f, 0x75, 0x9e,
0xd9, 0xdc, 0x44, 0x2d, 0xa8, 0x73, 0x3f, 0x95, 0xe6, 0xe3, 0x9f, 0xdc, 0x76, 0xa2, 0x73, 0xc9, 0xc2, 0x92, 0xb9, 0x89, 0xda, 0x50, 0xe7, 0x7e, 0x2a, 0xcd, 0xc7, 0x3f, 0xb9, 0xed, 0x44, 0xe7,
0x6d, 0x27, 0x16, 0x9f, 0xd4, 0x3e, 0x72, 0xf0, 0x6f, 0x1d, 0x68, 0x9d, 0xe4, 0x51, 0x98, 0x73, 0x92, 0xdb, 0x4e, 0x2c, 0x3e, 0xa9, 0x7d, 0xe4, 0xe0, 0xdf, 0x3a, 0xd0, 0x3e, 0xce, 0xa3, 0x30,
0xf5, 0x4c, 0x85, 0x6a, 0x5a, 0x72, 0xf5, 0x48, 0x71, 0x65, 0xe3, 0x4a, 0x40, 0x5a, 0x32, 0x56, 0xe7, 0xea, 0x99, 0x0a, 0xd5, 0xb4, 0xe4, 0xea, 0x91, 0xe2, 0xca, 0xc6, 0x95, 0x80, 0xb4, 0x64,
0x1c, 0xe4, 0x8c, 0x99, 0x9b, 0x3a, 0x63, 0x6e, 0x05, 0x63, 0xae, 0xce, 0xd8, 0x01, 0xac, 0x59, 0xac, 0x38, 0xc8, 0x19, 0x33, 0x37, 0x75, 0xc6, 0xdc, 0x0a, 0xc6, 0x5c, 0x9d, 0xb1, 0x7d, 0x58,
0x21, 0xbd, 0x7d, 0x94, 0xf8, 0x32, 0x10, 0x55, 0x5e, 0x92, 0x74, 0xaa, 0xea, 0x60, 0xcd, 0xaa, 0xb5, 0x42, 0x7a, 0xeb, 0x30, 0xf1, 0x65, 0x20, 0xaa, 0xbc, 0x24, 0xe9, 0x54, 0xd5, 0xc1, 0x9a,
0x83, 0xbf, 0x76, 0x60, 0x39, 0x2f, 0x2f, 0x25, 0x99, 0x4a, 0x37, 0x7f, 0x3e, 0x2d, 0x31, 0x3f, 0x55, 0x07, 0x7f, 0xed, 0xc0, 0x52, 0x5e, 0x5e, 0x4a, 0x32, 0x95, 0x6e, 0xfe, 0x7c, 0x5a, 0x62,
0xa8, 0x4e, 0xcc, 0x92, 0xdc, 0xcd, 0x35, 0xd1, 0xd5, 0x6a, 0xe2, 0x21, 0xac, 0x14, 0xfe, 0x71, 0x7e, 0x50, 0x9d, 0x98, 0x25, 0xb9, 0x9b, 0x6b, 0xa2, 0xab, 0xd5, 0xc4, 0x03, 0x58, 0x2e, 0xfc,
0x03, 0x3b, 0x95, 0xc5, 0xcd, 0xb5, 0xb3, 0xed, 0x0b, 0x40, 0x7a, 0x91, 0x55, 0x34, 0x3f, 0x98, 0xe3, 0x06, 0x76, 0x2a, 0x8b, 0x9b, 0x6b, 0x67, 0xdb, 0x17, 0x80, 0xf4, 0x22, 0xab, 0x68, 0x7e,
0x28, 0xb5, 0x6b, 0x56, 0xa9, 0x55, 0xcc, 0x97, 0x05, 0xd7, 0x87, 0xbb, 0x46, 0x88, 0x28, 0x4a, 0x30, 0x51, 0x6a, 0x57, 0xad, 0x52, 0xab, 0x98, 0x2f, 0x0b, 0xae, 0x0f, 0x77, 0x8d, 0x10, 0x51,
0x13, 0xb5, 0xd2, 0xd5, 0x6b, 0xe5, 0xf6, 0x64, 0xad, 0x5c, 0xb7, 0xc3, 0x40, 0xdd, 0xa4, 0x05, 0x94, 0x26, 0x6a, 0xa5, 0xab, 0xd7, 0xca, 0xad, 0xc9, 0x5a, 0xb9, 0x66, 0x87, 0x81, 0xba, 0x49,
0xc3, 0xd7, 0x0e, 0xac, 0x9a, 0x4d, 0x74, 0x79, 0xd9, 0x2d, 0x35, 0xa8, 0x4f, 0xac, 0xae, 0xb3, 0x0b, 0x86, 0xaf, 0x1c, 0x58, 0x31, 0x9b, 0xe8, 0xf2, 0xb2, 0x5b, 0x6a, 0x50, 0x9f, 0x58, 0x5d,
0x5d, 0xd5, 0x91, 0x29, 0xce, 0x14, 0x26, 0xfe, 0x9b, 0x03, 0x6b, 0x56, 0xcb, 0x7c, 0xeb, 0x7c, 0x67, 0xa7, 0xaa, 0x23, 0x53, 0x9c, 0x29, 0x4c, 0xfc, 0x57, 0x07, 0x56, 0xad, 0x96, 0xf9, 0xd6,
0x7d, 0xd7, 0x6c, 0x9c, 0xef, 0x55, 0x34, 0x95, 0x8a, 0x2b, 0xd5, 0x5a, 0xfe, 0x37, 0x82, 0xfc, 0xf9, 0xfa, 0xb6, 0xd9, 0x38, 0xdf, 0xab, 0x68, 0x2a, 0x15, 0x57, 0xaa, 0xb5, 0xfc, 0x6f, 0x04,
0x95, 0xeb, 0xd7, 0x68, 0x93, 0x6f, 0x45, 0x8e, 0x7a, 0x95, 0x1c, 0xb3, 0xdf, 0x58, 0x8e, 0xc6, 0xf9, 0x0b, 0xd7, 0xaf, 0xd1, 0x26, 0xdf, 0x8a, 0x1c, 0xf5, 0x2a, 0x39, 0x1a, 0x5f, 0x5b, 0x8e,
0x1b, 0xcb, 0xf1, 0x55, 0xad, 0xf0, 0x49, 0x39, 0x5d, 0x2a, 0x31, 0xf6, 0xa6, 0xcc, 0x98, 0xf7, 0xe6, 0x1b, 0xcb, 0xf1, 0x65, 0xad, 0xf0, 0x49, 0x39, 0x5d, 0x2a, 0x31, 0x76, 0xa7, 0xcc, 0x98,
0x2b, 0x67, 0x4c, 0x79, 0xa8, 0x62, 0xd2, 0x7c, 0x39, 0x6d, 0xd2, 0x7c, 0x50, 0x3d, 0x69, 0x16, 0xf7, 0x2b, 0x67, 0x4c, 0x79, 0xa8, 0x62, 0xd2, 0x7c, 0x39, 0x6d, 0xd2, 0x7c, 0x50, 0x3d, 0x69,
0x84, 0x26, 0xe6, 0xcd, 0xbd, 0x29, 0xf3, 0xe6, 0xfd, 0xca, 0x79, 0x53, 0x63, 0xe8, 0x0d, 0xa7, 0x16, 0x84, 0x26, 0xe6, 0xcd, 0xdd, 0x29, 0xf3, 0xe6, 0xfd, 0xca, 0x79, 0x53, 0x63, 0xe8, 0x0d,
0xce, 0x9f, 0x01, 0xd2, 0x4b, 0xed, 0xd1, 0xf9, 0x11, 0xf5, 0x13, 0xf4, 0x08, 0x96, 0xd3, 0xb3, 0xa7, 0xce, 0x9f, 0x02, 0xd2, 0x4b, 0xed, 0xe1, 0xf9, 0x21, 0xf5, 0x13, 0xf4, 0x08, 0x96, 0xd2,
0xe8, 0xea, 0x78, 0xe8, 0x79, 0x2c, 0x4d, 0x4f, 0x87, 0x81, 0x50, 0xc3, 0x02, 0xb1, 0xa0, 0xe8, 0xb3, 0xe8, 0xea, 0x68, 0xe8, 0x79, 0x2c, 0x4d, 0x4f, 0x86, 0x81, 0x50, 0xc3, 0x3c, 0xb1, 0xa0,
0x21, 0x80, 0x4c, 0x16, 0x31, 0xf5, 0x13, 0x41, 0xde, 0x25, 0x1a, 0x04, 0x7f, 0xc6, 0x6b, 0xa4, 0xe8, 0x21, 0x80, 0x4c, 0x16, 0x31, 0xf5, 0x13, 0x41, 0xde, 0x25, 0x1a, 0x04, 0xff, 0x9c, 0xd7,
0xe8, 0x38, 0x3a, 0x34, 0xd8, 0xde, 0xe9, 0xf5, 0x12, 0xd9, 0x76, 0x20, 0x98, 0xa5, 0xbd, 0x5e, 0x48, 0xd1, 0x71, 0x74, 0x69, 0xb0, 0xb5, 0xdd, 0xef, 0x27, 0xb2, 0xed, 0x40, 0xd0, 0xa0, 0xfd,
0xa2, 0x1c, 0x45, 0x7c, 0xf3, 0xac, 0x2d, 0x1c, 0x26, 0xcf, 0xda, 0x62, 0x81, 0x7f, 0x68, 0xb6, 0x7e, 0xa2, 0x1c, 0x45, 0x7c, 0xf3, 0xac, 0x2d, 0x1c, 0x26, 0xcf, 0xda, 0xd9, 0x64, 0x83, 0x52,
0x02, 0x1d, 0x1a, 0xd0, 0xd0, 0x63, 0xbc, 0x8c, 0xaa, 0x64, 0xa5, 0xd1, 0xd1, 0x41, 0xbc, 0x3f, 0xb7, 0x27, 0x9a, 0x1f, 0x98, 0x8d, 0x42, 0x97, 0x06, 0x34, 0xf4, 0x18, 0x2f, 0xb2, 0x2a, 0x95,
0xed, 0x4a, 0x64, 0xe5, 0x73, 0xf9, 0x12, 0xff, 0xa5, 0x56, 0x8c, 0x7a, 0xcf, 0x3a, 0xc7, 0x59, 0x69, 0xb7, 0xe8, 0x20, 0xde, 0xbd, 0xf6, 0x24, 0xb2, 0xf2, 0xc8, 0x7c, 0x89, 0xff, 0x5e, 0x2b,
0x94, 0x30, 0x2b, 0xfd, 0x97, 0x6d, 0xa9, 0xe1, 0xd5, 0xb5, 0xe9, 0x5e, 0x6d, 0x34, 0x3f, 0xaa, 0x06, 0xc1, 0x67, 0xdd, 0xa3, 0x2c, 0x4a, 0x98, 0x55, 0x1c, 0xca, 0xa6, 0xd5, 0xf0, 0xf9, 0xda,
0x68, 0xec, 0x5b, 0xc3, 0x93, 0xcc, 0xe0, 0x18, 0x9a, 0xd9, 0xa8, 0xe8, 0x21, 0x89, 0xea, 0x73, 0x74, 0x9f, 0x37, 0x5a, 0x23, 0x55, 0x52, 0xf6, 0xac, 0xd1, 0x4a, 0xe6, 0x77, 0x0c, 0xad, 0x6c,
0x0d, 0x18, 0x7a, 0x1f, 0x5a, 0x4a, 0x92, 0x02, 0x28, 0x82, 0xba, 0x49, 0x26, 0xe0, 0x5c, 0x6b, 0x54, 0x74, 0x98, 0x44, 0x75, 0xc1, 0x06, 0x0c, 0xbd, 0x0f, 0x6d, 0x25, 0x49, 0x01, 0x14, 0x21,
0xd1, 0x55, 0xc8, 0x12, 0x11, 0xc3, 0x2e, 0x91, 0x0b, 0xad, 0x69, 0x5f, 0x98, 0xd6, 0xb4, 0xbb, 0xdf, 0x22, 0x13, 0x70, 0xae, 0xd3, 0xe8, 0x2a, 0x64, 0x89, 0x88, 0x70, 0x97, 0xc8, 0x85, 0xd6,
0x66, 0xd3, 0xfe, 0x00, 0xdc, 0x6e, 0x10, 0x79, 0xe7, 0x42, 0x09, 0x20, 0x07, 0x97, 0x02, 0x80, 0xd2, 0xcf, 0x4f, 0x6b, 0xe9, 0x5d, 0xb3, 0xa5, 0x7f, 0x00, 0x6e, 0x2f, 0x88, 0xbc, 0x73, 0xa1,
0x5f, 0xc3, 0xac, 0xa8, 0xe1, 0xd3, 0x0a, 0xca, 0x16, 0xb8, 0xbc, 0x54, 0x75, 0x68, 0xea, 0x7b, 0x04, 0x90, 0x63, 0x4d, 0x01, 0x30, 0x6d, 0xb4, 0x60, 0xdb, 0xe8, 0x35, 0x34, 0x44, 0xfd, 0x9f,
0xca, 0xd3, 0x5b, 0x5a, 0x65, 0x13, 0x70, 0x52, 0xa2, 0xe0, 0x18, 0x96, 0x39, 0xfc, 0x25, 0xbd, 0x56, 0x8c, 0x36, 0xc1, 0xe5, 0x65, 0xae, 0x4b, 0x53, 0xdf, 0x53, 0x51, 0xd2, 0xd6, 0xaa, 0xa2,
0x64, 0x27, 0xa3, 0x97, 0x5c, 0xd3, 0xd7, 0x74, 0xc8, 0x99, 0xc0, 0x50, 0xea, 0x57, 0x2b, 0xf3, 0x80, 0x93, 0x12, 0x05, 0xc7, 0xb0, 0xc4, 0xe1, 0x2f, 0xe9, 0x25, 0x3b, 0x1e, 0xbd, 0xe4, 0xf7,
0xc6, 0xfa, 0xcd, 0x37, 0xbe, 0x0f, 0x0d, 0xd1, 0xfd, 0xa1, 0xff, 0x83, 0x06, 0x87, 0xe6, 0xcd, 0x5f, 0xd3, 0x5d, 0x67, 0x02, 0x43, 0x19, 0x47, 0xad, 0xcc, 0x1b, 0xeb, 0x37, 0xdf, 0xf8, 0x3e,
0xde, 0xa2, 0x76, 0x88, 0xc8, 0x1d, 0x4c, 0xe4, 0x9c, 0x5c, 0x72, 0x97, 0xa2, 0x4f, 0x65, 0x01, 0x34, 0x45, 0xe7, 0x88, 0xfe, 0x0f, 0x9a, 0x1c, 0x9a, 0x37, 0x8a, 0x0b, 0xda, 0x21, 0x22, 0x77,
0xd7, 0x40, 0x56, 0xf1, 0x33, 0x0f, 0x10, 0x1b, 0x1b, 0xff, 0xca, 0xe1, 0x81, 0x76, 0x61, 0x4f, 0x30, 0x91, 0x33, 0x76, 0xc9, 0x5d, 0x8a, 0x3e, 0x95, 0xc5, 0x5f, 0x03, 0x59, 0x85, 0xd3, 0x3c,
0x72, 0x6f, 0xdb, 0x2c, 0xb6, 0x61, 0x61, 0xe0, 0x8f, 0x76, 0x0b, 0x27, 0x6c, 0x90, 0x62, 0xad, 0x40, 0x6c, 0x6c, 0xfc, 0x2b, 0x87, 0x07, 0xe9, 0x85, 0x3d, 0x05, 0xbe, 0x6d, 0xa3, 0xd9, 0x81,
0xa9, 0x74, 0x76, 0xb3, 0xae, 0xf5, 0xe6, 0x29, 0xb8, 0x85, 0x8a, 0xaa, 0x46, 0x46, 0xc7, 0x78, 0xf9, 0x81, 0x3f, 0xda, 0x29, 0x5c, 0xb4, 0x49, 0x8a, 0xb5, 0xa6, 0xd2, 0xc6, 0x46, 0x5d, 0xeb,
0x13, 0xbb, 0x71, 0x4e, 0x2f, 0x9b, 0x89, 0xa3, 0xaa, 0x49, 0x59, 0x02, 0x31, 0x81, 0x96, 0xe8, 0xeb, 0x53, 0x70, 0x0b, 0x15, 0x55, 0x8d, 0x9b, 0x8e, 0xf1, 0x9e, 0x76, 0xe3, 0x8c, 0x5f, 0x36,
0x9d, 0x45, 0x77, 0xb3, 0x33, 0xb0, 0x18, 0x34, 0x6d, 0xfe, 0x28, 0x37, 0x91, 0x39, 0x22, 0x97, 0x22, 0x87, 0x55, 0x53, 0xb6, 0x04, 0x62, 0x02, 0x6d, 0xd1, 0x77, 0x8b, 0xce, 0x68, 0x7b, 0x60,
0x76, 0x55, 0x76, 0xfa, 0x09, 0x57, 0x69, 0x6a, 0xab, 0x74, 0x17, 0x5a, 0x7c, 0x5b, 0xbf, 0x49, 0x31, 0x68, 0xda, 0xfc, 0x51, 0x6e, 0x22, 0x73, 0xbc, 0x2e, 0xed, 0xaa, 0xec, 0xf4, 0x63, 0xae,
0xb5, 0xd1, 0xef, 0x68, 0x84, 0xf4, 0x6d, 0x32, 0x71, 0x00, 0xff, 0xc1, 0x81, 0x3b, 0xcf, 0xb9, 0xd2, 0xd4, 0x56, 0xe9, 0x0e, 0xb4, 0xf9, 0xb6, 0x7e, 0x93, 0x6a, 0xc1, 0xdf, 0xd1, 0x08, 0xe9,
0xbf, 0x1c, 0xf3, 0x9f, 0xfd, 0xf0, 0x30, 0x64, 0x27, 0xa3, 0x9b, 0x8b, 0x5c, 0xca, 0xc2, 0x1e, 0xdb, 0x64, 0xe2, 0x00, 0xfe, 0xb3, 0x03, 0x77, 0x9e, 0x73, 0x7f, 0x39, 0xe2, 0x3f, 0x7b, 0xe1,
0x4b, 0x72, 0x57, 0x95, 0x2b, 0x0e, 0x67, 0xa3, 0xd8, 0x4f, 0x58, 0x9e, 0x26, 0xe4, 0xca, 0x9a, 0x41, 0xc8, 0x8e, 0x47, 0x37, 0x17, 0xc8, 0x94, 0x85, 0x7d, 0x96, 0xe4, 0xae, 0x2a, 0x57, 0x1c,
0x85, 0xcb, 0x9e, 0xb3, 0xf0, 0xd0, 0xc6, 0x54, 0x0f, 0xfd, 0x29, 0x34, 0x09, 0xa3, 0x41, 0xf1, 0xce, 0x46, 0xb1, 0x9f, 0xb0, 0x3c, 0x89, 0xc8, 0x95, 0x35, 0x47, 0x97, 0xfd, 0x6a, 0xe1, 0xa1,
0x0a, 0x83, 0xa1, 0x99, 0x30, 0x1a, 0x88, 0x7a, 0x98, 0x37, 0xc3, 0x0d, 0x62, 0xc0, 0x78, 0x4e, 0xcd, 0x69, 0x1e, 0x6a, 0xba, 0xcd, 0xac, 0x1d, 0xad, 0x3f, 0x81, 0x16, 0x61, 0x34, 0x28, 0xde,
0xcf, 0xfb, 0xbb, 0xc4, 0xbf, 0x2c, 0x0d, 0x65, 0x41, 0xf1, 0x36, 0x40, 0xa1, 0xe9, 0xb4, 0xb4, 0x77, 0x30, 0xb4, 0x12, 0x46, 0x03, 0x51, 0x69, 0xf3, 0x36, 0xbb, 0x49, 0x0c, 0x18, 0xaf, 0x16,
0x85, 0x73, 0xbd, 0x2d, 0xfe, 0x5e, 0x83, 0xf5, 0xdd, 0x84, 0xd1, 0x8c, 0x9d, 0x94, 0x4f, 0xb9, 0x79, 0xe7, 0x98, 0xf8, 0x97, 0xa5, 0x19, 0x2d, 0x28, 0xde, 0x02, 0x28, 0xec, 0x90, 0x96, 0x96,
0xbb, 0xd4, 0x3b, 0x63, 0x7a, 0x83, 0xde, 0x94, 0x0d, 0xfa, 0x43, 0x00, 0x4f, 0xe0, 0xf2, 0x7b, 0x72, 0xae, 0xb7, 0xd4, 0xdf, 0x6a, 0xb0, 0xb6, 0x93, 0x30, 0x9a, 0xb1, 0xe3, 0xf2, 0x91, 0x78,
0x55, 0x7a, 0xd6, 0x20, 0xdc, 0xab, 0x53, 0xbf, 0x1f, 0x8a, 0x5d, 0xa9, 0xb3, 0x62, 0x2d, 0xb4, 0x87, 0x7a, 0x67, 0x4c, 0x6f, 0xfd, 0x5b, 0xb2, 0xf5, 0x7f, 0x08, 0xe0, 0x09, 0x5c, 0x7e, 0xaf,
0x9c, 0xd1, 0x6c, 0x98, 0xaa, 0xd4, 0xaa, 0x56, 0x68, 0x1b, 0x16, 0xb5, 0x47, 0x64, 0xd5, 0x0a, 0x4a, 0xed, 0x1a, 0x84, 0xfb, 0x7c, 0xea, 0x9f, 0x86, 0x62, 0x57, 0x6a, 0xb4, 0x58, 0x0b, 0x1b,
0xa0, 0x7c, 0xc0, 0x28, 0x77, 0x88, 0x8e, 0xa6, 0xd9, 0x6c, 0xce, 0xb0, 0xd9, 0x87, 0x52, 0xa1, 0x64, 0x34, 0x1b, 0xa6, 0x2a, 0x2d, 0xab, 0x15, 0xda, 0x82, 0x05, 0xed, 0x79, 0x5a, 0x35, 0x19,
0x45, 0xa7, 0x3b, 0x6f, 0x8c, 0x9a, 0xba, 0xee, 0x89, 0x81, 0x88, 0xfe, 0x3f, 0xd7, 0xd7, 0x82, 0x28, 0x1f, 0x5d, 0xca, 0x1d, 0xa2, 0xa3, 0x69, 0x16, 0x9d, 0x35, 0x2c, 0xfa, 0xa1, 0x54, 0x68,
0x38, 0x71, 0xc7, 0xd6, 0x57, 0xaa, 0x14, 0x66, 0xfa, 0x92, 0x6b, 0xf9, 0x12, 0xee, 0x88, 0x97, 0xd1, 0x43, 0xcf, 0x19, 0x43, 0xac, 0xae, 0x7b, 0x62, 0x20, 0xa2, 0xff, 0xcf, 0xf5, 0x35, 0x2f,
0x0e, 0xa1, 0xbf, 0x93, 0xd1, 0xe7, 0x7e, 0x9a, 0x55, 0x96, 0xcc, 0x6b, 0xcb, 0x13, 0xfe, 0x08, 0x4e, 0xdc, 0xb1, 0xf5, 0x95, 0x6a, 0x06, 0x2e, 0x3d, 0xcd, 0xb5, 0x3c, 0x0d, 0x77, 0xc5, 0x1b,
0x5a, 0xa2, 0x74, 0xea, 0x54, 0xde, 0x83, 0x7a, 0x36, 0xca, 0x8d, 0x59, 0xa5, 0x1d, 0xbe, 0x8d, 0x8a, 0xd0, 0xdf, 0xf1, 0xe8, 0x33, 0x3f, 0xcd, 0x2a, 0x8b, 0xf1, 0xb5, 0xa5, 0x0d, 0x7f, 0x04,
0xf7, 0xe0, 0x4e, 0xf9, 0x50, 0xb0, 0xe3, 0x89, 0xa1, 0xfc, 0x06, 0xe7, 0xcf, 0xd9, 0xab, 0x95, 0x6d, 0x51, 0x76, 0x75, 0x2a, 0xef, 0x41, 0x3d, 0x1b, 0xe5, 0xc6, 0xac, 0xd2, 0x0e, 0xdf, 0xc6,
0xec, 0xe1, 0x5f, 0x88, 0x94, 0x77, 0x64, 0xd1, 0x79, 0xe3, 0xda, 0xcf, 0xd3, 0x5f, 0xcf, 0x4f, 0xbf, 0x80, 0x3b, 0xe5, 0x13, 0xc4, 0xb6, 0xe7, 0xe5, 0x5d, 0xe0, 0x1b, 0x76, 0x03, 0x1b, 0xb0,
0xe3, 0x80, 0x8e, 0x07, 0x51, 0x8f, 0xa9, 0xfc, 0xa6, 0x83, 0xf0, 0x97, 0xd6, 0x43, 0x81, 0xba, 0xd0, 0xf7, 0xd3, 0x38, 0xa0, 0xe3, 0x41, 0xd4, 0x67, 0x2a, 0x6b, 0xe9, 0x20, 0xd3, 0xbb, 0x1b,
0x02, 0x97, 0x4e, 0xcb, 0xbd, 0xa0, 0xa9, 0x19, 0xa1, 0xd0, 0x3f, 0x86, 0xc6, 0xa9, 0x4a, 0x32, 0xb6, 0x77, 0x7f, 0x61, 0x3d, 0x2c, 0x28, 0x06, 0x70, 0xe9, 0x8a, 0xdc, 0xb6, 0x2d, 0x4d, 0xb5,
0x15, 0x38, 0x62, 0xeb, 0x0d, 0x18, 0x78, 0xc5, 0x19, 0xb8, 0x90, 0x8e, 0xaf, 0xf4, 0xcc, 0xab, 0x85, 0x56, 0x31, 0x34, 0x4f, 0x54, 0x62, 0xa9, 0xc0, 0x11, 0x5b, 0x37, 0xb3, 0x87, 0x5f, 0x71,
0xf2, 0xf5, 0xba, 0xda, 0x80, 0x79, 0x1e, 0xe8, 0x65, 0x08, 0xe6, 0x4b, 0xfc, 0x4f, 0x07, 0xee, 0x06, 0x2e, 0xa4, 0x3b, 0x2b, 0xed, 0xf1, 0x3a, 0x7d, 0x7d, 0x72, 0x58, 0x87, 0x39, 0x1e, 0xdc,
0x69, 0x4f, 0x34, 0xa5, 0x5d, 0x84, 0xf1, 0xae, 0xa7, 0x8a, 0xa1, 0xc9, 0x9d, 0x97, 0x30, 0xef, 0x65, 0x60, 0xe5, 0x4b, 0xfc, 0x6f, 0x07, 0xee, 0x69, 0x4f, 0x3a, 0xa5, 0xb6, 0x85, 0x49, 0xae,
0xf2, 0x79, 0x40, 0xfb, 0x6a, 0x5c, 0x35, 0x60, 0x9c, 0x42, 0xcf, 0x4f, 0x98, 0x0c, 0x11, 0x29, 0xa7, 0x8a, 0xa1, 0xc5, 0x5d, 0x92, 0x30, 0xef, 0xf2, 0x79, 0x40, 0x4f, 0xd5, 0x78, 0x6b, 0xc0,
0x4e, 0x09, 0x28, 0x1f, 0x63, 0x64, 0x64, 0x35, 0x0a, 0x7b, 0x9d, 0x26, 0xd1, 0x20, 0x9f, 0x35, 0x38, 0x85, 0xbe, 0x9f, 0x30, 0xe9, 0xf8, 0x52, 0x9c, 0x12, 0x50, 0x3e, 0xde, 0xc8, 0x78, 0x69,
0xf8, 0x37, 0x97, 0x80, 0xdb, 0x8d, 0xa5, 0xa9, 0x8a, 0x9b, 0x7c, 0xc9, 0x43, 0x3b, 0x65, 0xac, 0x16, 0xd6, 0x3c, 0x49, 0xa2, 0x41, 0x3e, 0x9b, 0xf0, 0x6f, 0x2e, 0x01, 0xb7, 0x2a, 0x4b, 0x53,
0xa7, 0x12, 0xdb, 0xbc, 0x10, 0x4f, 0x83, 0xe0, 0x4f, 0x84, 0x63, 0x13, 0x96, 0x7a, 0x34, 0xfc, 0x15, 0x0d, 0xf9, 0x92, 0x07, 0x6c, 0xca, 0x58, 0x5f, 0x25, 0xb3, 0x39, 0x21, 0x9e, 0x06, 0xb9,
0x42, 0x28, 0x79, 0x15, 0x1a, 0xfc, 0xb0, 0x74, 0x4a, 0x97, 0xc8, 0x85, 0xb8, 0xb5, 0x94, 0x42, 0xe1, 0x45, 0xfb, 0x13, 0xe1, 0xcc, 0x84, 0xa5, 0x1e, 0x0d, 0x3f, 0x17, 0x26, 0x58, 0x81, 0x26,
0x7c, 0xe3, 0x8f, 0x61, 0x85, 0xb0, 0x58, 0x9e, 0x25, 0x2c, 0x1d, 0x06, 0xd5, 0xce, 0x54, 0x75, 0x27, 0x2d, 0x1d, 0xd1, 0x25, 0x72, 0x21, 0x78, 0x2a, 0x65, 0x14, 0xdf, 0xf8, 0x63, 0x58, 0x26,
0xf4, 0x8c, 0x5f, 0x1b, 0xeb, 0xd7, 0xe6, 0x58, 0x4e, 0x89, 0x85, 0x3a, 0xd0, 0x4a, 0xcc, 0x0b, 0x2c, 0x96, 0x67, 0x09, 0x4b, 0x87, 0x41, 0xb5, 0x23, 0x56, 0x1d, 0x3d, 0xe3, 0xd7, 0xc6, 0xfa,
0x52, 0x6b, 0xf4, 0xb4, 0xee, 0x27, 0x13, 0xf8, 0xf8, 0x31, 0x8f, 0xba, 0x8b, 0xbd, 0x90, 0x76, 0xb5, 0x39, 0x96, 0x53, 0x62, 0xa1, 0x2e, 0xb4, 0x13, 0xf3, 0x82, 0xd4, 0x1a, 0x64, 0xad, 0xfb,
0x03, 0x96, 0xff, 0x3b, 0x52, 0x88, 0x58, 0xd3, 0x44, 0xc4, 0xfb, 0xe2, 0xf1, 0x98, 0x37, 0xc5, 0xc9, 0x04, 0x3e, 0x7e, 0xcc, 0x23, 0xed, 0x62, 0x37, 0xa4, 0xbd, 0x80, 0xe5, 0xff, 0xb5, 0x14,
0xd7, 0x0b, 0xb3, 0x9f, 0x1e, 0x1e, 0x08, 0x61, 0x16, 0x88, 0xf8, 0xe6, 0x09, 0x75, 0x90, 0xf6, 0x22, 0xd6, 0x34, 0x11, 0xf1, 0x9e, 0x78, 0x8a, 0xe6, 0x2d, 0xf6, 0xf5, 0xc2, 0xec, 0xa5, 0x07,
0xd5, 0xd0, 0xc4, 0x3f, 0x71, 0x47, 0x84, 0xba, 0x79, 0xe9, 0x16, 0xcc, 0x27, 0x4a, 0x06, 0xf3, 0xfb, 0x42, 0x98, 0x79, 0x22, 0xbe, 0x79, 0x12, 0x1d, 0xa4, 0xa7, 0xaa, 0xb7, 0xe6, 0x9f, 0xb8,
0x5d, 0xcb, 0xb8, 0x94, 0xe4, 0x48, 0xf8, 0x4f, 0xe5, 0x8c, 0x7a, 0xec, 0xf7, 0x43, 0x9a, 0x0d, 0x2b, 0xc2, 0xdb, 0xbc, 0x74, 0x13, 0xe6, 0x12, 0x25, 0x83, 0xf9, 0x4a, 0x66, 0x5c, 0x4a, 0x72,
0x13, 0x76, 0x44, 0x13, 0x3a, 0xe0, 0x36, 0x95, 0x5e, 0x78, 0x32, 0x8e, 0x99, 0x52, 0x98, 0x06, 0x24, 0xfc, 0xc7, 0x72, 0xe2, 0x3d, 0xf2, 0x4f, 0x43, 0x9a, 0x0d, 0x13, 0x76, 0x48, 0x13, 0x3a,
0x41, 0x1f, 0x00, 0xf0, 0x98, 0xea, 0x8a, 0xfc, 0xa6, 0x14, 0x56, 0x91, 0xf8, 0x34, 0x24, 0xf4, 0xe0, 0x16, 0x97, 0x3e, 0x7a, 0x3c, 0x8e, 0x99, 0x52, 0x98, 0x06, 0x41, 0x1f, 0x00, 0xf0, 0x88,
0x31, 0x2c, 0x25, 0x5a, 0x12, 0x4d, 0x55, 0x85, 0xae, 0x4c, 0xb0, 0x26, 0x26, 0xfe, 0xa3, 0x03, 0xeb, 0x89, 0x9c, 0xa6, 0x14, 0x56, 0x91, 0xec, 0x34, 0x24, 0xf4, 0x31, 0x2c, 0x26, 0x5a, 0xe2,
0xab, 0x3f, 0xa2, 0x41, 0xc0, 0x32, 0x15, 0xee, 0xb9, 0xc0, 0x0f, 0x01, 0x2e, 0x7d, 0x76, 0xa5, 0x4c, 0x55, 0xcd, 0xae, 0x4c, 0xaa, 0x26, 0x26, 0xfe, 0x83, 0x03, 0x2b, 0x3f, 0xa4, 0x41, 0xc0,
0xba, 0x10, 0x59, 0x6e, 0x34, 0x08, 0x8f, 0x66, 0xb1, 0x4a, 0xfc, 0xcb, 0x83, 0x22, 0xf4, 0x74, 0x32, 0x95, 0x0c, 0x72, 0x81, 0x1f, 0x02, 0x5c, 0xfa, 0xec, 0x4a, 0xf5, 0x25, 0xb2, 0xc4, 0x68,
0x10, 0xc7, 0x48, 0x63, 0x16, 0xf6, 0x14, 0x09, 0xf9, 0xaf, 0x83, 0x0e, 0x12, 0x41, 0x26, 0x96, 0x10, 0x1e, 0xeb, 0x62, 0x95, 0xf8, 0x97, 0xfb, 0x45, 0x60, 0xea, 0x20, 0x8e, 0x91, 0xc6, 0x2c,
0x8a, 0x88, 0x7c, 0xc5, 0x36, 0x60, 0xf8, 0xeb, 0x9a, 0xc8, 0x7b, 0x32, 0x29, 0xe4, 0xa1, 0x7c, 0xec, 0x2b, 0x12, 0xf2, 0x3f, 0x0c, 0x1d, 0x24, 0x42, 0x50, 0x2c, 0x15, 0x11, 0xf9, 0x26, 0x6e,
0x53, 0xf3, 0x60, 0xea, 0xb8, 0x36, 0xa1, 0xe3, 0x69, 0xb3, 0x46, 0x3e, 0x41, 0xcf, 0x6a, 0x13, 0xc0, 0xf0, 0x57, 0x35, 0xd1, 0xfc, 0xc9, 0x94, 0x91, 0x07, 0xfa, 0x4d, 0xed, 0x84, 0xa9, 0xe3,
0x74, 0x55, 0xc4, 0xda, 0x7f, 0x41, 0x99, 0x93, 0x1b, 0xd8, 0x93, 0x9b, 0x6a, 0x2c, 0x65, 0x3a, 0xda, 0x84, 0x8e, 0xa7, 0xcd, 0x26, 0xf9, 0x3c, 0xde, 0xd0, 0xe6, 0xf1, 0xaa, 0x78, 0xb6, 0xff,
0x58, 0x2c, 0x1a, 0x4b, 0x2f, 0xef, 0xdb, 0x54, 0x43, 0xd3, 0x34, 0x1a, 0x1a, 0xa3, 0x99, 0x5d, 0xd0, 0x32, 0xe7, 0x40, 0xb0, 0xe7, 0x40, 0xd5, 0x6a, 0xca, 0x64, 0xb1, 0x50, 0xb4, 0x9a, 0x5e,
0xb2, 0x9a, 0xd9, 0x27, 0xbf, 0xab, 0xc1, 0xbc, 0xf6, 0x2f, 0xea, 0xf1, 0x59, 0x74, 0xa5, 0x94, 0xde, 0xc9, 0xa9, 0x16, 0xa7, 0x65, 0xb4, 0x38, 0x46, 0xe4, 0x2f, 0x5a, 0x91, 0xff, 0xe4, 0x77,
0xc3, 0x55, 0xdf, 0x2a, 0x2c, 0x7f, 0x71, 0x9c, 0x25, 0x7e, 0xd8, 0x6f, 0xdf, 0x2b, 0x43, 0xce, 0x35, 0x98, 0xd3, 0xfe, 0x93, 0x3d, 0x3a, 0x8b, 0xae, 0x94, 0x72, 0xb8, 0xea, 0xdb, 0x85, 0xe5,
0x1a, 0x4f, 0xf1, 0x0c, 0xfa, 0x01, 0x2c, 0xea, 0xc1, 0xbc, 0x56, 0x9e, 0xd6, 0xc0, 0xed, 0x35, 0x2f, 0x8e, 0xb2, 0xc4, 0x0f, 0x4f, 0x3b, 0xf7, 0xca, 0x90, 0xb3, 0x86, 0x5d, 0x3c, 0x83, 0xbe,
0x3b, 0x6a, 0x05, 0x18, 0xcf, 0xa0, 0x5d, 0x58, 0x32, 0x83, 0xe5, 0x9d, 0x92, 0x80, 0xb1, 0xd1, 0x07, 0x0b, 0x7a, 0x30, 0xaf, 0x96, 0xa7, 0x35, 0x70, 0x67, 0xd5, 0x8e, 0x5a, 0x01, 0xc6, 0x33,
0x2e, 0x37, 0xcc, 0xf0, 0xc2, 0x33, 0xe8, 0x05, 0xac, 0x4a, 0x1b, 0x13, 0x7a, 0xa5, 0xa5, 0x6a, 0x68, 0x07, 0x16, 0xcd, 0x60, 0x79, 0xa7, 0x24, 0x60, 0x6c, 0x74, 0xca, 0x0d, 0x33, 0xbc, 0xf0,
0x54, 0x32, 0x6e, 0xfb, 0x40, 0xbb, 0xa2, 0xe2, 0xe2, 0x99, 0xee, 0x9c, 0xf8, 0xc7, 0xfb, 0x7b, 0x0c, 0x7a, 0x01, 0x2b, 0xd2, 0xc6, 0x84, 0x5e, 0x69, 0x89, 0x1c, 0x95, 0x8c, 0xdb, 0x3e, 0xd0,
0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x8c, 0x61, 0xaa, 0x59, 0x2a, 0x1f, 0x00, 0x00, 0xa9, 0xa8, 0xb2, 0x78, 0xa6, 0x37, 0x2b, 0xfe, 0x3f, 0xff, 0xce, 0x7f, 0x02, 0x00, 0x00, 0xff,
0xff, 0x60, 0x83, 0x9e, 0xc4, 0x78, 0x1f, 0x00, 0x00,
} }
...@@ -67,7 +67,7 @@ func (policy *privacyPolicy) On_CreateTransaction(req *privacytypes.ReqCreatePri ...@@ -67,7 +67,7 @@ func (policy *privacyPolicy) On_CreateTransaction(req *privacytypes.ReqCreatePri
return reply, err return reply, err
} }
func (policy *privacyPolicy) On_ShowPrivacyAccountInfo(req *privacytypes.ReqPPrivacyAccount) (types.Message, error) { func (policy *privacyPolicy) On_ShowPrivacyAccountInfo(req *privacytypes.ReqPrivacyAccount) (types.Message, error) {
policy.getWalletOperate().GetMutex().Lock() policy.getWalletOperate().GetMutex().Lock()
defer policy.getWalletOperate().GetMutex().Unlock() defer policy.getWalletOperate().GetMutex().Unlock()
reply, err := policy.getPrivacyAccountInfo(req) reply, err := policy.getPrivacyAccountInfo(req)
......
...@@ -96,45 +96,37 @@ func calcAddrKey(addr string) []byte { ...@@ -96,45 +96,37 @@ func calcAddrKey(addr string) []byte {
} }
// calcPrivacyUTXOPrefix4Addr 获取指定地址下可用UTXO信息索引的KEY值前缀 // calcPrivacyUTXOPrefix4Addr 获取指定地址下可用UTXO信息索引的KEY值前缀
func calcPrivacyUTXOPrefix4Addr(token, addr string) []byte { func calcPrivacyUTXOPrefix4Addr(assetExec, token, addr string) []byte {
return []byte(fmt.Sprintf("%s-%s-%s-", AvailUTXOs, token, addr)) return []byte(fmt.Sprintf("%s-%s-%s-%s-", AvailUTXOs, assetExec, token, addr))
} }
// calcFTXOsKeyPrefix 获取指定地址下由于交易未被确认而让交易使用到的UTXO处于冻结状态信息的KEY值前缀 // calcFTXOsKeyPrefix 获取指定地址下由于交易未被确认而让交易使用到的UTXO处于冻结状态信息的KEY值前缀
func calcFTXOsKeyPrefix(token, addr string) []byte { func calcFTXOsKeyPrefix(assetExec, token, addr string) []byte {
var prefix string return []byte(fmt.Sprintf("%s:%s-%s-%s-", FrozenUTXOs, assetExec, token, addr))
if len(token) > 0 && len(addr) > 0 {
prefix = fmt.Sprintf("%s:%s-%s-", FrozenUTXOs, token, addr)
} else if len(token) > 0 {
prefix = fmt.Sprintf("%s:%s-", FrozenUTXOs, token)
} else {
prefix = fmt.Sprintf("%s:", FrozenUTXOs)
}
return []byte(prefix)
} }
// calcSendPrivacyTxKey 计算以指定地址作为发送地址的交易信息索引 // calcSendPrivacyTxKey 计算以指定地址作为发送地址的交易信息索引
// addr为发送地址 // addr为发送地址
// key为通过calcTxKey(heightstr)计算出来的值 // key为通过calcTxKey(heightstr)计算出来的值
func calcSendPrivacyTxKey(tokenname, addr, key string) []byte { func calcSendPrivacyTxKey(assetExec, tokenname, addr, key string) []byte {
return []byte(fmt.Sprintf("%s:%s-%s-%s", SendPrivacyTx, tokenname, addr, key)) return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", SendPrivacyTx, assetExec, tokenname, addr, key))
} }
// calcRecvPrivacyTxKey 计算以指定地址作为接收地址的交易信息索引 // calcRecvPrivacyTxKey 计算以指定地址作为接收地址的交易信息索引
// addr为接收地址 // addr为接收地址
// key为通过calcTxKey(heightstr)计算出来的值 // key为通过calcTxKey(heightstr)计算出来的值
func calcRecvPrivacyTxKey(tokenname, addr, key string) []byte { func calcRecvPrivacyTxKey(assetExec, tokenname, addr, key string) []byte {
return []byte(fmt.Sprintf("%s:%s-%s-%s", RecvPrivacyTx, tokenname, addr, key)) return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", RecvPrivacyTx, assetExec, tokenname, addr, key))
} }
// calcUTXOKey4TokenAddr 计算当前地址可用UTXO的Key健值 // calcUTXOKey4TokenAddr 计算当前地址可用UTXO的Key健值
func calcUTXOKey4TokenAddr(token, addr, txhash string, index int) []byte { func calcUTXOKey4TokenAddr(assetExec, token, addr, txhash string, index int) []byte {
return []byte(fmt.Sprintf("%s-%s-%s-%s-%d", AvailUTXOs, token, addr, txhash, index)) return []byte(fmt.Sprintf("%s-%s-%s-%s-%s-%d", AvailUTXOs, assetExec, token, addr, txhash, index))
} }
// calcKey4FTXOsInTx 交易构建以后,将可用UTXO冻结的健值 // calcKey4FTXOsInTx 交易构建以后,将可用UTXO冻结的健值
func calcKey4FTXOsInTx(token, addr, txhash string) []byte { func calcKey4FTXOsInTx(assetExec, token, addr, txhash string) []byte {
return []byte(fmt.Sprintf("%s:%s-%s-%s", FrozenUTXOs, token, addr, txhash)) return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", FrozenUTXOs, assetExec, token, addr, txhash))
} }
// calcRescanUtxosFlagKey 新账户导入时扫描区块上该地址相关的UTXO信息 // calcRescanUtxosFlagKey 新账户导入时扫描区块上该地址相关的UTXO信息
...@@ -151,17 +143,17 @@ func calcKey4STXOsInTx(txhash string) []byte { ...@@ -151,17 +143,17 @@ func calcKey4STXOsInTx(txhash string) []byte {
} }
// calcSTXOTokenAddrTxKey 计算当前地址已花费的UTXO // calcSTXOTokenAddrTxKey 计算当前地址已花费的UTXO
func calcSTXOTokenAddrTxKey(token, addr, txhash string) []byte { func calcSTXOTokenAddrTxKey(assetExec, token, addr, txhash string) []byte {
return []byte(fmt.Sprintf("%s-%s-%s-%s", PrivacySTXO, token, addr, txhash)) return []byte(fmt.Sprintf("%s-%s-%s-%s-%s", PrivacySTXO, assetExec, token, addr, txhash))
} }
func calcSTXOPrefix4Addr(token, addr string) []byte { func calcSTXOPrefix4Addr(assetExec, token, addr string) []byte {
return []byte(fmt.Sprintf("%s-%s-%s-", PrivacySTXO, token, addr)) return []byte(fmt.Sprintf("%s-%s-%s-%s-", PrivacySTXO, assetExec, token, addr))
} }
// calcRevertSendTxKey 交易因为区块回退而将已经花费的UTXO移动到冻结UTXO队列的健值 // calcRevertSendTxKey 交易因为区块回退而将已经花费的UTXO移动到冻结UTXO队列的健值
func calcRevertSendTxKey(tokenname, addr, txhash string) []byte { func calcRevertSendTxKey(assetExec, tokenname, addr, txhash string) []byte {
return []byte(fmt.Sprintf("%s:%s-%s-%s", RevertSendtx, tokenname, addr, txhash)) return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", RevertSendtx, assetExec, tokenname, addr, txhash))
} }
//通过height*100000+index 查询Tx交易信息 //通过height*100000+index 查询Tx交易信息
......
...@@ -252,7 +252,7 @@ func (policy *privacyPolicy) showPrivacyKeyPair(reqAddr *types.ReqString) (*priv ...@@ -252,7 +252,7 @@ func (policy *privacyPolicy) showPrivacyKeyPair(reqAddr *types.ReqString) (*priv
return replyPrivacyPkPair, nil return replyPrivacyPkPair, nil
} }
func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacyAccount) (*privacytypes.ReplyPrivacyAccount, error) { func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPrivacyAccount) (*privacytypes.ReplyPrivacyAccount, error) {
addr := strings.Trim(req.GetAddr(), " ") addr := strings.Trim(req.GetAddr(), " ")
token := req.GetToken() token := req.GetToken()
reply := &privacytypes.ReplyPrivacyAccount{} reply := &privacytypes.ReplyPrivacyAccount{}
...@@ -262,7 +262,7 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy ...@@ -262,7 +262,7 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy
} }
// 搜索可用余额 // 搜索可用余额
privacyDBStore, err := policy.store.listAvailableUTXOs(token, addr) privacyDBStore, err := policy.store.listAvailableUTXOs(req.GetAssetExec(), token, addr)
if err != nil { if err != nil {
bizlog.Error("getPrivacyAccountInfo", "listAvailableUTXOs") bizlog.Error("getPrivacyAccountInfo", "listAvailableUTXOs")
return nil, err return nil, err
...@@ -286,7 +286,7 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy ...@@ -286,7 +286,7 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy
// 搜索冻结余额 // 搜索冻结余额
utxos = make([]*privacytypes.UTXO, 0) utxos = make([]*privacytypes.UTXO, 0)
ftxoslice, err := policy.store.listFrozenUTXOs(token, addr) ftxoslice, err := policy.store.listFrozenUTXOs(req.GetAssetExec(), token, addr)
if err == nil && ftxoslice != nil { if err == nil && ftxoslice != nil {
for _, ele := range ftxoslice { for _, ele := range ftxoslice {
utxos = append(utxos, ele.Utxos...) utxos = append(utxos, ele.Utxos...)
...@@ -302,11 +302,11 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy ...@@ -302,11 +302,11 @@ func (policy *privacyPolicy) getPrivacyAccountInfo(req *privacytypes.ReqPPrivacy
// 优先选择UTXO高度与当前高度建个12个区块以上的UTXO // 优先选择UTXO高度与当前高度建个12个区块以上的UTXO
// 如果选择还不够则再从老到新选择12个区块内的UTXO // 如果选择还不够则再从老到新选择12个区块内的UTXO
// 当该地址上的可用UTXO比较多时,可以考虑改进算法,优先选择币值小的,花掉小票,然后再选择币值接近的,减少找零,最后才选择大面值的找零 // 当该地址上的可用UTXO比较多时,可以考虑改进算法,优先选择币值小的,花掉小票,然后再选择币值接近的,减少找零,最后才选择大面值的找零
func (policy *privacyPolicy) selectUTXO(token, addr string, amount int64) ([]*txOutputInfo, error) { func (policy *privacyPolicy) selectUTXO(assetExec, token, addr string, amount int64) ([]*txOutputInfo, error) {
if len(token) == 0 || len(addr) == 0 || amount <= 0 { if len(token) == 0 || len(addr) == 0 || amount <= 0 {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
wutxos, err := policy.store.getPrivacyTokenUTXOs(token, addr) wutxos, err := policy.store.getPrivacyTokenUTXOs(assetExec, token, addr)
if err != nil { if err != nil {
return nil, types.ErrInsufficientBalance return nil, types.ErrInsufficientBalance
} }
...@@ -364,7 +364,7 @@ buildInput 构建隐私交易的输入信息 ...@@ -364,7 +364,7 @@ buildInput 构建隐私交易的输入信息
func (policy *privacyPolicy) buildInput(privacykeyParirs *privacy.Privacy, buildInfo *buildInputInfo) (*privacytypes.PrivacyInput, []*privacytypes.UTXOBasics, []*privacytypes.RealKeyInput, []*txOutputInfo, error) { func (policy *privacyPolicy) buildInput(privacykeyParirs *privacy.Privacy, buildInfo *buildInputInfo) (*privacytypes.PrivacyInput, []*privacytypes.UTXOBasics, []*privacytypes.RealKeyInput, []*txOutputInfo, error) {
operater := policy.getWalletOperate() operater := policy.getWalletOperate()
//挑选满足额度的utxo //挑选满足额度的utxo
selectedUtxo, err := policy.selectUTXO(buildInfo.assetSymbol, buildInfo.sender, buildInfo.amount) selectedUtxo, err := policy.selectUTXO(buildInfo.assetExec, buildInfo.assetSymbol, buildInfo.sender, buildInfo.amount)
if err != nil { if err != nil {
bizlog.Error("buildInput", "Failed to selectOutput for amount", buildInfo.amount, bizlog.Error("buildInput", "Failed to selectOutput for amount", buildInfo.amount,
"Due to cause", err) "Due to cause", err)
...@@ -632,7 +632,7 @@ func (policy *privacyPolicy) createPrivacy2PrivacyTx(req *privacytypes.ReqCreate ...@@ -632,7 +632,7 @@ func (policy *privacyPolicy) createPrivacy2PrivacyTx(req *privacytypes.ReqCreate
} }
// 创建交易成功,将已经使用掉的UTXO冻结,需要注意此处获取的txHash和交易发送时的一致 // 创建交易成功,将已经使用掉的UTXO冻结,需要注意此处获取的txHash和交易发送时的一致
policy.saveFTXOInfo(tx.GetExpire(), req.Tokenname, req.GetFrom(), hex.EncodeToString(tx.Hash()), selectedUtxo) policy.saveFTXOInfo(tx.GetExpire(), req.GetAssetExec(), req.Tokenname, req.GetFrom(), hex.EncodeToString(tx.Hash()), selectedUtxo)
tx.Signature = &types.Signature{ tx.Signature = &types.Signature{
Signature: types.Encode(&privacytypes.PrivacySignatureParam{ Signature: types.Encode(&privacytypes.PrivacySignatureParam{
ActionType: action.Ty, ActionType: action.Ty,
...@@ -721,7 +721,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP ...@@ -721,7 +721,7 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP
} }
} }
// 创建交易成功,将已经使用掉的UTXO冻结,需要注意此处获取的txHash和交易发送时的一致 // 创建交易成功,将已经使用掉的UTXO冻结,需要注意此处获取的txHash和交易发送时的一致
policy.saveFTXOInfo(tx.GetExpire(), req.Tokenname, req.GetFrom(), hex.EncodeToString(tx.Hash()), selectedUtxo) policy.saveFTXOInfo(tx.GetExpire(), req.GetAssetExec(), req.Tokenname, req.GetFrom(), hex.EncodeToString(tx.Hash()), selectedUtxo)
tx.Signature = &types.Signature{ tx.Signature = &types.Signature{
Signature: types.Encode(&privacytypes.PrivacySignatureParam{ Signature: types.Encode(&privacytypes.PrivacySignatureParam{
ActionType: action.Ty, ActionType: action.Ty,
...@@ -732,9 +732,9 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP ...@@ -732,9 +732,9 @@ func (policy *privacyPolicy) createPrivacy2PublicTx(req *privacytypes.ReqCreateP
return tx, nil return tx, nil
} }
func (policy *privacyPolicy) saveFTXOInfo(expire int64, assertSymbol, sender, txhash string, selectedUtxos []*txOutputInfo) { func (policy *privacyPolicy) saveFTXOInfo(expire int64, assetExec, assetSymbol, sender, txhash string, selectedUtxos []*txOutputInfo) {
//将已经作为本次交易输入的utxo进行冻结,防止产生双花交易 //将已经作为本次交易输入的utxo进行冻结,防止产生双花交易
policy.store.moveUTXO2FTXO(expire, assertSymbol, sender, txhash, selectedUtxos) policy.store.moveUTXO2FTXO(expire, assetExec, assetSymbol, sender, txhash, selectedUtxos)
//TODO:需要加入超时处理,需要将此处的txhash写入到数据库中,以免钱包瞬间奔溃后没有对该笔隐私交易的记录, //TODO:需要加入超时处理,需要将此处的txhash写入到数据库中,以免钱包瞬间奔溃后没有对该笔隐私交易的记录,
//TODO:然后当该交易得到执行之后,没法将FTXO转化为STXO,added by hezhengjun on 2018.6.5 //TODO:然后当该交易得到执行之后,没法将FTXO转化为STXO,added by hezhengjun on 2018.6.5
} }
...@@ -815,7 +815,7 @@ func (policy *privacyPolicy) reqUtxosByAddr(addrs []string) { ...@@ -815,7 +815,7 @@ func (policy *privacyPolicy) reqUtxosByAddr(addrs []string) {
} else { } else {
storeAddrs = append(storeAddrs, addrs...) storeAddrs = append(storeAddrs, addrs...)
} }
policy.store.saveREscanUTXOsAddresses(storeAddrs) policy.store.saveREscanUTXOsAddresses(storeAddrs, privacytypes.UtxoFlagScaning)
cfg := policy.getWalletOperate().GetAPI().GetConfig() cfg := policy.getWalletOperate().GetAPI().GetConfig()
reqAddr := address.ExecAddress(cfg.ExecName(privacytypes.PrivacyX)) reqAddr := address.ExecAddress(cfg.ExecName(privacytypes.PrivacyX))
...@@ -881,7 +881,7 @@ func (policy *privacyPolicy) reqUtxosByAddr(addrs []string) { ...@@ -881,7 +881,7 @@ func (policy *privacyPolicy) reqUtxosByAddr(addrs []string) {
policy.SetRescanFlag(privacytypes.UtxoFlagNoScan) policy.SetRescanFlag(privacytypes.UtxoFlagNoScan)
// 删除privacyInput // 删除privacyInput
policy.deleteScanPrivacyInputUtxo() policy.deleteScanPrivacyInputUtxo()
policy.store.saveREscanUTXOsAddresses(storeAddrs) policy.store.saveREscanUTXOsAddresses(storeAddrs, privacytypes.UtxoFlagScanEnd)
} }
//TODO:input也可能时混淆的utxo, 需要增加判定实际的utxo //TODO:input也可能时混淆的utxo, 需要增加判定实际的utxo
...@@ -906,7 +906,7 @@ func (policy *privacyPolicy) getPrivacyTxDetailByHashs(ReqHashes *types.ReqHashe ...@@ -906,7 +906,7 @@ func (policy *privacyPolicy) getPrivacyTxDetailByHashs(ReqHashes *types.ReqHashe
var privacyInfo []addrAndprivacy var privacyInfo []addrAndprivacy
if len(addrs) > 0 { if len(addrs) > 0 {
for _, addr := range addrs { for _, addr := range addrs {
if privacy, err := policy.getPrivacykeyPair(addr); err != nil { if privacy, err := policy.getPrivacykeyPair(addr); err == nil {
priInfo := &addrAndprivacy{ priInfo := &addrAndprivacy{
Addr: &addr, Addr: &addr,
PrivacyKeyPair: privacy, PrivacyKeyPair: privacy,
...@@ -925,10 +925,7 @@ func (policy *privacyPolicy) showPrivacyAccountsSpend(req *privacytypes.ReqPrivB ...@@ -925,10 +925,7 @@ func (policy *privacyPolicy) showPrivacyAccountsSpend(req *privacytypes.ReqPrivB
if ok, err := policy.isRescanUtxosFlagScaning(); ok { if ok, err := policy.isRescanUtxosFlagScaning(); ok {
return nil, err return nil, err
} }
utxoHaveTxHashs, err := policy.store.listSpendUTXOs(req.GetAssetExec(), req.GetToken(), req.GetAddr())
addr := req.GetAddr()
token := req.GetToken()
utxoHaveTxHashs, err := policy.store.listSpendUTXOs(token, addr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -992,18 +989,18 @@ func (policy *privacyPolicy) buildAndStoreWalletTxDetail(param *buildStoreWallet ...@@ -992,18 +989,18 @@ func (policy *privacyPolicy) buildAndStoreWalletTxDetail(param *buildStoreWallet
if param.isprivacy { if param.isprivacy {
//额外存储可以快速定位到接收隐私的交易 //额外存储可以快速定位到接收隐私的交易
if sendTx == param.sendRecvFlag { if sendTx == param.sendRecvFlag {
param.newbatch.Set(calcSendPrivacyTxKey(param.tokenname, param.senderRecver, heightstr), key) param.newbatch.Set(calcSendPrivacyTxKey(param.assetExec, param.tokenname, param.senderRecver, heightstr), key)
} else if recvTx == param.sendRecvFlag { } else if recvTx == param.sendRecvFlag {
param.newbatch.Set(calcRecvPrivacyTxKey(param.tokenname, param.senderRecver, heightstr), key) param.newbatch.Set(calcRecvPrivacyTxKey(param.assetExec, param.tokenname, param.senderRecver, heightstr), key)
} }
} }
} else { } else {
param.newbatch.Delete(calcTxKey(heightstr)) param.newbatch.Delete(calcTxKey(heightstr))
if param.isprivacy { if param.isprivacy {
if sendTx == param.sendRecvFlag { if sendTx == param.sendRecvFlag {
param.newbatch.Delete(calcSendPrivacyTxKey(param.tokenname, param.senderRecver, heightstr)) param.newbatch.Delete(calcSendPrivacyTxKey(param.assetExec, param.tokenname, param.senderRecver, heightstr))
} else if recvTx == param.sendRecvFlag { } else if recvTx == param.sendRecvFlag {
param.newbatch.Delete(calcRecvPrivacyTxKey(param.tokenname, param.senderRecver, heightstr)) param.newbatch.Delete(calcRecvPrivacyTxKey(param.assetExec, param.tokenname, param.senderRecver, heightstr))
} }
} }
} }
...@@ -1068,7 +1065,10 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1068,7 +1065,10 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
bizlog.Error("addDelPrivacyTxsFromBlock", "txhash", txhashstr, "addDelType", addDelType, "index", index, "privacyOutput is", privacyOutput) bizlog.Error("addDelPrivacyTxsFromBlock", "txhash", txhashstr, "addDelType", addDelType, "index", index, "privacyOutput is", privacyOutput)
return return
} }
tokenname := privateAction.GetTokenName() assetExec, tokenname := privateAction.GetAssetExecSymbol()
if assetExec == "" {
assetExec = "coins"
}
RpubKey := privacyOutput.GetRpubKeytx() RpubKey := privacyOutput.GetRpubKeytx()
totalUtxosLeft := len(privacyOutput.Keyoutput) totalUtxosLeft := len(privacyOutput.Keyoutput)
...@@ -1099,6 +1099,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1099,6 +1099,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
if types.ExecOk == txExecRes { if types.ExecOk == txExecRes {
if AddTx == addDelType { if AddTx == addDelType {
info2store := &privacytypes.PrivacyDBStore{ info2store := &privacytypes.PrivacyDBStore{
AssetExec: assetExec,
Txhash: txhash, Txhash: txhash,
Tokenname: tokenname, Tokenname: tokenname,
Amount: output.Amount, Amount: output.Amount,
...@@ -1128,7 +1129,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1128,7 +1129,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
policy.store.setUTXO(info.Addr, &txhashstr, indexoutput, info2store, newbatch) policy.store.setUTXO(info.Addr, &txhashstr, indexoutput, info2store, newbatch)
bizlog.Info("addDelPrivacyTxsFromBlock", "add tx txhash", txhashstr, "setUTXO addr ", *info.Addr, "indexoutput", indexoutput) bizlog.Info("addDelPrivacyTxsFromBlock", "add tx txhash", txhashstr, "setUTXO addr ", *info.Addr, "indexoutput", indexoutput)
} else { } else {
policy.store.unsetUTXO(info.Addr, &txhashstr, indexoutput, tokenname, newbatch) policy.store.unsetUTXO(assetExec, tokenname, *info.Addr, txhashstr, indexoutput, newbatch)
bizlog.Info("addDelPrivacyTxsFromBlock", "delete tx txhash", txhashstr, "unsetUTXO addr ", *info.Addr, "indexoutput", indexoutput) bizlog.Info("addDelPrivacyTxsFromBlock", "delete tx txhash", txhashstr, "unsetUTXO addr ", *info.Addr, "indexoutput", indexoutput)
} }
} else { } else {
...@@ -1146,6 +1147,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1146,6 +1147,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
//匹配次数达到2次,不再对本钱包中的其他地址进行匹配尝试 //匹配次数达到2次,不再对本钱包中的其他地址进行匹配尝试
bizlog.Debug("addDelPrivacyTxsFromBlock", "txhash", txhashstr, "address", *info.Addr, "totalUtxosLeft", totalUtxosLeft, "matchedCount", matchedCount) bizlog.Debug("addDelPrivacyTxsFromBlock", "txhash", txhashstr, "address", *info.Addr, "totalUtxosLeft", totalUtxosLeft, "matchedCount", matchedCount)
param := &buildStoreWalletTxDetailParam{ param := &buildStoreWalletTxDetailParam{
assetExec: assetExec,
tokenname: tokenname, tokenname: tokenname,
block: block, block: block,
tx: tx, tx: tx,
...@@ -1185,6 +1187,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1185,6 +1187,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
} }
//该交易正常执行完毕,删除对其的关注 //该交易正常执行完毕,删除对其的关注
param := &buildStoreWalletTxDetailParam{ param := &buildStoreWalletTxDetailParam{
assetExec: assetExec,
tokenname: tokenname, tokenname: tokenname,
block: block, block: block,
tx: tx, tx: tx,
...@@ -1204,6 +1207,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in ...@@ -1204,6 +1207,7 @@ func (policy *privacyPolicy) addDelPrivacyTxsFromBlock(tx *types.Transaction, in
for _, ftxo := range stxosInOneTx { for _, ftxo := range stxosInOneTx {
if ftxo.Txhash == txhashstr { if ftxo.Txhash == txhashstr {
param := &buildStoreWalletTxDetailParam{ param := &buildStoreWalletTxDetailParam{
assetExec: assetExec,
tokenname: tokenname, tokenname: tokenname,
block: block, block: block,
tx: tx, tx: tx,
......
...@@ -171,6 +171,7 @@ func (policy *privacyPolicy) SignTransaction(key crypto.PrivKey, req *types.ReqS ...@@ -171,6 +171,7 @@ func (policy *privacyPolicy) SignTransaction(key crypto.PrivKey, req *types.ReqS
} }
type buildStoreWalletTxDetailParam struct { type buildStoreWalletTxDetailParam struct {
assetExec string
tokenname string tokenname string
block *types.BlockDetail block *types.BlockDetail
tx *types.Transaction tx *types.Transaction
......
...@@ -399,7 +399,7 @@ func Test_PrivacyAccountInfo(t *testing.T) { ...@@ -399,7 +399,7 @@ func Test_PrivacyAccountInfo(t *testing.T) {
mock.init() mock.init()
testCases := []struct { testCases := []struct {
req *ty.ReqPPrivacyAccount req *ty.ReqPrivacyAccount
needReply *ty.ReplyPrivacyAccount needReply *ty.ReplyPrivacyAccount
needError error needError error
}{ }{
...@@ -407,7 +407,7 @@ func Test_PrivacyAccountInfo(t *testing.T) { ...@@ -407,7 +407,7 @@ func Test_PrivacyAccountInfo(t *testing.T) {
needError: types.ErrInvalidParam, needError: types.ErrInvalidParam,
}, },
{ {
req: &ty.ReqPPrivacyAccount{ req: &ty.ReqPrivacyAccount{
Addr: testAddrs[0], Addr: testAddrs[0],
Token: types.BTY, Token: types.BTY,
Displaymode: 0, Displaymode: 0,
......
...@@ -151,14 +151,14 @@ func (store *privacyStore) setWalletAccountPrivacy(addr string, privacy *privacy ...@@ -151,14 +151,14 @@ func (store *privacyStore) setWalletAccountPrivacy(addr string, privacy *privacy
return nil return nil
} }
func (store *privacyStore) listAvailableUTXOs(token, addr string) ([]*privacytypes.PrivacyDBStore, error) { func (store *privacyStore) listAvailableUTXOs(assetExec, token, addr string) ([]*privacytypes.PrivacyDBStore, error) {
if 0 == len(addr) { if 0 == len(addr) {
bizlog.Error("listWalletPrivacyAccount addr is nil") bizlog.Error("listWalletPrivacyAccount addr is nil")
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
list := store.NewListHelper() list := store.NewListHelper()
onetimeAccbytes := list.PrefixScan(calcPrivacyUTXOPrefix4Addr(token, addr)) onetimeAccbytes := list.PrefixScan(calcPrivacyUTXOPrefix4Addr(assetExec, token, addr))
if len(onetimeAccbytes) == 0 { if len(onetimeAccbytes) == 0 {
bizlog.Error("listWalletPrivacyAccount ", "addr not exist", addr) bizlog.Error("listWalletPrivacyAccount ", "addr not exist", addr)
return nil, nil return nil, nil
...@@ -182,13 +182,13 @@ func (store *privacyStore) listAvailableUTXOs(token, addr string) ([]*privacytyp ...@@ -182,13 +182,13 @@ func (store *privacyStore) listAvailableUTXOs(token, addr string) ([]*privacytyp
return privacyDBStoreSlice, nil return privacyDBStoreSlice, nil
} }
func (store *privacyStore) listFrozenUTXOs(token, addr string) ([]*privacytypes.FTXOsSTXOsInOneTx, error) { func (store *privacyStore) listFrozenUTXOs(assetExec, token, addr string) ([]*privacytypes.FTXOsSTXOsInOneTx, error) {
if 0 == len(addr) { if 0 == len(addr) {
bizlog.Error("listFrozenUTXOs addr is nil") bizlog.Error("listFrozenUTXOs addr is nil")
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
list := store.NewListHelper() list := store.NewListHelper()
values := list.List(calcFTXOsKeyPrefix(token, addr), nil, 0, 0) values := list.List(calcFTXOsKeyPrefix(assetExec, token, addr), nil, 0, 0)
if len(values) == 0 { if len(values) == 0 {
bizlog.Error("listFrozenUTXOs ", "addr not exist", addr) bizlog.Error("listFrozenUTXOs ", "addr not exist", addr)
return nil, nil return nil, nil
...@@ -227,9 +227,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -227,9 +227,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
if len(param.Seedtxhash) == 0 { if len(param.Seedtxhash) == 0 {
var keyPrefix []byte var keyPrefix []byte
if param.SendRecvFlag == sendTx { if param.SendRecvFlag == sendTx {
keyPrefix = calcSendPrivacyTxKey(param.Tokenname, param.Address, "") keyPrefix = calcSendPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, "")
} else { } else {
keyPrefix = calcRecvPrivacyTxKey(param.Tokenname, param.Address, "") keyPrefix = calcRecvPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, "")
} }
txkeybytes := list.IteratorScanFromLast(keyPrefix, param.Count) txkeybytes := list.IteratorScanFromLast(keyPrefix, param.Count)
for _, keybyte := range txkeybytes { for _, keybyte := range txkeybytes {
...@@ -248,9 +248,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -248,9 +248,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
list := store.NewListHelper() list := store.NewListHelper()
var txkeybytes [][]byte var txkeybytes [][]byte
if param.SendRecvFlag == sendTx { if param.SendRecvFlag == sendTx {
txkeybytes = list.IteratorScan([]byte(SendPrivacyTx), calcSendPrivacyTxKey(param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction) txkeybytes = list.IteratorScan([]byte(SendPrivacyTx), calcSendPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction)
} else { } else {
txkeybytes = list.IteratorScan([]byte(RecvPrivacyTx), calcRecvPrivacyTxKey(param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction) txkeybytes = list.IteratorScan([]byte(RecvPrivacyTx), calcRecvPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction)
} }
for _, keybyte := range txkeybytes { for _, keybyte := range txkeybytes {
value, err := store.Get(keybyte) value, err := store.Get(keybyte)
...@@ -287,9 +287,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -287,9 +287,9 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
return txDetails, nil return txDetails, nil
} }
func (store *privacyStore) getPrivacyTokenUTXOs(token, addr string) (*walletUTXOs, error) { func (store *privacyStore) getPrivacyTokenUTXOs(assetExec, token, addr string) (*walletUTXOs, error) {
list := store.NewListHelper() list := store.NewListHelper()
prefix := calcPrivacyUTXOPrefix4Addr(token, addr) prefix := calcPrivacyUTXOPrefix4Addr(assetExec, token, addr)
values := list.List(prefix, nil, 0, 0) values := list.List(prefix, nil, 0, 0)
wutxos := new(walletUTXOs) wutxos := new(walletUTXOs)
if len(values) == 0 { if len(values) == 0 {
...@@ -330,11 +330,16 @@ func (store *privacyStore) getPrivacyTokenUTXOs(token, addr string) (*walletUTXO ...@@ -330,11 +330,16 @@ func (store *privacyStore) getPrivacyTokenUTXOs(token, addr string) (*walletUTXO
//calcKey4UTXOsSpentInTx------>types.FTXOsSTXOsInOneTx,将当前交易的所有花费的utxo进行打包,设置为ftxo,同时通过支付交易hash索引 //calcKey4UTXOsSpentInTx------>types.FTXOsSTXOsInOneTx,将当前交易的所有花费的utxo进行打包,设置为ftxo,同时通过支付交易hash索引
//calcKey4FTXOsInTx----------->calcKey4UTXOsSpentInTx,创建该交易冻结的所有的utxo的信息 //calcKey4FTXOsInTx----------->calcKey4UTXOsSpentInTx,创建该交易冻结的所有的utxo的信息
//状态转移,将utxo转移至ftxo,同时记录该生成tx的花费的utxo,这样在确认执行成功之后就可以快速将相应的FTXO转换成STXO //状态转移,将utxo转移至ftxo,同时记录该生成tx的花费的utxo,这样在确认执行成功之后就可以快速将相应的FTXO转换成STXO
func (store *privacyStore) moveUTXO2FTXO(expire int64, token, sender, txhash string, selectedUtxos []*txOutputInfo) { func (store *privacyStore) moveUTXO2FTXO(expire int64, assetExec, token, sender, txhash string, selectedUtxos []*txOutputInfo) {
FTXOsInOneTx := &privacytypes.FTXOsSTXOsInOneTx{} FTXOsInOneTx := &privacytypes.FTXOsSTXOsInOneTx{
AssetExec: assetExec,
Tokenname: token,
Sender: sender,
Txhash: txhash,
}
newbatch := store.NewBatch(true) newbatch := store.NewBatch(true)
for _, txOutputInfo := range selectedUtxos { for _, txOutputInfo := range selectedUtxos {
key := calcUTXOKey4TokenAddr(token, sender, hex.EncodeToString(txOutputInfo.utxoGlobalIndex.Txhash), int(txOutputInfo.utxoGlobalIndex.Outindex)) key := calcUTXOKey4TokenAddr(assetExec, token, sender, hex.EncodeToString(txOutputInfo.utxoGlobalIndex.Txhash), int(txOutputInfo.utxoGlobalIndex.Outindex))
newbatch.Delete(key) newbatch.Delete(key)
utxo := &privacytypes.UTXO{ utxo := &privacytypes.UTXO{
Amount: txOutputInfo.amount, Amount: txOutputInfo.amount,
...@@ -345,9 +350,6 @@ func (store *privacyStore) moveUTXO2FTXO(expire int64, token, sender, txhash str ...@@ -345,9 +350,6 @@ func (store *privacyStore) moveUTXO2FTXO(expire int64, token, sender, txhash str
} }
FTXOsInOneTx.Utxos = append(FTXOsInOneTx.Utxos, utxo) FTXOsInOneTx.Utxos = append(FTXOsInOneTx.Utxos, utxo)
} }
FTXOsInOneTx.Tokenname = token
FTXOsInOneTx.Sender = sender
FTXOsInOneTx.Txhash = txhash
FTXOsInOneTx.SetExpire(expire) FTXOsInOneTx.SetExpire(expire)
//设置在该交易中花费的UTXO //设置在该交易中花费的UTXO
key1 := calcKey4UTXOsSpentInTx(txhash) key1 := calcKey4UTXOsSpentInTx(txhash)
...@@ -355,7 +357,7 @@ func (store *privacyStore) moveUTXO2FTXO(expire int64, token, sender, txhash str ...@@ -355,7 +357,7 @@ func (store *privacyStore) moveUTXO2FTXO(expire int64, token, sender, txhash str
newbatch.Set(key1, value1) newbatch.Set(key1, value1)
//设置ftxo的key,使其能够方便地获取到对应的交易花费的utxo //设置ftxo的key,使其能够方便地获取到对应的交易花费的utxo
key2 := calcKey4FTXOsInTx(token, sender, txhash) key2 := calcKey4FTXOsInTx(assetExec, token, sender, txhash)
value2 := key1 value2 := key1
newbatch.Set(key2, value2) newbatch.Set(key2, value2)
...@@ -407,11 +409,11 @@ func (store *privacyStore) getRescanUtxosFlag4Addr(req *privacytypes.ReqRescanUt ...@@ -407,11 +409,11 @@ func (store *privacyStore) getRescanUtxosFlag4Addr(req *privacytypes.ReqRescanUt
return &repRescanUtxos, nil return &repRescanUtxos, nil
} }
func (store *privacyStore) saveREscanUTXOsAddresses(addrs []string) { func (store *privacyStore) saveREscanUTXOsAddresses(addrs []string, scanFlag int32) {
newbatch := store.NewBatch(true) newbatch := store.NewBatch(true)
for _, addr := range addrs { for _, addr := range addrs {
data := &types.Int64{ data := &types.Int64{
Data: int64(privacytypes.UtxoFlagNoScan), Data: int64(scanFlag),
} }
value := types.Encode(data) value := types.Encode(data)
newbatch.Set(calcRescanUtxosFlagKey(addr), value) newbatch.Set(calcRescanUtxosFlagKey(addr), value)
...@@ -457,9 +459,7 @@ func (store *privacyStore) updateScanInputUTXOs(utxoGlobalIndexs []*privacytypes ...@@ -457,9 +459,7 @@ func (store *privacyStore) updateScanInputUTXOs(utxoGlobalIndexs []*privacytypes
} }
newbatch := store.NewBatch(true) newbatch := store.NewBatch(true)
var utxos []*privacytypes.UTXO var utxos []*privacytypes.UTXO
var owner string var owner, token, txhash, assetExec string
var token string
var txhash string
for _, utxoGlobal := range utxoGlobalIndexs { for _, utxoGlobal := range utxoGlobalIndexs {
accPrivacy, err := store.isUTXOExist(hex.EncodeToString(utxoGlobal.Txhash), int(utxoGlobal.Outindex)) accPrivacy, err := store.isUTXOExist(hex.EncodeToString(utxoGlobal.Txhash), int(utxoGlobal.Outindex))
if err == nil && accPrivacy != nil { if err == nil && accPrivacy != nil {
...@@ -479,28 +479,29 @@ func (store *privacyStore) updateScanInputUTXOs(utxoGlobalIndexs []*privacytypes ...@@ -479,28 +479,29 @@ func (store *privacyStore) updateScanInputUTXOs(utxoGlobalIndexs []*privacytypes
newbatch.Delete(key) newbatch.Delete(key)
} }
if len(utxos) > 0 { if len(utxos) > 0 {
store.moveUTXO2STXO(owner, token, txhash, utxos, newbatch) store.moveUTXO2STXO(assetExec, owner, token, txhash, utxos, newbatch)
} }
newbatch.Write() newbatch.Write()
} }
func (store *privacyStore) moveUTXO2STXO(owner, token, txhash string, utxos []*privacytypes.UTXO, newbatch db.Batch) { func (store *privacyStore) moveUTXO2STXO(assetExec, owner, token, txhash string, utxos []*privacytypes.UTXO, newbatch db.Batch) {
if len(utxos) == 0 { if len(utxos) == 0 {
return return
} }
FTXOsInOneTx := &privacytypes.FTXOsSTXOsInOneTx{} FTXOsInOneTx := &privacytypes.FTXOsSTXOsInOneTx{
AssetExec: assetExec,
FTXOsInOneTx.Utxos = utxos Tokenname: token,
FTXOsInOneTx.Sender = owner Sender: owner,
FTXOsInOneTx.Tokenname = token Txhash: txhash,
FTXOsInOneTx.Txhash = txhash Utxos: utxos,
}
for _, utxo := range utxos { for _, utxo := range utxos {
Txhash := utxo.UtxoBasic.UtxoGlobalIndex.Txhash Txhash := utxo.UtxoBasic.UtxoGlobalIndex.Txhash
Outindex := utxo.UtxoBasic.UtxoGlobalIndex.Outindex Outindex := utxo.UtxoBasic.UtxoGlobalIndex.Outindex
//删除存在的UTXO索引 //删除存在的UTXO索引
key := calcUTXOKey4TokenAddr(token, owner, hex.EncodeToString(Txhash), int(Outindex)) key := calcUTXOKey4TokenAddr(assetExec, token, owner, hex.EncodeToString(Txhash), int(Outindex))
newbatch.Delete(key) newbatch.Delete(key)
} }
...@@ -515,7 +516,7 @@ func (store *privacyStore) moveUTXO2STXO(owner, token, txhash string, utxos []*p ...@@ -515,7 +516,7 @@ func (store *privacyStore) moveUTXO2STXO(owner, token, txhash string, utxos []*p
newbatch.Set(key2, value2) newbatch.Set(key2, value2)
// 在此处加入stxo-token-addr-txhash 作为key,便于查找花费出去交易 // 在此处加入stxo-token-addr-txhash 作为key,便于查找花费出去交易
key3 := calcSTXOTokenAddrTxKey(FTXOsInOneTx.Tokenname, FTXOsInOneTx.Sender, FTXOsInOneTx.Txhash) key3 := calcSTXOTokenAddrTxKey(assetExec, FTXOsInOneTx.Tokenname, FTXOsInOneTx.Sender, FTXOsInOneTx.Txhash)
value3 := key1 value3 := key1
newbatch.Set(key3, value3) newbatch.Set(key3, value3)
...@@ -555,21 +556,28 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti ...@@ -555,21 +556,28 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti
var RpubKey []byte var RpubKey []byte
var privacyOutput *privacytypes.PrivacyOutput var privacyOutput *privacytypes.PrivacyOutput
var privacyInput *privacytypes.PrivacyInput var privacyInput *privacytypes.PrivacyInput
var tokenname string var tokenname, assetExec string
if privacytypes.ActionPublic2Privacy == privateAction.Ty { if privacytypes.ActionPublic2Privacy == privateAction.Ty {
RpubKey = privateAction.GetPublic2Privacy().GetOutput().GetRpubKeytx() RpubKey = privateAction.GetPublic2Privacy().GetOutput().GetRpubKeytx()
privacyOutput = privateAction.GetPublic2Privacy().GetOutput() privacyOutput = privateAction.GetPublic2Privacy().GetOutput()
tokenname = privateAction.GetPublic2Privacy().GetTokenname() tokenname = privateAction.GetPublic2Privacy().GetTokenname()
assetExec = privateAction.GetPublic2Privacy().GetAssetExec()
} else if privacytypes.ActionPrivacy2Privacy == privateAction.Ty { } else if privacytypes.ActionPrivacy2Privacy == privateAction.Ty {
RpubKey = privateAction.GetPrivacy2Privacy().GetOutput().GetRpubKeytx() RpubKey = privateAction.GetPrivacy2Privacy().GetOutput().GetRpubKeytx()
privacyOutput = privateAction.GetPrivacy2Privacy().GetOutput() privacyOutput = privateAction.GetPrivacy2Privacy().GetOutput()
tokenname = privateAction.GetPrivacy2Privacy().GetTokenname() tokenname = privateAction.GetPrivacy2Privacy().GetTokenname()
privacyInput = privateAction.GetPrivacy2Privacy().GetInput() privacyInput = privateAction.GetPrivacy2Privacy().GetInput()
assetExec = privateAction.GetPrivacy2Privacy().GetAssetExec()
} else if privacytypes.ActionPrivacy2Public == privateAction.Ty { } else if privacytypes.ActionPrivacy2Public == privateAction.Ty {
RpubKey = privateAction.GetPrivacy2Public().GetOutput().GetRpubKeytx() RpubKey = privateAction.GetPrivacy2Public().GetOutput().GetRpubKeytx()
privacyOutput = privateAction.GetPrivacy2Public().GetOutput() privacyOutput = privateAction.GetPrivacy2Public().GetOutput()
tokenname = privateAction.GetPrivacy2Public().GetTokenname() tokenname = privateAction.GetPrivacy2Public().GetTokenname()
privacyInput = privateAction.GetPrivacy2Public().GetInput() privacyInput = privateAction.GetPrivacy2Public().GetInput()
assetExec = privateAction.GetPrivacy2Public().GetAssetExec()
}
if assetExec == "" {
assetExec = "coins"
} }
//处理output //处理output
...@@ -607,6 +615,7 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti ...@@ -607,6 +615,7 @@ func (store *privacyStore) selectCurrentWalletPrivacyTx(txDetal *types.Transacti
} }
info2store := &privacytypes.PrivacyDBStore{ info2store := &privacytypes.PrivacyDBStore{
AssetExec: assetExec,
Txhash: txhashInbytes, Txhash: txhashInbytes,
Tokenname: tokenname, Tokenname: tokenname,
Amount: output.Amount, Amount: output.Amount,
...@@ -680,7 +689,7 @@ func (store *privacyStore) setUTXO(addr, txhash *string, outindex int, dbStore * ...@@ -680,7 +689,7 @@ func (store *privacyStore) setUTXO(addr, txhash *string, outindex int, dbStore *
utxoKey := calcUTXOKey(*txhash, outindex) utxoKey := calcUTXOKey(*txhash, outindex)
bizlog.Debug("setUTXO", "addr", *addr, "tx with hash", *txhash, "amount:", dbStore.Amount/types.Coin) bizlog.Debug("setUTXO", "addr", *addr, "tx with hash", *txhash, "amount:", dbStore.Amount/types.Coin)
newbatch.Set(calcUTXOKey4TokenAddr(dbStore.Tokenname, *addr, *txhash, outindex), utxoKey) newbatch.Set(calcUTXOKey4TokenAddr(dbStore.AssetExec, dbStore.Tokenname, *addr, *txhash, outindex), utxoKey)
newbatch.Set(utxoKey, privacyStorebyte) newbatch.Set(utxoKey, privacyStorebyte)
return nil return nil
} }
...@@ -697,12 +706,12 @@ func (store *privacyStore) storeScanPrivacyInputUTXO(utxoGlobalIndexs []*privacy ...@@ -697,12 +706,12 @@ func (store *privacyStore) storeScanPrivacyInputUTXO(utxoGlobalIndexs []*privacy
} }
} }
func (store *privacyStore) listSpendUTXOs(token, addr string) (*privacytypes.UTXOHaveTxHashs, error) { func (store *privacyStore) listSpendUTXOs(assetExec, token, addr string) (*privacytypes.UTXOHaveTxHashs, error) {
if 0 == len(addr) { if 0 == len(addr) {
bizlog.Error("listSpendUTXOs addr is nil") bizlog.Error("listSpendUTXOs addr is nil")
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
prefix := calcSTXOPrefix4Addr(token, addr) prefix := calcSTXOPrefix4Addr(assetExec, token, addr)
list := store.NewListHelper() list := store.NewListHelper()
Key4FTXOsInTxs := list.PrefixScan(prefix) Key4FTXOsInTxs := list.PrefixScan(prefix)
//if len(Key4FTXOsInTxs) == 0 { //if len(Key4FTXOsInTxs) == 0 {
...@@ -785,10 +794,10 @@ func (store *privacyStore) getFTXOlist() ([]*privacytypes.FTXOsSTXOsInOneTx, [][ ...@@ -785,10 +794,10 @@ func (store *privacyStore) getFTXOlist() ([]*privacytypes.FTXOsSTXOsInOneTx, [][
revertFTXOTxs, _, _ := store.getWalletFtxoStxo(RevertSendtx) revertFTXOTxs, _, _ := store.getWalletFtxoStxo(RevertSendtx)
var keys [][]byte var keys [][]byte
for _, ftxo := range curFTXOTxs { for _, ftxo := range curFTXOTxs {
keys = append(keys, calcKey4FTXOsInTx(ftxo.Tokenname, ftxo.Sender, ftxo.Txhash)) keys = append(keys, calcKey4FTXOsInTx(ftxo.AssetExec, ftxo.Tokenname, ftxo.Sender, ftxo.Txhash))
} }
for _, ftxo := range revertFTXOTxs { for _, ftxo := range revertFTXOTxs {
keys = append(keys, calcRevertSendTxKey(ftxo.Tokenname, ftxo.Sender, ftxo.Txhash)) keys = append(keys, calcRevertSendTxKey(ftxo.AssetExec, ftxo.Tokenname, ftxo.Sender, ftxo.Txhash))
} }
curFTXOTxs = append(curFTXOTxs, revertFTXOTxs...) curFTXOTxs = append(curFTXOTxs, revertFTXOTxs...)
return curFTXOTxs, keys return curFTXOTxs, keys
...@@ -826,7 +835,7 @@ func (store *privacyStore) moveFTXO2STXO(key1 []byte, txhash string, newbatch db ...@@ -826,7 +835,7 @@ func (store *privacyStore) moveFTXO2STXO(key1 []byte, txhash string, newbatch db
if nil != err { if nil != err {
bizlog.Error("moveFTXO2STXO", "Failed to decode FTXOsSTXOsInOneTx for value", value) bizlog.Error("moveFTXO2STXO", "Failed to decode FTXOsSTXOsInOneTx for value", value)
} }
key3 := calcSTXOTokenAddrTxKey(ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, ftxosInOneTx.Txhash) key3 := calcSTXOTokenAddrTxKey(ftxosInOneTx.AssetExec, ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, ftxosInOneTx.Txhash)
newbatch.Set(key3, value2) newbatch.Set(key3, value2)
newbatch.Write() newbatch.Write()
...@@ -872,7 +881,7 @@ func (store *privacyStore) moveFTXO2UTXO(key1 []byte, newbatch db.Batch) { ...@@ -872,7 +881,7 @@ func (store *privacyStore) moveFTXO2UTXO(key1 []byte, newbatch db.Batch) {
for _, ftxo := range ftxosInOneTx.Utxos { for _, ftxo := range ftxosInOneTx.Utxos {
utxohash := hex.EncodeToString(ftxo.UtxoBasic.UtxoGlobalIndex.Txhash) utxohash := hex.EncodeToString(ftxo.UtxoBasic.UtxoGlobalIndex.Txhash)
outindex := int(ftxo.UtxoBasic.UtxoGlobalIndex.Outindex) outindex := int(ftxo.UtxoBasic.UtxoGlobalIndex.Outindex)
key := calcUTXOKey4TokenAddr(ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, utxohash, outindex) key := calcUTXOKey4TokenAddr(ftxosInOneTx.AssetExec, ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, utxohash, outindex)
value := calcUTXOKey(utxohash, int(ftxo.UtxoBasic.UtxoGlobalIndex.Outindex)) value := calcUTXOKey(utxohash, int(ftxo.UtxoBasic.UtxoGlobalIndex.Outindex))
bizlog.Debug("moveFTXO2UTXO", "addr", ftxosInOneTx.Sender, "tx with hash", utxohash, "amount", ftxo.Amount/types.Coin) bizlog.Debug("moveFTXO2UTXO", "addr", ftxosInOneTx.Sender, "tx with hash", utxohash, "amount", ftxo.Amount/types.Coin)
newbatch.Set(key, value) newbatch.Set(key, value)
...@@ -887,25 +896,25 @@ func (store *privacyStore) moveFTXO2UTXO(key1 []byte, newbatch db.Batch) { ...@@ -887,25 +896,25 @@ func (store *privacyStore) moveFTXO2UTXO(key1 []byte, newbatch db.Batch) {
// 4.清除UTXO信息 // 4.清除UTXO信息
// addr 使用UTXO的地址 // addr 使用UTXO的地址
// txhash 使用UTXO的交易哈希,没有0x // txhash 使用UTXO的交易哈希,没有0x
func (store *privacyStore) unsetUTXO(addr, txhash *string, outindex int, token string, newbatch db.Batch) error { func (store *privacyStore) unsetUTXO(assetExec, token, addr, txhash string, outindex int, newbatch db.Batch) error {
if 0 == len(*addr) || 0 == len(*txhash) || outindex < 0 || len(token) <= 0 { if 0 == len(addr) || 0 == len(txhash) || outindex < 0 || len(token) <= 0 {
bizlog.Error("unsetUTXO", "InvalidParam addr", *addr, "txhash", *txhash, "outindex", outindex, "token", token) bizlog.Error("unsetUTXO", "InvalidParam addr", addr, "txhash", txhash, "outindex", outindex, "token", token)
return types.ErrInvalidParam return types.ErrInvalidParam
} }
// 1.删除可用UTXO列表的索引关系 // 1.删除可用UTXO列表的索引关系
ftxokey := calcUTXOKey(*txhash, outindex) ftxokey := calcUTXOKey(txhash, outindex)
newbatch.Delete(ftxokey) newbatch.Delete(ftxokey)
// 2.删除冻结UTXO列表的索引关系 // 2.删除冻结UTXO列表的索引关系
ftxokey = calcKey4FTXOsInTx(token, *addr, *txhash) ftxokey = calcKey4FTXOsInTx(assetExec, token, addr, txhash)
newbatch.Delete(ftxokey) newbatch.Delete(ftxokey)
// 3.删除回退冻结UTXO列表中的索引关系 // 3.删除回退冻结UTXO列表中的索引关系
ftxokey = calcRevertSendTxKey(token, *addr, *txhash) ftxokey = calcRevertSendTxKey(assetExec, token, addr, txhash)
newbatch.Delete(ftxokey) newbatch.Delete(ftxokey)
// 4.清除可用UTXO索引信息 // 4.清除可用UTXO索引信息
utxokey := calcUTXOKey4TokenAddr(token, *addr, *txhash, outindex) utxokey := calcUTXOKey4TokenAddr(assetExec, token, addr, txhash, outindex)
newbatch.Delete(utxokey) newbatch.Delete(utxokey)
bizlog.Debug("PrivacyTrading unsetUTXO", "addr", *addr, "tx with hash", *txhash, "outindex", outindex) bizlog.Debug("PrivacyTrading unsetUTXO", "addr", addr, "tx with hash", txhash, "outindex", outindex)
return nil return nil
} }
...@@ -938,11 +947,11 @@ func (store *privacyStore) moveSTXO2FTXO(tx *types.Transaction, txhash string, n ...@@ -938,11 +947,11 @@ func (store *privacyStore) moveSTXO2FTXO(tx *types.Transaction, txhash string, n
} }
//删除stxo-token-addr-txhash key //删除stxo-token-addr-txhash key
key3 := calcSTXOTokenAddrTxKey(ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, ftxosInOneTx.Txhash) key3 := calcSTXOTokenAddrTxKey(ftxosInOneTx.AssetExec, ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, ftxosInOneTx.Txhash)
newbatch.Delete(key3) newbatch.Delete(key3)
//设置在该交易中花费的UTXO //设置在该交易中花费的UTXO
key1 := calcRevertSendTxKey(ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, txhash) key1 := calcRevertSendTxKey(ftxosInOneTx.AssetExec, ftxosInOneTx.Tokenname, ftxosInOneTx.Sender, txhash)
value1 := value2 value1 := value2
newbatch.Set(key1, value1) newbatch.Set(key1, value1)
bizlog.Info("moveSTXO2FTXO", "txhash ", txhash) bizlog.Info("moveSTXO2FTXO", "txhash ", txhash)
......
...@@ -73,12 +73,12 @@ func testStore_unsetUTXO(t *testing.T) { ...@@ -73,12 +73,12 @@ func testStore_unsetUTXO(t *testing.T) {
addr := "" addr := ""
txhash := "" txhash := ""
batch := store.NewBatch(true) batch := store.NewBatch(true)
err := store.unsetUTXO(&addr, &txhash, 0, "", batch) err := store.unsetUTXO("", "", addr, txhash, 0, batch)
assert.NotNil(t, err) assert.NotNil(t, err)
addr = "16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp" addr = "16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp"
txhash = "TXHASH" txhash = "TXHASH"
err = store.unsetUTXO(&addr, &txhash, 0, "BTY", batch) err = store.unsetUTXO("coins", "BTY", addr, txhash, 0, batch)
assert.NoError(t, err) assert.NoError(t, err)
} }
...@@ -174,10 +174,11 @@ func testStore_moveUTXO2FTXO(t *testing.T) { ...@@ -174,10 +174,11 @@ func testStore_moveUTXO2FTXO(t *testing.T) {
func testStore_getPrivacyTokenUTXOs(t *testing.T) { func testStore_getPrivacyTokenUTXOs(t *testing.T) {
store := createStore(t) store := createStore(t)
utxos, err := store.getPrivacyTokenUTXOs("", "") utxos, err := store.getPrivacyTokenUTXOs("", "", "")
assert.Nil(t, err) assert.Nil(t, err)
assert.NotNil(t, utxos) assert.NotNil(t, utxos)
assetExec := "coins"
token := "BTY" token := "BTY"
addr := "getPrivacyTokenUTXOs" addr := "getPrivacyTokenUTXOs"
...@@ -186,12 +187,12 @@ func testStore_getPrivacyTokenUTXOs(t *testing.T) { ...@@ -186,12 +187,12 @@ func testStore_getPrivacyTokenUTXOs(t *testing.T) {
bt, err := proto.Marshal(data) bt, err := proto.Marshal(data)
assert.NoError(t, err) assert.NoError(t, err)
key := fmt.Sprintf("Key%d", n) key := fmt.Sprintf("Key%d", n)
err = store.Set(calcUTXOKey4TokenAddr(token, addr, "txhash", n), []byte(key)) err = store.Set(calcUTXOKey4TokenAddr(assetExec, token, addr, "txhash", n), []byte(key))
assert.NoError(t, err) assert.NoError(t, err)
err = store.Set([]byte(key), bt) err = store.Set([]byte(key), bt)
assert.NoError(t, err) assert.NoError(t, err)
} }
utxos, err = store.getPrivacyTokenUTXOs(token, addr) utxos, err = store.getPrivacyTokenUTXOs(assetExec, token, addr)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, 5, len(utxos.utxos)) assert.Equal(t, 5, len(utxos.utxos))
} }
...@@ -209,27 +210,28 @@ func testStore_getWalletPrivacyTxDetails(t *testing.T) { ...@@ -209,27 +210,28 @@ func testStore_getWalletPrivacyTxDetails(t *testing.T) {
func testStore_listFrozenUTXOs(t *testing.T) { func testStore_listFrozenUTXOs(t *testing.T) {
store := createStore(t) store := createStore(t)
assetExec := "coins"
token := "BTY" token := "BTY"
addr := "26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTq" addr := "26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTq"
txs, err := store.listFrozenUTXOs("", "") txs, err := store.listFrozenUTXOs("", "", "")
assert.Nil(t, txs) assert.Nil(t, txs)
assert.NotNil(t, err) assert.NotNil(t, err)
txs, err = store.listFrozenUTXOs(token, addr) txs, err = store.listFrozenUTXOs(assetExec, token, addr)
assert.Nil(t, txs) assert.Nil(t, txs)
assert.Nil(t, err) assert.Nil(t, err)
tx := &pt.FTXOsSTXOsInOneTx{Tokenname: "BTY"} tx := &pt.FTXOsSTXOsInOneTx{Tokenname: "BTY"}
bt, err := proto.Marshal(tx) bt, err := proto.Marshal(tx)
assert.NoError(t, err) assert.NoError(t, err)
err = store.Set(calcKey4FTXOsInTx(token, addr, "TXHASH"), bt) err = store.Set(calcKey4FTXOsInTx(assetExec, token, addr, "TXHASH"), bt)
assert.NoError(t, err) assert.NoError(t, err)
txs, err = store.listFrozenUTXOs(token, addr) txs, err = store.listFrozenUTXOs(assetExec, token, addr)
assert.Nil(t, txs) assert.Nil(t, txs)
assert.NotNil(t, err) assert.NotNil(t, err)
err = store.Set(calcKey4FTXOsInTx(token, addr, "TXHASH"), []byte("DataKey")) err = store.Set(calcKey4FTXOsInTx(assetExec, token, addr, "TXHASH"), []byte("DataKey"))
assert.NoError(t, err) assert.NoError(t, err)
err = store.Set([]byte("DataKey"), bt) err = store.Set([]byte("DataKey"), bt)
assert.NoError(t, err) assert.NoError(t, err)
txs, err = store.listFrozenUTXOs(token, addr) txs, err = store.listFrozenUTXOs(assetExec, token, addr)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, 1, len(txs)) assert.Equal(t, 1, len(txs))
assert.Equal(t, true, proto.Equal(tx, txs[0])) assert.Equal(t, true, proto.Equal(tx, txs[0]))
...@@ -237,27 +239,29 @@ func testStore_listFrozenUTXOs(t *testing.T) { ...@@ -237,27 +239,29 @@ func testStore_listFrozenUTXOs(t *testing.T) {
func testStore_listAvailableUTXOs(t *testing.T) { func testStore_listAvailableUTXOs(t *testing.T) {
store := createStore(t) store := createStore(t)
utxos, err := store.listAvailableUTXOs("", "") utxos, err := store.listAvailableUTXOs("", "", "")
assert.Nil(t, utxos) assert.Nil(t, utxos)
assert.Equal(t, err, types.ErrInvalidParam) assert.Equal(t, err, types.ErrInvalidParam)
addr := "16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTq" addr := "16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTq"
assetExec := "coins"
token := "BTY" token := "BTY"
txhash := "123456" txhash := "123456"
utxo := &pt.PrivacyDBStore{ utxo := &pt.PrivacyDBStore{
AssetExec: assetExec,
Tokenname: "BTY", Tokenname: "BTY",
} }
key := calcUTXOKey4TokenAddr(token, addr, txhash, 0) key := calcUTXOKey4TokenAddr(assetExec, token, addr, txhash, 0)
bt, err := proto.Marshal(utxo) bt, err := proto.Marshal(utxo)
assert.NoError(t, err) assert.NoError(t, err)
err = store.Set(key, []byte("AccKey")) err = store.Set(key, []byte("AccKey"))
assert.NoError(t, err) assert.NoError(t, err)
utxos, err = store.listAvailableUTXOs(token, addr) utxos, err = store.listAvailableUTXOs(assetExec, token, addr)
assert.Nil(t, utxos) assert.Nil(t, utxos)
assert.NotNil(t, err) assert.NotNil(t, err)
err = store.Set([]byte("AccKey"), bt) err = store.Set([]byte("AccKey"), bt)
assert.NoError(t, err) assert.NoError(t, err)
utxos, err = store.listAvailableUTXOs(token, addr) utxos, err = store.listAvailableUTXOs(assetExec, token, addr)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, 1, len(utxos)) assert.Equal(t, 1, len(utxos))
assert.Equal(t, true, proto.Equal(utxo, utxos[0])) assert.Equal(t, true, proto.Equal(utxo, utxos[0]))
......
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