From d6920b605775870ec8520cfa498c332f1fd71910 Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Tue, 27 Mar 2018 11:59:56 +0200 Subject: [PATCH] Added support of ErrBlockNotFound --- bchain/coins/zec/zcashrpc.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bchain/coins/zec/zcashrpc.go b/bchain/coins/zec/zcashrpc.go index ea7d0847..b17fb62a 100644 --- a/bchain/coins/zec/zcashrpc.go +++ b/bchain/coins/zec/zcashrpc.go @@ -77,13 +77,21 @@ type resEstimateFee struct { // GetBlock returns block with given hash. func (z *ZCashRPC) GetBlock(hash string, height uint32) (*bchain.Block, error) { + var err error + if hash == "" && height > 0 { + hash, err = z.GetBlockHash(height) + if err != nil { + return nil, err + } + } + glog.V(1).Info("rpc: getblock (verbosity=1) ", hash) res := resGetBlockThin{} req := untypedArrayParams{Method: "getblock"} req.Params = append(req.Params, hash) req.Params = append(req.Params, true) - err := z.Call(&req, &res) + err = z.Call(&req, &res) if err != nil { return nil, errors.Annotatef(err, "hash %v", hash) @@ -157,6 +165,9 @@ func (z *ZCashRPC) GetBlockHash(height uint32) (string, error) { return "", errors.Annotatef(err, "height %v", height) } if res.Error != nil { + if isErrBlockNotFound(res.Error) { + return "", bchain.ErrBlockNotFound + } return "", errors.Annotatef(res.Error, "height %v", height) } return res.Result, nil @@ -176,6 +187,9 @@ func (z *ZCashRPC) GetBlockHeader(hash string) (*bchain.BlockHeader, error) { return nil, errors.Annotatef(err, "hash %v", hash) } if res.Error != nil { + if isErrBlockNotFound(res.Error) { + return nil, bchain.ErrBlockNotFound + } return nil, errors.Annotatef(res.Error, "hash %v", hash) } return &res.Result, nil @@ -214,3 +228,8 @@ func (z *ZCashRPC) estimateFee(blocks int) (float64, error) { func (z *ZCashRPC) GetMempoolEntry(txid string) (*bchain.MempoolEntry, error) { return nil, errors.New("GetMempoolEntry: not implemented") } + +func isErrBlockNotFound(err *bchain.RPCError) bool { + return err.Message == "Block not found" || + err.Message == "Block height out of range" +}