OSDN Git Service

edit reset passowrd api (#467)
authorPaladz <yzhu101@uottawa.ca>
Fri, 23 Mar 2018 06:56:53 +0000 (14:56 +0800)
committerGitHub <noreply@github.com>
Fri, 23 Mar 2018 06:56:53 +0000 (14:56 +0800)
blockchain/hsm.go
blockchain/txdb/store.go

index 9536a02..46b0f6b 100644 (file)
@@ -66,13 +66,19 @@ func (bcr *BlockchainReactor) pseudohsmSignTemplate(ctx context.Context, xpub ch
        return bcr.wallet.Hsm.XSign(xpub, path, data[:], password)
 }
 
+type ResetPasswordResp struct {
+       Changed bool `json:"changed"`
+}
+
 func (bcr *BlockchainReactor) pseudohsmResetPassword(ctx context.Context, ins struct {
        XPub        chainkd.XPub `json:"xpub"`
        OldPassword string       `json:"old_password"`
        NewPassword string       `json:"new_password"`
 }) Response {
+       resp := &ResetPasswordResp{Changed: false}
        if err := bcr.wallet.Hsm.ResetPassword(ins.XPub, ins.OldPassword, ins.NewPassword); err != nil {
-               return NewErrorResponse(err)
+               return NewSuccessResponse(resp)
        }
-       return NewSuccessResponse(nil)
+       resp.Changed = true
+       return NewSuccessResponse(resp)
 }
index 9f2b85b..8ed8bef 100644 (file)
@@ -2,7 +2,6 @@ package txdb
 
 import (
        "encoding/json"
-       "fmt"
 
        "github.com/golang/protobuf/proto"
        "github.com/tendermint/tmlibs/common"
@@ -16,9 +15,11 @@ import (
 )
 
 var (
-       blockStoreKey   = []byte("blockStore")
-       blockSeedPrefix = []byte("blockSeed:")
-       txStatusPrefix  = []byte("txStatus:")
+       blockStoreKey     = []byte("blockStore")
+       blockPrefix       = []byte("B:")
+       blockHeaderPrefix = []byte("BH:")
+       blockSeedPrefix   = []byte("BS:")
+       txStatusPrefix    = []byte("BTS:")
 )
 
 // BlockStoreStateJSON represents the core's db status
@@ -58,7 +59,11 @@ type Store struct {
 }
 
 func calcBlockKey(hash *bc.Hash) []byte {
-       return []byte(fmt.Sprintf("B:%v", hash.String()))
+       return append(blockPrefix, hash.Bytes()...)
+}
+
+func calcBlockHeaderKey(hash *bc.Hash) []byte {
+       return append(blockHeaderPrefix, hash.Bytes()...)
 }
 
 func calcSeedKey(hash *bc.Hash) []byte {
@@ -108,6 +113,18 @@ func (s *Store) GetBlock(hash *bc.Hash) (*types.Block, error) {
        return s.cache.lookup(hash)
 }
 
+// GetBlockHeader return the block by given hash
+func (s *Store) GetBlockHeader(hash *bc.Hash) (*types.BlockHeader, error) {
+       bytez := s.db.Get(calcBlockHeaderKey(hash))
+       if bytez == nil {
+               return nil, errors.New("can't find the block header by given hash")
+       }
+
+       bh := &types.BlockHeader{}
+       err := bh.UnmarshalText(bytez)
+       return bh, err
+}
+
 // GetSeed will return the seed of given block
 func (s *Store) GetSeed(hash *bc.Hash) (*bc.Hash, error) {
        data := s.db.Get(calcSeedKey(hash))
@@ -158,6 +175,11 @@ func (s *Store) SaveBlock(block *types.Block, ts *bc.TransactionStatus, seed *bc
                return errors.Wrap(err, "Marshal block meta")
        }
 
+       binaryBlockHeader, err := block.BlockHeader.MarshalText()
+       if err != nil {
+               return errors.Wrap(err, "Marshal block header")
+       }
+
        binaryTxStatus, err := proto.Marshal(ts)
        if err != nil {
                return errors.Wrap(err, "marshal block transaction status")
@@ -171,6 +193,7 @@ func (s *Store) SaveBlock(block *types.Block, ts *bc.TransactionStatus, seed *bc
        blockHash := block.Hash()
        batch := s.db.NewBatch()
        batch.Set(calcBlockKey(&blockHash), binaryBlock)
+       batch.Set(calcBlockHeaderKey(&blockHash), binaryBlockHeader)
        batch.Set(calcTxStatusKey(&blockHash), binaryTxStatus)
        batch.Set(calcSeedKey(&blockHash), binarySeed)
        batch.Write()