Commit f18b8d76 authored by jiangpeng's avatar jiangpeng Committed by vipwzw

privacy:update rpc PrivacyTransactionList

parent 0559134e
...@@ -14,7 +14,7 @@ privacy_CreateRawTransaction() { ...@@ -14,7 +14,7 @@ privacy_CreateRawTransaction() {
} }
privacy_GetPrivacyTxByAddr() { privacy_GetPrivacyTxByAddr() {
chain33_Http '{"method":"privacy.GetPrivacyTxByAddr","params":[{"assetExec":"coins", "tokenname":"BTY","sendRecvFlag":0,"from":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv", "direction":1, "count":1}]}' ${MAIN_HTTP} '.error|not' "$FUNCNAME" chain33_Http '{"method":"privacy.GetPrivacyTxByAddr","params":[{"assetExec":"coins", "assetSymbol":"BTY","sendRecvFlag":0,"address":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv", "direction":1, "count":1}]}' ${MAIN_HTTP} '.error|not' "$FUNCNAME"
} }
privacy_ShowPrivacyKey() { privacy_ShowPrivacyKey() {
......
...@@ -549,12 +549,12 @@ func addListPrivacyTxsFlags(cmd *cobra.Command) { ...@@ -549,12 +549,12 @@ func addListPrivacyTxsFlags(cmd *cobra.Command) {
cmd.Flags().StringP("addr", "a", "", "account address") cmd.Flags().StringP("addr", "a", "", "account address")
cmd.MarkFlagRequired("addr") cmd.MarkFlagRequired("addr")
// //
cmd.Flags().Int32P("sendrecv", "", 0, "send or recv flag (0: send, 1: recv), default 0") cmd.Flags().Int32P("sendrecv", "f", 0, "send or recv flag (0: send, 1: recv), default 0")
cmd.Flags().Int32P("count", "c", 10, "number of transactions, default 10") cmd.Flags().Int32P("count", "c", 10, "number of transactions, default 10")
cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins") cmd.Flags().StringP("exec", "e", "coins", "asset executor(coins, token, paracross), default coins")
cmd.Flags().StringP("token", "", types.BTY, "token name.(BTY supported)") cmd.Flags().StringP("symbol", "s", types.BTY, "asset sysmbol.(BTY default)")
cmd.Flags().Int32P("direction", "d", 1, "query direction (0: pre page, 1: next page), valid with seedtxhash param") cmd.Flags().Int32P("direction", "d", 1, "query direction (0: pre page, 1: next page), valid with seedtxhash param")
cmd.Flags().StringP("seedtxhash", "", "", "seed trasnaction hash") cmd.Flags().StringP("txHeightIndex", "x", "", "start tx height index string")
} }
func listPrivacyTxsFlags(cmd *cobra.Command, args []string) { func listPrivacyTxsFlags(cmd *cobra.Command, args []string) {
...@@ -563,17 +563,17 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) { ...@@ -563,17 +563,17 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) {
direction, _ := cmd.Flags().GetInt32("direction") direction, _ := cmd.Flags().GetInt32("direction")
addr, _ := cmd.Flags().GetString("addr") addr, _ := cmd.Flags().GetString("addr")
sendRecvFlag, _ := cmd.Flags().GetInt32("sendrecv") sendRecvFlag, _ := cmd.Flags().GetInt32("sendrecv")
tokenname, _ := cmd.Flags().GetString("token") symbol, _ := cmd.Flags().GetString("symbol")
seedtxhash, _ := cmd.Flags().GetString("seedtxhash") txHeightIndex, _ := cmd.Flags().GetString("txHeightIndex")
exec, _ := cmd.Flags().GetString("exec") exec, _ := cmd.Flags().GetString("exec")
params := pty.ReqPrivacyTransactionList{ params := pty.ReqPrivacyTransactionList{
AssetExec: exec, AssetExec: exec,
Tokenname: tokenname, AssetSymbol: symbol,
SendRecvFlag: sendRecvFlag, SendRecvFlag: sendRecvFlag,
Direction: direction, Direction: direction,
Count: count, Count: count,
Address: addr, Address: addr,
Seedtxhash: []byte(seedtxhash), StartTxHeightIndex: txHeightIndex,
} }
var res rpctypes.WalletTxDetails var res rpctypes.WalletTxDetails
ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.GetPrivacyTxByAddr", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.GetPrivacyTxByAddr", params, &res)
......
...@@ -344,16 +344,21 @@ message ReqCreateCacheTxKey { ...@@ -344,16 +344,21 @@ message ReqCreateCacheTxKey {
// get privacy transaction list in wallet // get privacy transaction list in wallet
message ReqPrivacyTransactionList { message ReqPrivacyTransactionList {
// support BTY
string tokenname = 1;
// 1:sendtx 2:recvtx // 1:sendtx 2:recvtx
int32 sendRecvFlag = 2; int32 sendRecvFlag = 2;
// 列表顺序,0降1升
int32 direction = 3; int32 direction = 3;
// 单次列表数量
int32 count = 4; int32 count = 4;
string from = 5; // 交易相关的地址,发送方或接收方
string address = 6; string address = 6;
bytes seedtxhash = 7; // 资产执行器
string assetExec = 8; string assetExec = 8;
// 资产符号
string assetSymbol = 9;
// 指定列表请求开始位置
string startTxHeightIndex = 10;
} }
message ReqRescanUtxos { message ReqRescanUtxos {
......
...@@ -122,12 +122,11 @@ func testShowUTXOs4SpecifiedAmount(t *testing.T, jrpc *jsonclient.JSONClient) er ...@@ -122,12 +122,11 @@ func testShowUTXOs4SpecifiedAmount(t *testing.T, jrpc *jsonclient.JSONClient) er
func testListPrivacyTxs(t *testing.T, jrpc *jsonclient.JSONClient) error { func testListPrivacyTxs(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.ReqPrivacyTransactionList{ params := pty.ReqPrivacyTransactionList{
Tokenname: types.BTY, AssetSymbol: types.BTY,
SendRecvFlag: 1, SendRecvFlag: 1,
Direction: 1, Direction: 1,
Count: 16, Count: 16,
Address: "13cS5G1BDN2YfGudsxRxr7X25yu6ZdgxMU", Address: "13cS5G1BDN2YfGudsxRxr7X25yu6ZdgxMU",
Seedtxhash: []byte("0xa64296792f90f364371e0b66fdac622080ceb7b2537ff9152e189aa9e88e61bd"),
} }
var res rpctypes.WalletTxDetails var res rpctypes.WalletTxDetails
err := jrpc.Call("privacy.GetPrivacyTxByAddr", params, &res) err := jrpc.Call("privacy.GetPrivacyTxByAddr", params, &res)
......
This diff is collapsed.
...@@ -107,9 +107,8 @@ func calcFTXOsKeyPrefix(assetExec, token, addr string) []byte { ...@@ -107,9 +107,8 @@ func calcFTXOsKeyPrefix(assetExec, token, addr string) []byte {
// calcSendPrivacyTxKey 计算以指定地址作为发送地址的交易信息索引 // calcSendPrivacyTxKey 计算以指定地址作为发送地址的交易信息索引
// addr为发送地址 // addr为发送地址
// key为通过calcTxKey(heightstr)计算出来的值 func calcSendPrivacyTxKey(assetExec, assetSymbol, addr, txHeightIndex string) []byte {
func calcSendPrivacyTxKey(assetExec, tokenname, addr, key string) []byte { return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", SendPrivacyTx, assetExec, assetSymbol, addr, txHeightIndex))
return []byte(fmt.Sprintf("%s:%s-%s-%s-%s", SendPrivacyTx, assetExec, tokenname, addr, key))
} }
// calcRecvPrivacyTxKey 计算以指定地址作为接收地址的交易信息索引 // calcRecvPrivacyTxKey 计算以指定地址作为接收地址的交易信息索引
......
...@@ -457,7 +457,7 @@ func Test_PrivacyTransactionList(t *testing.T) { ...@@ -457,7 +457,7 @@ func Test_PrivacyTransactionList(t *testing.T) {
}, },
{ {
req: &ty.ReqPrivacyTransactionList{ req: &ty.ReqPrivacyTransactionList{
Tokenname: types.BTY, AssetSymbol: types.BTY,
SendRecvFlag: 1, SendRecvFlag: 1,
Direction: 0, Direction: 0,
Count: 10, Count: 10,
......
...@@ -222,68 +222,46 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -222,68 +222,46 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
bizlog.Error("procPrivacyTransactionList", "invalid sendrecvflag ", param.SendRecvFlag) bizlog.Error("procPrivacyTransactionList", "invalid sendrecvflag ", param.SendRecvFlag)
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
var txbytes [][]byte
list := store.NewListHelper() list := store.NewListHelper()
if len(param.Seedtxhash) == 0 { var txKeyBytes [][]byte
if len(param.StartTxHeightIndex) == 0 {
var keyPrefix []byte var keyPrefix []byte
if param.SendRecvFlag == sendTx { if param.SendRecvFlag == sendTx {
keyPrefix = calcSendPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, "") keyPrefix = calcSendPrivacyTxKey(param.AssetExec, param.AssetSymbol, param.Address, "")
} else { } else {
keyPrefix = calcRecvPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, "") keyPrefix = calcRecvPrivacyTxKey(param.AssetExec, param.AssetSymbol, param.Address, "")
}
txkeybytes := list.IteratorScanFromLast(keyPrefix, param.Count, db.ListDESC)
for _, keybyte := range txkeybytes {
value, err := store.Get(keybyte)
if err != nil {
bizlog.Error("getWalletPrivacyTxDetails", "db Get error", err)
continue
}
if nil == value {
continue
}
txbytes = append(txbytes, value)
} }
txKeyBytes = list.IteratorScanFromLast(keyPrefix, param.Count, db.ListDESC)
} else { } else {
list := store.NewListHelper()
var txkeybytes [][]byte
if param.SendRecvFlag == sendTx { if param.SendRecvFlag == sendTx {
txkeybytes = list.IteratorScan([]byte(SendPrivacyTx), calcSendPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction) txKeyBytes = list.IteratorScan([]byte(SendPrivacyTx), calcSendPrivacyTxKey(param.AssetExec, param.AssetSymbol, param.Address, param.StartTxHeightIndex), param.Count, param.Direction)
} else { } else {
txkeybytes = list.IteratorScan([]byte(RecvPrivacyTx), calcRecvPrivacyTxKey(param.AssetExec, param.Tokenname, param.Address, string(param.Seedtxhash)), param.Count, param.Direction) txKeyBytes = list.IteratorScan([]byte(RecvPrivacyTx), calcRecvPrivacyTxKey(param.AssetExec, param.AssetSymbol, param.Address, param.StartTxHeightIndex), param.Count, param.Direction)
} }
for _, keybyte := range txkeybytes {
value, err := store.Get(keybyte)
if err != nil {
bizlog.Error("getWalletPrivacyTxDetails", "db Get error", err)
continue
} }
if nil == value { txDetails := &types.WalletTxDetails{}
for _, keyByte := range txKeyBytes {
value, err := store.Get(keyByte)
if err != nil || value == nil {
bizlog.Error("getWalletPrivacyTxDetails", "db Get error", err)
continue continue
} }
txbytes = append(txbytes, value)
}
}
txDetails := new(types.WalletTxDetails) txDetail := &types.WalletTxDetail{}
txDetails.TxDetails = make([]*types.WalletTxDetail, len(txbytes)) err = types.Decode(value, txDetail)
for index, txdetailbyte := range txbytes {
var txdetail types.WalletTxDetail
err := proto.Unmarshal(txdetailbyte, &txdetail)
if err != nil { if err != nil {
bizlog.Error("getWalletPrivacyTxDetails", "proto.Unmarshal err:", err) bizlog.Error("getWalletPrivacyTxDetails", "proto.Unmarshal err:", err)
return nil, types.ErrUnmarshal return nil, types.ErrUnmarshal
} }
txhash := txdetail.GetTx().Hash() txDetail.Txhash = txDetail.GetTx().Hash()
txdetail.Txhash = txhash if txDetail.GetTx().IsWithdraw() {
if txdetail.GetTx().IsWithdraw() {
//swap from and to //swap from and to
txdetail.Fromaddr, txdetail.Tx.To = txdetail.Tx.To, txdetail.Fromaddr txDetail.Fromaddr, txDetail.Tx.To = txDetail.Tx.To, txDetail.Fromaddr
} }
txDetails.TxDetails = append(txDetails.TxDetails, txDetail)
txDetails.TxDetails[index] = &txdetail
} }
return txDetails, nil return txDetails, nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment