Commit 563677cd authored by liuyuhang's avatar liuyuhang

Merge branch 'master' into add_rpc_test

parents f1eb4a2f 2ad7ca35
...@@ -156,6 +156,7 @@ func New(cfg *types.Consensus, sub []byte) queue.Module { ...@@ -156,6 +156,7 @@ func New(cfg *types.Consensus, sub []byte) queue.Module {
commitMsgNotify: make(chan int64, 1), commitMsgNotify: make(chan int64, 1),
delMsgNotify: make(chan int64, 1), delMsgNotify: make(chan int64, 1),
mainBlockAdd: make(chan *types.BlockDetail, 1), mainBlockAdd: make(chan *types.BlockDetail, 1),
minerSwitch: make(chan bool, 1),
quit: make(chan struct{}), quit: make(chan struct{}),
} }
c.SetChild(para) c.SetChild(para)
...@@ -816,16 +817,22 @@ func checkMinerTx(current *types.BlockDetail) error { ...@@ -816,16 +817,22 @@ func checkMinerTx(current *types.BlockDetail) error {
// Query_CreateNewAccount 通知para共识模块钱包创建了一个新的账户 // Query_CreateNewAccount 通知para共识模块钱包创建了一个新的账户
func (client *client) Query_CreateNewAccount(acc *types.Account) (types.Message, error) { func (client *client) Query_CreateNewAccount(acc *types.Account) (types.Message, error) {
plog.Info("Query_CreateNewAccount", "acc", acc) if acc == nil {
return nil, types.ErrInvalidParam
}
plog.Info("Query_CreateNewAccount", "acc", acc.Addr)
// 需要para共识这边处理新创建的账户是否是超级节点发送commit共识交易的账户 // 需要para共识这边处理新创建的账户是否是超级节点发送commit共识交易的账户
// 需要实现具体处理 to be。。。。 client.commitMsgClient.onWalletAccount(acc)
return &types.Reply{IsOk: true, Msg: []byte("OK")}, nil return &types.Reply{IsOk: true, Msg: []byte("OK")}, nil
} }
// Query_WalletStatus 通知para共识模块钱包锁状态有变化 // Query_WalletStatus 通知para共识模块钱包锁状态有变化
func (client *client) Query_WalletStatus(walletStatus *types.WalletStatus) (types.Message, error) { func (client *client) Query_WalletStatus(walletStatus *types.WalletStatus) (types.Message, error) {
plog.Info("Query_WalletStatus", "walletStatus", walletStatus) if walletStatus == nil {
return nil, types.ErrInvalidParam
}
plog.Info("Query_WalletStatus", "walletStatus", walletStatus.IsWalletLock)
// 需要para共识这边根据walletStatus.IsWalletLock锁的状态开启/关闭发送共识交易 // 需要para共识这边根据walletStatus.IsWalletLock锁的状态开启/关闭发送共识交易
// 需要实现具体处理 to be。。。。 client.commitMsgClient.onWalletStatus(walletStatus)
return &types.Reply{IsOk: true, Msg: []byte("OK")}, nil return &types.Reply{IsOk: true, Msg: []byte("OK")}, nil
} }
...@@ -19,6 +19,7 @@ import ( ...@@ -19,6 +19,7 @@ import (
var ( var (
consensusInterval = 16 //about 1 new block interval consensusInterval = 16 //about 1 new block interval
minerInterval = 2
) )
type commitMsgClient struct { type commitMsgClient struct {
...@@ -27,6 +28,7 @@ type commitMsgClient struct { ...@@ -27,6 +28,7 @@ type commitMsgClient struct {
commitMsgNotify chan int64 commitMsgNotify chan int64
delMsgNotify chan int64 delMsgNotify chan int64
mainBlockAdd chan *types.BlockDetail mainBlockAdd chan *types.BlockDetail
minerSwitch chan bool
currentTx *types.Transaction currentTx *types.Transaction
checkTxCommitTimes int32 checkTxCommitTimes int32
privateKey crypto.PrivKey privateKey crypto.PrivKey
...@@ -41,16 +43,13 @@ func (client *commitMsgClient) handler() { ...@@ -41,16 +43,13 @@ func (client *commitMsgClient) handler() {
var sendingHeight int64 //当前发送的最大高度 var sendingHeight int64 //当前发送的最大高度
var sendingMsgs []*pt.ParacrossNodeStatus var sendingMsgs []*pt.ParacrossNodeStatus
var readTick <-chan time.Time var readTick <-chan time.Time
var ticker *time.Ticker
client.paraClient.wg.Add(1) client.paraClient.wg.Add(1)
consensusCh := make(chan *pt.ParacrossStatus, 1) consensusCh := make(chan *pt.ParacrossStatus, 1)
go client.getConsensusHeight(consensusCh) go client.getConsensusHeight(consensusCh)
client.paraClient.wg.Add(1) client.paraClient.wg.Add(1)
priKeyCh := make(chan crypto.PrivKey, 1)
go client.fetchPrivacyKey(priKeyCh)
client.paraClient.wg.Add(1)
sendMsgCh := make(chan *types.Transaction, 1) sendMsgCh := make(chan *types.Transaction, 1)
go client.sendCommitMsg(sendMsgCh) go client.sendCommitMsg(sendMsgCh)
...@@ -155,7 +154,7 @@ out: ...@@ -155,7 +154,7 @@ out:
case rsp := <-consensusCh: case rsp := <-consensusCh:
consensHeight := rsp.Height consensHeight := rsp.Height
plog.Info("para consensus rcv", "notify", notification, "sending", len(sendingMsgs), plog.Info("para consensus rcv", "notify", notification, "sending", len(sendingMsgs),
"consensHeigt", rsp.Height, "finished", finishHeight, "sync", isSync, "consensBlockHash", common.ToHex(rsp.BlockHash)) "consensHeigt", rsp.Height, "finished", finishHeight, "sync", isSync, "miner", readTick != nil, "consensBlockHash", common.ToHex(rsp.BlockHash))
if notification == nil || isRollback { if notification == nil || isRollback {
continue continue
...@@ -194,13 +193,23 @@ out: ...@@ -194,13 +193,23 @@ out:
isSync = true isSync = true
} }
case key, ok := <-priKeyCh: case miner := <-client.minerSwitch:
if !ok { plog.Info("para consensus mining", "miner", miner)
priKeyCh = nil //停止挖矿
if !miner {
readTick = nil
if ticker != nil {
ticker.Stop()
}
plog.Info("para consensus stop mining")
continue continue
} }
client.privateKey = key //开启挖矿
readTick = time.Tick(time.Second * 2) if readTick == nil {
ticker = time.NewTicker(time.Second * time.Duration(minerInterval))
readTick = ticker.C
plog.Info("para consensus start mining")
}
case <-client.quit: case <-client.quit:
break out break out
...@@ -575,51 +584,74 @@ func (client *commitMsgClient) getConsensusStatus(block *types.Block) (*pt.Parac ...@@ -575,51 +584,74 @@ func (client *commitMsgClient) getConsensusStatus(block *types.Block) (*pt.Parac
} }
func (client *commitMsgClient) fetchPrivacyKey(ch chan crypto.PrivKey) { func (client *commitMsgClient) onWalletStatus(status *types.WalletStatus) {
defer client.paraClient.wg.Done() if status == nil || client.paraClient.authAccount == "" {
if client.paraClient.authAccount == "" { return
close(ch) }
if !status.IsWalletLock && client.privateKey == nil {
client.fetchPriKey()
plog.Info("para commit fetchPriKey")
}
if client.privateKey == nil {
plog.Info("para commit wallet status prikey null", "status", status.IsWalletLock)
return return
} }
req := &types.ReqString{Data: client.paraClient.authAccount}
out:
for {
select { select {
case client.minerSwitch <- !status.IsWalletLock:
case <-client.quit: case <-client.quit:
break out }
case <-time.NewTimer(time.Second * 2).C: }
func (client *commitMsgClient) onWalletAccount(acc *types.Account) {
if acc == nil || client.paraClient.authAccount == "" || client.paraClient.authAccount != acc.Addr || client.privateKey != nil {
return
}
err := client.fetchPriKey()
if err != nil {
plog.Error("para commit fetchPriKey", "err", err.Error())
return
}
select {
case client.minerSwitch <- true:
case <-client.quit:
}
}
func (client *commitMsgClient) fetchPriKey() error {
req := &types.ReqString{Data: client.paraClient.authAccount}
msg := client.paraClient.GetQueueClient().NewMessage("wallet", types.EventDumpPrivkey, req) msg := client.paraClient.GetQueueClient().NewMessage("wallet", types.EventDumpPrivkey, req)
err := client.paraClient.GetQueueClient().Send(msg, true) err := client.paraClient.GetQueueClient().Send(msg, true)
if err != nil { if err != nil {
plog.Error("para commit send msg", "err", err.Error()) plog.Error("para commit send msg", "err", err.Error())
break out return err
} }
resp, err := client.paraClient.GetQueueClient().Wait(msg) resp, err := client.paraClient.GetQueueClient().Wait(msg)
if err != nil { if err != nil {
plog.Error("para commit msg sign to wallet", "err", err.Error()) plog.Error("para commit msg sign to wallet", "err", err.Error())
continue return err
} }
str := resp.GetData().(*types.ReplyString).Data str := resp.GetData().(*types.ReplyString).Data
pk, err := common.FromHex(str) pk, err := common.FromHex(str)
if err != nil && pk == nil { if err != nil && pk == nil {
panic(err) return err
} }
secp, err := crypto.New(types.GetSignName("", types.SECP256K1)) secp, err := crypto.New(types.GetSignName("", types.SECP256K1))
if err != nil { if err != nil {
panic(err) return err
} }
priKey, err := secp.PrivKeyFromBytes(pk) priKey, err := secp.PrivKeyFromBytes(pk)
if err != nil { if err != nil {
panic(err) plog.Error("para commit msg get priKey", "err", err.Error())
} return err
ch <- priKey
close(ch)
break out
}
} }
client.privateKey = priKey
plog.Info("para commit fetchPriKey success")
return nil
} }
...@@ -50,42 +50,40 @@ func TestParaNode(t *testing.T) { ...@@ -50,42 +50,40 @@ func TestParaNode(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, detail.Receipt.Ty, int32(types.ExecOk)) assert.Equal(t, detail.Receipt.Ty, int32(types.ExecOk))
testParaQuery(para)
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
tx = util.CreateTxWithExecer(para.Para.GetGenesisKey(), "user.p.guodun.none") tx = util.CreateTxWithExecer(para.Para.GetGenesisKey(), "user.p.guodun.none")
para.Para.SendTxRPC(tx) para.Para.SendTxRPC(tx)
para.Para.WaitHeight(int64(i) + 1) para.Para.WaitHeight(int64(i) + 1)
} }
testParaQuery(para)
} }
func testParaQuery(para *node.ParaNode) { func testParaQuery(para *node.ParaNode) {
var acc types.Account
var param types.ReqWalletImportPrivkey acc.Addr = "1EbDHAXpoiewjPLX9uqoz38HsKqMXayZrF"
param.Label = "Importprivkey"
param.Privkey = "CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944"
para.Para.GetAPI().Notify( para.Para.GetAPI().Notify(
"consensus", types.EventConsensusQuery, &types.ChainExecutor{ "consensus", types.EventConsensusQuery, &types.ChainExecutor{
Driver: "para", Driver: "para",
FuncName: "CreateNewAccount", FuncName: "CreateNewAccount",
Param: types.Encode(&param), Param: types.Encode(&acc),
}) })
var param1 types.ReqNewAccount var walletsatus types.WalletStatus
param1.Label = "NewAccount" walletsatus.IsWalletLock = true
para.Para.GetAPI().Notify( para.Para.GetAPI().Notify(
"consensus", types.EventConsensusQuery, &types.ChainExecutor{ "consensus", types.EventConsensusQuery, &types.ChainExecutor{
Driver: "para", Driver: "para",
FuncName: "CreateNewAccount", FuncName: "WalletStatus",
Param: types.Encode(&param1), Param: types.Encode(&walletsatus),
}) })
var walletsatus types.WalletStatus walletsatus.IsWalletLock = false
walletsatus.IsWalletLock = true
para.Para.GetAPI().Notify( para.Para.GetAPI().Notify(
"consensus", types.EventConsensusQuery, &types.ChainExecutor{ "consensus", types.EventConsensusQuery, &types.ChainExecutor{
Driver: "para", Driver: "para",
FuncName: "WalletStatus", FuncName: "WalletStatus",
Param: types.Encode(&walletsatus), Param: types.Encode(&walletsatus),
}) })
} }
...@@ -9,3 +9,7 @@ OUT_DIR="${1}/$strapp" ...@@ -9,3 +9,7 @@ OUT_DIR="${1}/$strapp"
mkdir -p "${OUT_DIR}" mkdir -p "${OUT_DIR}"
cp ./build/* "${OUT_DIR}" cp ./build/* "${OUT_DIR}"
OUT_TESTDIR="${1}/dapptest/$strapp"
mkdir -p "${OUT_TESTDIR}"
cp ./build/test-rpc.sh "${OUT_TESTDIR}"
#!/usr/bin/env bash
# shellcheck disable=SC2128
set -e
set -o pipefail
MAIN_HTTP=""
PARA_HTTP=""
CASE_ERR=""
#color
RED='\033[1;31m'
GRE='\033[1;32m'
NOC='\033[0m'
echo_rst() {
if [ "$2" == true ]; then
echo -e "${GRE}$1 ok${NOC}"
else
echo -e "${RED}$1 fail${NOC}"
CASE_ERR="FAIL"
fi
}
privacy_CreateRawTransaction() {
local ip=$1
req='"method":"privacy.CreateRawTransaction","params":[{"pubkeypair":"0a9d212b2505aefaa8da370319088bbccfac097b007f52ed71d8133456c8185823c8eac43c5e937953d7b6c8e68b0db1f4f03df4946a29f524875118960a35fb", "tokenname":"BTY", "type":1, "amount":100000000}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '.error|not' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_GetPrivacyTxByAddr() {
local ip=$1
req='"method":"privacy.GetPrivacyTxByAddr","params":[{"tokenname":"BTY","sendRecvFlag":0,"from":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv", "direction":1, "count":1}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '.error|not' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_ShowPrivacyKey() {
local ip=$1
req='"method":"privacy.ShowPrivacyKey", "params":[{"data":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '(.error|not) and .result.showSuccessful and (.result.pubkeypair=="0a9d212b2505aefaa8da370319088bbccfac097b007f52ed71d8133456c8185823c8eac43c5e937953d7b6c8e68b0db1f4f03df4946a29f524875118960a35fb")' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_ShowPrivacyAccountInfo() {
local ip=$1
req='"method":"privacy.ShowPrivacyAccountInfo", "params":[{"addr":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv", "token":"BTY", "displaymode":1}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '(.error|not) and (.result|[has("utxos", "ftxos", "displaymode"), true] | unique | length == 1)' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_ShowPrivacyAccountSpend() {
local ip=$1
req='"method":"privacy.ShowPrivacyAccountSpend", "params":[{"addr":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv", "token":"BTY"}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '(.error|not) and .result.utxoHaveTxHashs' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_RescanUtxos() {
local ip=$1
req='"method":"privacy.RescanUtxos", "params":[{"addrs":["12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"], "flag":0}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '(.error|not) and (.result|[has("flag", "repRescanResults"), true] | unique | length == 1)' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
privacy_EnablePrivacy() {
local ip=$1
req='"method":"privacy.EnablePrivacy", "params":[{"addrs":["12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"]}]'
echo "#request: $req"
resp=$(curl -ksd "{$req}" "$ip")
echo "#response: $resp"
ok=$(jq '(.error|not) and .result.results[0].IsOK' <<<"$resp")
echo_rst "$FUNCNAME" "$ok"
}
function run_test() {
local ip=$1
privacy_EnablePrivacy "$ip"
privacy_ShowPrivacyKey "$ip"
privacy_CreateRawTransaction "$ip"
privacy_ShowPrivacyAccountInfo "$ip"
privacy_ShowPrivacyAccountSpend "$ip"
privacy_RescanUtxos "$ip"
privacy_GetPrivacyTxByAddr "$ip"
}
function main() {
local ip=$1
MAIN_HTTP="http://$ip:8801"
PARA_HTTP="http://$ip:8901"
echo "=========== # privacy rpc test ============="
echo "main_ip=$MAIN_HTTP para_ip=$PARA_HTTP"
run_test "$MAIN_HTTP"
if [ -n "$CASE_ERR" ]; then
echo -e "${RED}=============Privacy Rpc Test Fail=============${NOC}"
exit 1
else
echo -e "${GRE}=============Prviacy Rpc Test Pass==============${NOC}"
fi
}
main "$1"
...@@ -75,7 +75,7 @@ func showPrivacyKey(cmd *cobra.Command, args []string) { ...@@ -75,7 +75,7 @@ func showPrivacyKey(cmd *cobra.Command, args []string) {
Data: addr, Data: addr,
} }
var res pty.ReplyPrivacyPkPair var res pty.ReplyPrivacyPkPair
ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.ShowPrivacykey", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.ShowPrivacyKey", params, &res)
ctx.Run() ctx.Run()
} }
...@@ -601,7 +601,7 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) { ...@@ -601,7 +601,7 @@ func listPrivacyTxsFlags(cmd *cobra.Command, args []string) {
Seedtxhash: []byte(seedtxhash), Seedtxhash: []byte(seedtxhash),
} }
var res rpctypes.WalletTxDetails var res rpctypes.WalletTxDetails
ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.PrivacyTxList", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "privacy.GetPrivacyTxByAddr", params, &res)
ctx.SetResultCb(parseWalletTxListRes) ctx.SetResultCb(parseWalletTxListRes)
ctx.Run() ctx.Run()
} }
......
...@@ -85,8 +85,8 @@ func (c *Jrpc) ShowPrivacyAccountSpend(in *pty.ReqPrivBal4AddrToken, result *jso ...@@ -85,8 +85,8 @@ func (c *Jrpc) ShowPrivacyAccountSpend(in *pty.ReqPrivBal4AddrToken, result *jso
return err return err
} }
// ShowPrivacykey display privacy key for json rpc // ShowPrivacyKey display privacy key for json rpc
func (c *Jrpc) ShowPrivacykey(in *types.ReqString, result *json.RawMessage) error { func (c *Jrpc) ShowPrivacyKey(in *types.ReqString, result *json.RawMessage) error {
reply, err := c.cli.ShowPrivacyKey(context.Background(), in) reply, err := c.cli.ShowPrivacyKey(context.Background(), in)
if err != nil { if err != nil {
return err return err
...@@ -106,8 +106,8 @@ func (c *Jrpc) CreateUTXOs(in *pty.ReqCreateUTXOs, result *interface{}) error { ...@@ -106,8 +106,8 @@ func (c *Jrpc) CreateUTXOs(in *pty.ReqCreateUTXOs, result *interface{}) error {
return nil return nil
} }
// PrivacyTxList get all privacy transaction list by param // GetPrivacyTxByAddr get all privacy transaction list by param
func (c *Jrpc) PrivacyTxList(in *pty.ReqPrivacyTransactionList, result *interface{}) error { func (c *Jrpc) GetPrivacyTxByAddr(in *pty.ReqPrivacyTransactionList, result *interface{}) error {
if in.Direction != 0 && in.Direction != 1 { if in.Direction != 0 && in.Direction != 1 {
return types.ErrInvalidParam return types.ErrInvalidParam
} }
......
...@@ -69,7 +69,7 @@ func testShowPrivacyKey(t *testing.T, jrpc *jsonclient.JSONClient) error { ...@@ -69,7 +69,7 @@ func testShowPrivacyKey(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := types.ReqString{ params := types.ReqString{
Data: "1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p", Data: "1JSRSwp16NvXiTjYBYK9iUQ9wqp3sCxz2p",
} }
err := jrpc.Call("privacy.ShowPrivacykey", params, &res) err := jrpc.Call("privacy.ShowPrivacyKey", params, &res)
return err return err
} }
......
...@@ -32,7 +32,7 @@ func TestChain33_PrivacyTxList(t *testing.T) { ...@@ -32,7 +32,7 @@ func TestChain33_PrivacyTxList(t *testing.T) {
actual := &pty.ReqPrivacyTransactionList{} actual := &pty.ReqPrivacyTransactionList{}
api.On("ExecWalletFunc", "privacy", "PrivacyTransactionList", actual).Return(nil, errors.New("error value")) api.On("ExecWalletFunc", "privacy", "PrivacyTransactionList", actual).Return(nil, errors.New("error value"))
var testResult interface{} var testResult interface{}
err := testChain33.PrivacyTxList(actual, &testResult) err := testChain33.GetPrivacyTxByAddr(actual, &testResult)
t.Log(err) t.Log(err)
assert.Equal(t, nil, testResult) assert.Equal(t, nil, testResult)
assert.NotNil(t, err) assert.NotNil(t, err)
......
...@@ -462,7 +462,7 @@ func Test_ShowPrivacyAccountSpend(t *testing.T) { ...@@ -462,7 +462,7 @@ func Test_ShowPrivacyAccountSpend(t *testing.T) {
Addr: testAddrs[0], Addr: testAddrs[0],
Token: types.BTY, Token: types.BTY,
}, },
needError: types.ErrNotFound, //needError: types.ErrNotFound,
}, },
} }
for index, testCase := range testCases { for index, testCase := range testCases {
...@@ -491,7 +491,7 @@ func Test_PrivacyTransactionList(t *testing.T) { ...@@ -491,7 +491,7 @@ func Test_PrivacyTransactionList(t *testing.T) {
Count: 10, Count: 10,
Address: testAddrs[0], Address: testAddrs[0],
}, },
needError: types.ErrTxNotExist, //needError: types.ErrTxNotExist,
}, },
} }
for index, testCase := range testCases { for index, testCase := range testCases {
......
...@@ -243,10 +243,6 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -243,10 +243,6 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
} }
txbytes = append(txbytes, value) txbytes = append(txbytes, value)
} }
if len(txbytes) == 0 {
bizlog.Error("getWalletPrivacyTxDetails does not exist tx!")
return nil, types.ErrTxNotExist
}
} else { } else {
list := store.NewListHelper() list := store.NewListHelper()
...@@ -267,11 +263,6 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv ...@@ -267,11 +263,6 @@ func (store *privacyStore) getWalletPrivacyTxDetails(param *privacytypes.ReqPriv
} }
txbytes = append(txbytes, value) txbytes = append(txbytes, value)
} }
if len(txbytes) == 0 {
bizlog.Error("getWalletPrivacyTxDetails does not exist tx!")
return nil, types.ErrTxNotExist
}
} }
txDetails := new(types.WalletTxDetails) txDetails := new(types.WalletTxDetails)
...@@ -714,10 +705,10 @@ func (store *privacyStore) listSpendUTXOs(token, addr string) (*privacytypes.UTX ...@@ -714,10 +705,10 @@ func (store *privacyStore) listSpendUTXOs(token, addr string) (*privacytypes.UTX
prefix := calcSTXOPrefix4Addr(token, addr) prefix := calcSTXOPrefix4Addr(token, addr)
list := store.NewListHelper() list := store.NewListHelper()
Key4FTXOsInTxs := list.PrefixScan(prefix) Key4FTXOsInTxs := list.PrefixScan(prefix)
if len(Key4FTXOsInTxs) == 0 { //if len(Key4FTXOsInTxs) == 0 {
bizlog.Error("listSpendUTXOs ", "addr not exist", addr) // bizlog.Error("listSpendUTXOs ", "addr not exist", addr)
return nil, types.ErrNotFound // return nil, types.ErrNotFound
} //}
var utxoHaveTxHashs privacytypes.UTXOHaveTxHashs var utxoHaveTxHashs privacytypes.UTXOHaveTxHashs
utxoHaveTxHashs.UtxoHaveTxHashs = make([]*privacytypes.UTXOHaveTxHash, 0) utxoHaveTxHashs.UtxoHaveTxHashs = make([]*privacytypes.UTXOHaveTxHash, 0)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment