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