Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
f89f1b0a
Commit
f89f1b0a
authored
Feb 10, 2020
by
jiangpeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
privacy:update wallet utxo manage
* add utxo store key with asset exec * fix rescan nil pointer
parent
3ef9413b
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
428 additions
and
429 deletions
+428
-429
privacy.go
plugin/dapp/privacy/commands/privacy.go
+12
-4
exec.go
plugin/dapp/privacy/executor/exec.go
+6
-6
privacy.go
plugin/dapp/privacy/executor/privacy.go
+1
-2
privacy.proto
plugin/dapp/privacy/proto/privacy.proto
+11
-11
rpc.go
plugin/dapp/privacy/rpc/rpc.go
+1
-1
rpc_channel_test.go
plugin/dapp/privacy/rpc/rpc_channel_test.go
+1
-1
rpc_real_test.go
plugin/dapp/privacy/rpc/rpc_real_test.go
+1
-1
privacy.go
plugin/dapp/privacy/types/privacy.go
+7
-19
privacy.pb.go
plugin/dapp/privacy/types/privacy.pb.go
+261
-267
exec.go
plugin/dapp/privacy/wallet/exec.go
+1
-1
keys.go
plugin/dapp/privacy/wallet/keys.go
+18
-26
privacy.go
plugin/dapp/privacy/wallet/privacy.go
+27
-23
privacybizpolicy.go
plugin/dapp/privacy/wallet/privacybizpolicy.go
+1
-0
privacybizpolicy_test.go
plugin/dapp/privacy/wallet/privacybizpolicy_test.go
+2
-2
privacystore.go
plugin/dapp/privacy/wallet/privacystore.go
+59
-50
privacystore_test.go
plugin/dapp/privacy/wallet/privacystore_test.go
+19
-15
No files found.
plugin/dapp/privacy/commands/privacy.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
{
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
,
...
...
plugin/dapp/privacy/executor/exec.go
View file @
f89f1b0a
...
@@ -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
.
Ke
yOutput
)
*
ty
.
ReceiptPrivacyOutput
{
func
(
p
*
privacy
)
buildPrivacyReceiptLog
(
assetExec
,
assetSymbol
string
,
output
*
ty
.
Privac
yOutput
)
*
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
...
...
plugin/dapp/privacy/executor/privacy.go
View file @
f89f1b0a
...
@@ -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
}
}
...
...
plugin/dapp/privacy/proto/privacy.proto
View file @
f89f1b0a
...
@@ -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
{
...
...
plugin/dapp/privacy/rpc/rpc.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
,
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
...
...
plugin/dapp/privacy/rpc/rpc_channel_test.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
{
params
:=
pty
.
ReqPrivacyAccount
{
Addr
:
"1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p"
,
Addr
:
"1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p"
,
Token
:
types
.
BTY
,
Token
:
types
.
BTY
,
Displaymode
:
1
,
Displaymode
:
1
,
...
...
plugin/dapp/privacy/rpc/rpc_real_test.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
{
params
:=
pty
.
ReqPrivacyAccount
{
Addr
:
"addr"
,
Addr
:
"addr"
,
Token
:
"token"
,
Token
:
"token"
,
Displaymode
:
3
,
Displaymode
:
3
,
...
...
plugin/dapp/privacy/types/privacy.go
View file @
f89f1b0a
...
@@ -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
(
Receipt
PrivacyOutput
{}),
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"
}
}
// Get
TokenName get action token name
// Get
AssetExecSymbol get assert exec and symbol
func
(
action
*
PrivacyAction
)
Get
TokenName
()
string
{
func
(
action
*
PrivacyAction
)
Get
AssetExecSymbol
()
(
assetExec
,
assetSymbol
string
)
{
if
action
.
GetTy
()
==
ActionPublic2Privacy
&&
action
.
GetPublic2Privacy
()
!=
nil
{
if
action
.
GetTy
()
==
ActionPublic2Privacy
&&
action
.
GetPublic2Privacy
()
!=
nil
{
return
action
.
GetPublic2Privacy
()
.
GetTokenname
()
return
action
.
GetPublic2Privacy
()
.
Get
AssetExec
(),
action
.
GetPublic2Privacy
()
.
Get
Tokenname
()
}
else
if
action
.
GetTy
()
==
ActionPrivacy2Privacy
&&
action
.
GetPrivacy2Privacy
()
!=
nil
{
}
else
if
action
.
GetTy
()
==
ActionPrivacy2Privacy
&&
action
.
GetPrivacy2Privacy
()
!=
nil
{
return
action
.
GetPrivacy2Privacy
()
.
GetTokenname
()
return
action
.
GetPrivacy2Privacy
()
.
Get
AssetExec
(),
action
.
GetPrivacy2Privacy
()
.
Get
Tokenname
()
}
else
if
action
.
GetTy
()
==
ActionPrivacy2Public
&&
action
.
GetPrivacy2Public
()
!=
nil
{
}
else
if
action
.
GetTy
()
==
ActionPrivacy2Public
&&
action
.
GetPrivacy2Public
()
!=
nil
{
return
action
.
GetPrivacy2Public
()
.
GetTokenname
()
return
action
.
GetPrivacy2Public
()
.
Get
AssetExec
(),
action
.
GetPrivacy2Public
()
.
Get
Tokenname
()
}
}
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
""
}
}
plugin/dapp/privacy/types/privacy.pb.go
View file @
f89f1b0a
...
@@ -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
*
ReqP
PrivacyAccount
)
GetToken
()
string
{
func
(
m
*
ReqP
rivacyAccount
)
GetDisplaymode
()
int32
{
if
m
!=
nil
{
if
m
!=
nil
{
return
m
.
Token
return
m
.
Displaymode
}
}
return
""
return
0
}
}
func
(
m
*
ReqP
PrivacyAccount
)
GetDisplaymode
()
int32
{
func
(
m
*
ReqP
rivacyAccount
)
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
,
}
}
plugin/dapp/privacy/wallet/exec.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
)
(
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
)
...
...
plugin/dapp/privacy/wallet/keys.go
View file @
f89f1b0a
...
@@ -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交易信息
...
...
plugin/dapp/privacy/wallet/privacy.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
)
(
*
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
.
asset
Exec
,
buildInfo
.
asset
Symbol
,
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
,
asse
r
tSymbol
,
sender
,
txhash
string
,
selectedUtxos
[]
*
txOutputInfo
)
{
func
(
policy
*
privacyPolicy
)
saveFTXOInfo
(
expire
int64
,
asse
tExec
,
asse
tSymbol
,
sender
,
txhash
string
,
selectedUtxos
[]
*
txOutputInfo
)
{
//将已经作为本次交易输入的utxo进行冻结,防止产生双花交易
//将已经作为本次交易输入的utxo进行冻结,防止产生双花交易
policy
.
store
.
moveUTXO2FTXO
(
expire
,
asse
r
tSymbol
,
sender
,
txhash
,
selectedUtxos
)
policy
.
store
.
moveUTXO2FTXO
(
expire
,
asse
tExec
,
asse
tSymbol
,
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
,
...
...
plugin/dapp/privacy/wallet/privacybizpolicy.go
View file @
f89f1b0a
...
@@ -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
...
...
plugin/dapp/privacy/wallet/privacybizpolicy_test.go
View file @
f89f1b0a
...
@@ -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
.
ReqP
P
rivacyAccount
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
.
ReqP
P
rivacyAccount
{
req
:
&
ty
.
ReqPrivacyAccount
{
Addr
:
testAddrs
[
0
],
Addr
:
testAddrs
[
0
],
Token
:
types
.
BTY
,
Token
:
types
.
BTY
,
Displaymode
:
0
,
Displaymode
:
0
,
...
...
plugin/dapp/privacy/wallet/privacystore.go
View file @
f89f1b0a
...
@@ -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
(
a
ddr
,
txhash
*
string
,
outindex
int
,
token
string
,
newbatch
db
.
Batch
)
error
{
func
(
store
*
privacyStore
)
unsetUTXO
(
a
ssetExec
,
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
)
...
...
plugin/dapp/privacy/wallet/privacystore_test.go
View file @
f89f1b0a
...
@@ -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
]))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment