Update for recent chainhash-related API changes. (#450)
This updates all code to make use of the new chainhash package since the old wire.ShaHash type and related functions have been removed in favor of the abstracted package. Also, while here, rename all variables that included sha in their name to include hash instead. Finally, update glide.lock to use the required version of btcd, btcutil, and btcrpcclient.
This commit is contained in:
parent
959ef467da
commit
e92f94dcd1
26 changed files with 263 additions and 246 deletions
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013-2015 The btcsuite developers
|
||||
// Copyright (c) 2013-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -11,7 +11,7 @@ import (
|
|||
|
||||
"github.com/btcsuite/btcd/btcjson"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcrpcclient"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/waddrmgr"
|
||||
|
@ -166,7 +166,7 @@ type (
|
|||
// RescanProgress is a notification describing the current status
|
||||
// of an in-progress rescan.
|
||||
RescanProgress struct {
|
||||
Hash *wire.ShaHash
|
||||
Hash *chainhash.Hash
|
||||
Height int32
|
||||
Time time.Time
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ type (
|
|||
// RescanFinished is a notification that a previous rescan request
|
||||
// has finished.
|
||||
RescanFinished struct {
|
||||
Hash *wire.ShaHash
|
||||
Hash *chainhash.Hash
|
||||
Height int32
|
||||
Time time.Time
|
||||
}
|
||||
|
@ -206,14 +206,14 @@ func parseBlock(block *btcjson.BlockDetails) (*wtxmgr.BlockMeta, error) {
|
|||
if block == nil {
|
||||
return nil, nil
|
||||
}
|
||||
blksha, err := wire.NewShaHashFromStr(block.Hash)
|
||||
blkHash, err := chainhash.NewHashFromStr(block.Hash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
blk := &wtxmgr.BlockMeta{
|
||||
Block: wtxmgr.Block{
|
||||
Height: block.Height,
|
||||
Hash: *blksha,
|
||||
Hash: *blkHash,
|
||||
},
|
||||
Time: time.Unix(block.Time, 0),
|
||||
}
|
||||
|
@ -227,7 +227,7 @@ func (c *RPCClient) onClientConnect() {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *RPCClient) onBlockConnected(hash *wire.ShaHash, height int32, time time.Time) {
|
||||
func (c *RPCClient) onBlockConnected(hash *chainhash.Hash, height int32, time time.Time) {
|
||||
select {
|
||||
case c.enqueueNotification <- BlockConnected{
|
||||
Block: wtxmgr.Block{
|
||||
|
@ -240,7 +240,7 @@ func (c *RPCClient) onBlockConnected(hash *wire.ShaHash, height int32, time time
|
|||
}
|
||||
}
|
||||
|
||||
func (c *RPCClient) onBlockDisconnected(hash *wire.ShaHash, height int32, time time.Time) {
|
||||
func (c *RPCClient) onBlockDisconnected(hash *chainhash.Hash, height int32, time time.Time) {
|
||||
select {
|
||||
case c.enqueueNotification <- BlockDisconnected{
|
||||
Block: wtxmgr.Block{
|
||||
|
@ -278,14 +278,14 @@ func (c *RPCClient) onRedeemingTx(tx *btcutil.Tx, block *btcjson.BlockDetails) {
|
|||
c.onRecvTx(tx, block)
|
||||
}
|
||||
|
||||
func (c *RPCClient) onRescanProgress(hash *wire.ShaHash, height int32, blkTime time.Time) {
|
||||
func (c *RPCClient) onRescanProgress(hash *chainhash.Hash, height int32, blkTime time.Time) {
|
||||
select {
|
||||
case c.enqueueNotification <- &RescanProgress{hash, height, blkTime}:
|
||||
case <-c.quit:
|
||||
}
|
||||
}
|
||||
|
||||
func (c *RPCClient) onRescanFinished(hash *wire.ShaHash, height int32, blkTime time.Time) {
|
||||
func (c *RPCClient) onRescanFinished(hash *chainhash.Hash, height int32, blkTime time.Time) {
|
||||
select {
|
||||
case c.enqueueNotification <- &RescanFinished{hash, height, blkTime}:
|
||||
case <-c.quit:
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"path/filepath"
|
||||
|
||||
"github.com/btcsuite/btcd/btcjson"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcrpcclient"
|
||||
|
@ -333,7 +334,7 @@ func saneOutputValue(amount btcutil.Amount) bool {
|
|||
}
|
||||
|
||||
func parseOutPoint(input *btcjson.ListUnspentResult) (wire.OutPoint, error) {
|
||||
txHash, err := wire.NewShaHashFromStr(input.TxID)
|
||||
txHash, err := chainhash.NewHashFromStr(input.TxID)
|
||||
if err != nil {
|
||||
return wire.OutPoint{}, err
|
||||
}
|
||||
|
|
27
glide.lock
generated
27
glide.lock
generated
|
@ -1,27 +1,28 @@
|
|||
hash: 0cff4a723566a3e33910785c104bddde49d1e0ba2d51f3833599a423140f5163
|
||||
updated: 2016-05-06T14:41:32.674803-04:00
|
||||
updated: 2016-08-08T14:07:48.6427885-05:00
|
||||
imports:
|
||||
- name: github.com/boltdb/bolt
|
||||
version: 831b652a7f8dbefaf94da0eb66abd46c0c4bcf23
|
||||
- name: github.com/btcsuite/btcd
|
||||
version: 474547b211c8f5566d094478318fcfd3c2c838d4
|
||||
version: bd4e64d1d43bad445dd8e6577907c0c265cd83c2
|
||||
subpackages:
|
||||
- blockchain
|
||||
- btcec
|
||||
- btcjson
|
||||
- chaincfg
|
||||
- chaincfg/chainhash
|
||||
- database
|
||||
- txscript
|
||||
- wire
|
||||
- database
|
||||
- name: github.com/btcsuite/btclog
|
||||
version: f96df2375f37300305f329b8e5258764b4f19a7f
|
||||
- name: github.com/btcsuite/btcrpcclient
|
||||
version: 64922553b5c21f333438edaed6e0ba2b5a7760ee
|
||||
version: c39e35318d5dc8d7e5e4171a34a17bc03dce06b4
|
||||
- name: github.com/btcsuite/btcutil
|
||||
version: bdf4400ecafb82f0c121ed5db1ae70639e7f4018
|
||||
version: 22c91fa80a5e90e3feda26cf6d43adc249306188
|
||||
subpackages:
|
||||
- hdkeychain
|
||||
- base58
|
||||
- hdkeychain
|
||||
- name: github.com/btcsuite/fastsha256
|
||||
version: 302ad4db268b46f9ebda3078f6f7397f96047735
|
||||
- name: github.com/btcsuite/go-socks
|
||||
|
@ -32,12 +33,12 @@ imports:
|
|||
version: 53f62d9b43e87a6c56975cf862af7edf33a8d0df
|
||||
subpackages:
|
||||
- nacl/secretbox
|
||||
- pbkdf2
|
||||
- poly1305
|
||||
- ripemd160
|
||||
- salsa20/salsa
|
||||
- scrypt
|
||||
- ssh/terminal
|
||||
- poly1305
|
||||
- salsa20/salsa
|
||||
- pbkdf2
|
||||
- name: github.com/btcsuite/seelog
|
||||
version: 313961b101eb55f65ae0f03ddd4e322731763b6c
|
||||
- name: github.com/btcsuite/websocket
|
||||
|
@ -53,9 +54,9 @@ imports:
|
|||
subpackages:
|
||||
- context
|
||||
- http2
|
||||
- trace
|
||||
- http2/hpack
|
||||
- internal/timeseries
|
||||
- trace
|
||||
- name: golang.org/x/sys
|
||||
version: f64b50fbea64174967a8882830d621a18ee1548e
|
||||
subpackages:
|
||||
|
@ -71,4 +72,8 @@ imports:
|
|||
- naming
|
||||
- transport
|
||||
- peer
|
||||
devImports: []
|
||||
testImports:
|
||||
- name: github.com/davecgh/go-spew
|
||||
version: 5215b55f46b2b919f50a1df0eaa5886afe4e3b3d
|
||||
subpackages:
|
||||
- spew
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013-2014 The btcsuite developers
|
||||
// Copyright (c) 2013-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -24,6 +24,7 @@ import (
|
|||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
|
@ -189,7 +190,7 @@ func chainedPrivKey(privkey, pubkey, chaincode []byte) ([]byte, error) {
|
|||
}
|
||||
|
||||
xorbytes := make([]byte, 32)
|
||||
chainMod := wire.DoubleSha256(pubkey)
|
||||
chainMod := chainhash.DoubleHashB(pubkey)
|
||||
for i := range xorbytes {
|
||||
xorbytes[i] = chainMod[i] ^ chaincode[i]
|
||||
}
|
||||
|
@ -221,7 +222,7 @@ func chainedPubKey(pubkey, chaincode []byte) ([]byte, error) {
|
|||
}
|
||||
|
||||
xorbytes := make([]byte, 32)
|
||||
chainMod := wire.DoubleSha256(pubkey)
|
||||
chainMod := chainhash.DoubleHashB(pubkey)
|
||||
for i := range xorbytes {
|
||||
xorbytes[i] = chainMod[i] ^ chaincode[i]
|
||||
}
|
||||
|
@ -588,7 +589,7 @@ func New(dir string, desc string, passphrase []byte, net *chaincfg.Params,
|
|||
kdfParams: *kdfp,
|
||||
recent: recentBlocks{
|
||||
lastHeight: createdAt.Height,
|
||||
hashes: []*wire.ShaHash{
|
||||
hashes: []*chainhash.Hash{
|
||||
createdAt.Hash,
|
||||
},
|
||||
},
|
||||
|
@ -1341,7 +1342,7 @@ func (s *Store) SetSyncedWith(bs *BlockStamp) {
|
|||
// NOTE: If the hash of the synced block is not known, hash will be nil, and
|
||||
// must be obtained from elsewhere. This must be explicitly checked before
|
||||
// dereferencing the pointer.
|
||||
func (s *Store) SyncedTo() (hash *wire.ShaHash, height int32) {
|
||||
func (s *Store) SyncedTo() (hash *chainhash.Hash, height int32) {
|
||||
s.mtx.RLock()
|
||||
defer s.mtx.RUnlock()
|
||||
|
||||
|
@ -1528,7 +1529,7 @@ func (s *Store) ExportWatchingWallet() (*Store, error) {
|
|||
kgwc := s.keyGenerator.watchingCopy(ws)
|
||||
ws.keyGenerator = *(kgwc.(*btcAddress))
|
||||
if len(s.recent.hashes) != 0 {
|
||||
ws.recent.hashes = make([]*wire.ShaHash, 0, len(s.recent.hashes))
|
||||
ws.recent.hashes = make([]*chainhash.Hash, 0, len(s.recent.hashes))
|
||||
for _, hash := range s.recent.hashes {
|
||||
hashCpy := *hash
|
||||
ws.recent.hashes = append(ws.recent.hashes, &hashCpy)
|
||||
|
@ -1783,7 +1784,7 @@ func (af *addrFlags) WriteTo(w io.Writer) (int64, error) {
|
|||
// recentBlocks holds at most the last 20 seen block hashes as well as
|
||||
// the block height of the most recently seen block.
|
||||
type recentBlocks struct {
|
||||
hashes []*wire.ShaHash
|
||||
hashes []*chainhash.Hash
|
||||
lastHeight int32
|
||||
}
|
||||
|
||||
|
@ -1815,14 +1816,14 @@ func (rb *recentBlocks) readFromVersion(v version, r io.Reader) (int64, error) {
|
|||
}
|
||||
|
||||
// Read block hash.
|
||||
var syncedBlockHash wire.ShaHash
|
||||
var syncedBlockHash chainhash.Hash
|
||||
n, err = io.ReadFull(r, syncedBlockHash[:])
|
||||
read += int64(n)
|
||||
if err != nil {
|
||||
return read, err
|
||||
}
|
||||
|
||||
rb.hashes = []*wire.ShaHash{
|
||||
rb.hashes = []*chainhash.Hash{
|
||||
&syncedBlockHash,
|
||||
}
|
||||
|
||||
|
@ -1866,15 +1867,15 @@ func (rb *recentBlocks) ReadFrom(r io.Reader) (int64, error) {
|
|||
// Read nBlocks block hashes. Hashes are expected to be in
|
||||
// order of oldest to newest, but there's no way to check
|
||||
// that here.
|
||||
rb.hashes = make([]*wire.ShaHash, 0, nBlocks)
|
||||
rb.hashes = make([]*chainhash.Hash, 0, nBlocks)
|
||||
for i := uint32(0); i < nBlocks; i++ {
|
||||
var blockSha wire.ShaHash
|
||||
n, err := io.ReadFull(r, blockSha[:])
|
||||
var blockHash chainhash.Hash
|
||||
n, err := io.ReadFull(r, blockHash[:])
|
||||
read += int64(n)
|
||||
if err != nil {
|
||||
return read, err
|
||||
}
|
||||
rb.hashes = append(rb.hashes, &blockSha)
|
||||
rb.hashes = append(rb.hashes, &blockHash)
|
||||
}
|
||||
|
||||
return read, nil
|
||||
|
@ -3027,7 +3028,7 @@ func (sa *scriptAddress) watchingCopy(s *Store) walletAddress {
|
|||
}
|
||||
|
||||
func walletHash(b []byte) uint32 {
|
||||
sum := wire.DoubleSha256(b)
|
||||
sum := chainhash.DoubleHashB(b)
|
||||
return binary.LittleEndian.Uint32(sum)
|
||||
}
|
||||
|
||||
|
@ -3234,6 +3235,6 @@ func (e *scriptEntry) ReadFrom(r io.Reader) (n int64, err error) {
|
|||
// used to mark a point in the blockchain that a key store element is
|
||||
// synced to.
|
||||
type BlockStamp struct {
|
||||
Hash *wire.ShaHash
|
||||
Hash *chainhash.Hash
|
||||
Height int32
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013-2014 The btcsuite developers
|
||||
// Copyright (c) 2013-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -13,8 +13,8 @@ import (
|
|||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
|
@ -26,7 +26,7 @@ var tstNetParams = &chaincfg.MainNetParams
|
|||
|
||||
func makeBS(height int32) *BlockStamp {
|
||||
return &BlockStamp{
|
||||
Hash: new(wire.ShaHash),
|
||||
Hash: new(chainhash.Hash),
|
||||
Height: height,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/btcjson"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcrpcclient"
|
||||
|
@ -799,7 +800,7 @@ func getReceivedByAddress(icmd interface{}, w *wallet.Wallet) (interface{}, erro
|
|||
func getTransaction(icmd interface{}, w *wallet.Wallet) (interface{}, error) {
|
||||
cmd := icmd.(*btcjson.GetTransactionCmd)
|
||||
|
||||
txSha, err := wire.NewShaHashFromStr(cmd.Txid)
|
||||
txHash, err := chainhash.NewHashFromStr(cmd.Txid)
|
||||
if err != nil {
|
||||
return nil, &btcjson.RPCError{
|
||||
Code: btcjson.ErrRPCDecodeHexString,
|
||||
|
@ -807,7 +808,7 @@ func getTransaction(icmd interface{}, w *wallet.Wallet) (interface{}, error) {
|
|||
}
|
||||
}
|
||||
|
||||
details, err := w.TxStore.TxDetails(txSha)
|
||||
details, err := w.TxStore.TxDetails(txHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -1245,7 +1246,7 @@ func listSinceBlock(icmd interface{}, w *wallet.Wallet, chainClient *chain.RPCCl
|
|||
|
||||
var start int32
|
||||
if cmd.BlockHash != nil {
|
||||
hash, err := wire.NewShaHashFromStr(*cmd.BlockHash)
|
||||
hash, err := chainhash.NewHashFromStr(*cmd.BlockHash)
|
||||
if err != nil {
|
||||
return nil, DeserializationError{err}
|
||||
}
|
||||
|
@ -1370,11 +1371,11 @@ func lockUnspent(icmd interface{}, w *wallet.Wallet) (interface{}, error) {
|
|||
w.ResetLockedOutpoints()
|
||||
default:
|
||||
for _, input := range cmd.Transactions {
|
||||
txSha, err := wire.NewShaHashFromStr(input.Txid)
|
||||
txHash, err := chainhash.NewHashFromStr(input.Txid)
|
||||
if err != nil {
|
||||
return nil, ParseError{err}
|
||||
}
|
||||
op := wire.OutPoint{Hash: *txSha, Index: input.Vout}
|
||||
op := wire.OutPoint{Hash: *txHash, Index: input.Vout}
|
||||
if cmd.Unlock {
|
||||
w.UnlockOutpoint(op)
|
||||
} else {
|
||||
|
@ -1416,7 +1417,7 @@ func sendPairs(w *wallet.Wallet, amounts map[string]btcutil.Amount,
|
|||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
txSha, err := w.SendOutputs(outputs, account, minconf)
|
||||
txHash, err := w.SendOutputs(outputs, account, minconf)
|
||||
if err != nil {
|
||||
if err == txrules.ErrAmountNegative {
|
||||
return "", ErrNeedPositiveAmount
|
||||
|
@ -1435,9 +1436,9 @@ func sendPairs(w *wallet.Wallet, amounts map[string]btcutil.Amount,
|
|||
}
|
||||
}
|
||||
|
||||
txShaStr := txSha.String()
|
||||
log.Infof("Successfully sent transaction %v", txShaStr)
|
||||
return txShaStr, nil
|
||||
txHashStr := txHash.String()
|
||||
log.Infof("Successfully sent transaction %v", txHashStr)
|
||||
return txHashStr, nil
|
||||
}
|
||||
|
||||
func isNilOrEmpty(s *string) bool {
|
||||
|
@ -1612,7 +1613,7 @@ func signMessage(icmd interface{}, w *wallet.Wallet) (interface{}, error) {
|
|||
var buf bytes.Buffer
|
||||
wire.WriteVarString(&buf, 0, "Bitcoin Signed Message:\n")
|
||||
wire.WriteVarString(&buf, 0, cmd.Message)
|
||||
messageHash := wire.DoubleSha256(buf.Bytes())
|
||||
messageHash := chainhash.DoubleHashB(buf.Bytes())
|
||||
sigbytes, err := btcec.SignCompact(btcec.S256(), privKey,
|
||||
messageHash, ainfo.Compressed())
|
||||
if err != nil {
|
||||
|
@ -1665,7 +1666,7 @@ func signRawTransaction(icmd interface{}, w *wallet.Wallet, chainClient *chain.R
|
|||
cmdInputs = *cmd.Inputs
|
||||
}
|
||||
for _, rti := range cmdInputs {
|
||||
inputSha, err := wire.NewShaHashFromStr(rti.Txid)
|
||||
inputHash, err := chainhash.NewHashFromStr(rti.Txid)
|
||||
if err != nil {
|
||||
return nil, DeserializationError{err}
|
||||
}
|
||||
|
@ -1695,7 +1696,7 @@ func signRawTransaction(icmd interface{}, w *wallet.Wallet, chainClient *chain.R
|
|||
scripts[addr.String()] = redeemScript
|
||||
}
|
||||
inputs[wire.OutPoint{
|
||||
Hash: *inputSha,
|
||||
Hash: *inputHash,
|
||||
Index: rti.Vout,
|
||||
}] = script
|
||||
}
|
||||
|
@ -1897,7 +1898,7 @@ func verifyMessage(icmd interface{}, w *wallet.Wallet) (interface{}, error) {
|
|||
var buf bytes.Buffer
|
||||
wire.WriteVarString(&buf, 0, "Bitcoin Signed Message:\n")
|
||||
wire.WriteVarString(&buf, 0, cmd.Message)
|
||||
expectedMessageHash := wire.DoubleSha256(buf.Bytes())
|
||||
expectedMessageHash := chainhash.DoubleHashB(buf.Bytes())
|
||||
pk, wasCompressed, err := btcec.RecoverCompact(btcec.S256(), sig,
|
||||
expectedMessageHash)
|
||||
if err != nil {
|
||||
|
|
|
@ -26,6 +26,7 @@ import (
|
|||
"google.golang.org/grpc/codes"
|
||||
|
||||
"github.com/btcsuite/btcd/blockchain"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcrpcclient"
|
||||
|
@ -417,7 +418,7 @@ func (s *walletServer) GetTransactions(ctx context.Context, req *pb.GetTransacti
|
|||
return nil, errors.New(
|
||||
"starting block hash and height may not be specified simultaneously")
|
||||
} else if req.StartingBlockHash != nil {
|
||||
startBlockHash, err := wire.NewShaHash(req.StartingBlockHash)
|
||||
startBlockHash, err := chainhash.NewHash(req.StartingBlockHash)
|
||||
if err != nil {
|
||||
return nil, grpc.Errorf(codes.InvalidArgument, "%s", err.Error())
|
||||
}
|
||||
|
@ -430,7 +431,7 @@ func (s *walletServer) GetTransactions(ctx context.Context, req *pb.GetTransacti
|
|||
return nil, grpc.Errorf(codes.InvalidArgument,
|
||||
"ending block hash and height may not be specified simultaneously")
|
||||
} else if req.EndingBlockHash != nil {
|
||||
endBlockHash, err := wire.NewShaHash(req.EndingBlockHash)
|
||||
endBlockHash, err := chainhash.NewHash(req.EndingBlockHash)
|
||||
if err != nil {
|
||||
return nil, grpc.Errorf(codes.InvalidArgument, "%s", err.Error())
|
||||
}
|
||||
|
@ -607,7 +608,7 @@ func marshalBlocks(v []wallet.Block) []*pb.BlockDetails {
|
|||
return blocks
|
||||
}
|
||||
|
||||
func marshalHashes(v []*wire.ShaHash) [][]byte {
|
||||
func marshalHashes(v []*chainhash.Hash) [][]byte {
|
||||
hashes := make([][]byte, len(v))
|
||||
for i, hash := range v {
|
||||
hashes[i] = hash[:]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2014 The btcsuite developers
|
||||
* Copyright (c) 2014-2016 The btcsuite developers
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -28,6 +28,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
|
@ -73,7 +74,7 @@ func createMsgTx(pkScript []byte, amts []int64) *wire.MsgTx {
|
|||
TxIn: []*wire.TxIn{
|
||||
{
|
||||
PreviousOutPoint: wire.OutPoint{
|
||||
Hash: wire.ShaHash{},
|
||||
Hash: chainhash.Hash{},
|
||||
Index: 0xffffffff,
|
||||
},
|
||||
SignatureScript: []byte{txscript.OP_NOP},
|
||||
|
@ -255,12 +256,12 @@ func TstCreateSeriesCredits(t *testing.T, pool *Pool, seriesID uint32, amounts [
|
|||
t.Fatal(err)
|
||||
}
|
||||
msgTx := createMsgTx(pkScript, amounts)
|
||||
txSha := msgTx.TxSha()
|
||||
txHash := msgTx.TxHash()
|
||||
credits := make([]credit, len(amounts))
|
||||
for i := range msgTx.TxOut {
|
||||
c := wtxmgr.Credit{
|
||||
OutPoint: wire.OutPoint{
|
||||
Hash: txSha,
|
||||
Hash: txHash,
|
||||
Index: uint32(i),
|
||||
},
|
||||
BlockMeta: wtxmgr.BlockMeta{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015 The btcsuite developers
|
||||
* Copyright (c) 2015-2016 The btcsuite developers
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
|
@ -82,7 +82,7 @@ func (c byAddress) Less(i, j int) bool {
|
|||
}
|
||||
|
||||
// The seriesID, index, and branch are equal, so compare hash.
|
||||
txidComparison := bytes.Compare(c[i].OutPoint.Hash.Bytes(), c[j].OutPoint.Hash.Bytes())
|
||||
txidComparison := bytes.Compare(c[i].OutPoint.Hash[:], c[j].OutPoint.Hash[:])
|
||||
if txidComparison < 0 {
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2015 The btcsuite developers
|
||||
// Copyright (c) 2015-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -10,6 +10,7 @@ import (
|
|||
"sort"
|
||||
"testing"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||
|
@ -292,9 +293,9 @@ func TestCreditSortingByAddress(t *testing.T) {
|
|||
// locked to the votingpool address identified by the given
|
||||
// series/index/branch.
|
||||
func newDummyCredit(t *testing.T, pool *Pool, series uint32, index Index, branch Branch,
|
||||
txSha []byte, outpointIdx uint32) credit {
|
||||
var hash wire.ShaHash
|
||||
if err := hash.SetBytes(txSha); err != nil {
|
||||
txHash []byte, outpointIdx uint32) credit {
|
||||
var hash chainhash.Hash
|
||||
if err := hash.SetBytes(txHash); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// Ensure the address defined by the given series/branch/index is present on
|
||||
|
@ -315,7 +316,7 @@ func checkUniqueness(t *testing.T, credits byAddress) {
|
|||
series uint32
|
||||
branch Branch
|
||||
index Index
|
||||
hash wire.ShaHash
|
||||
hash chainhash.Hash
|
||||
outputIndex uint32
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2015 The btcsuite developers
|
||||
// Copyright (c) 2015-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -322,7 +322,7 @@ func (tx *withdrawalTx) ntxid() Ntxid {
|
|||
for _, txin := range msgtx.TxIn {
|
||||
txin.SignatureScript = empty
|
||||
}
|
||||
return Ntxid(msgtx.TxSha().String())
|
||||
return Ntxid(msgtx.TxHash().String())
|
||||
}
|
||||
|
||||
// isTooBig returns true if the size (in bytes) of the given tx is greater
|
||||
|
|
|
@ -1111,8 +1111,8 @@ func TestStoreTransactionsWithChangeOutput(t *testing.T) {
|
|||
t.Fatal(err)
|
||||
}
|
||||
|
||||
sha := msgtx.TxSha()
|
||||
txDetails, err := store.TxDetails(&sha)
|
||||
hash := msgtx.TxHash()
|
||||
txDetails, err := store.TxDetails(&hash)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -1146,7 +1146,7 @@ func TestStoreTransactionsWithChangeOutput(t *testing.T) {
|
|||
if len(credits) != 1 {
|
||||
t.Fatalf("Unexpected number of credits in txstore; got %d, want 1", len(credits))
|
||||
}
|
||||
changeOutpoint := wire.OutPoint{Hash: sha, Index: uint32(tx.changeIdx)}
|
||||
changeOutpoint := wire.OutPoint{Hash: hash, Index: uint32(tx.changeIdx)}
|
||||
if credits[0].OutPoint != changeOutpoint {
|
||||
t.Fatalf("Credit's outpoint (%v) doesn't match the one from change output (%v)",
|
||||
credits[0].OutPoint, changeOutpoint)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2014 The btcsuite developers
|
||||
// Copyright (c) 2014-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -11,7 +11,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
"github.com/btcsuite/fastsha256"
|
||||
|
@ -1448,7 +1448,7 @@ func putStartBlock(tx walletdb.Tx, bs *BlockStamp) error {
|
|||
|
||||
// fetchRecentBlocks returns the height of the most recent block height and
|
||||
// hashes of the most recent blocks.
|
||||
func fetchRecentBlocks(tx walletdb.Tx) (int32, []wire.ShaHash, error) {
|
||||
func fetchRecentBlocks(tx walletdb.Tx) (int32, []chainhash.Hash, error) {
|
||||
bucket := tx.RootBucket().Bucket(syncBucketName)
|
||||
|
||||
// The serialized recent blocks format is:
|
||||
|
@ -1467,7 +1467,7 @@ func fetchRecentBlocks(tx walletdb.Tx) (int32, []wire.ShaHash, error) {
|
|||
|
||||
recentHeight := int32(binary.LittleEndian.Uint32(buf[0:4]))
|
||||
numHashes := binary.LittleEndian.Uint32(buf[4:8])
|
||||
recentHashes := make([]wire.ShaHash, numHashes)
|
||||
recentHashes := make([]chainhash.Hash, numHashes)
|
||||
offset := 8
|
||||
for i := uint32(0); i < numHashes; i++ {
|
||||
copy(recentHashes[i][:], buf[offset:offset+32])
|
||||
|
@ -1478,7 +1478,7 @@ func fetchRecentBlocks(tx walletdb.Tx) (int32, []wire.ShaHash, error) {
|
|||
}
|
||||
|
||||
// putRecentBlocks stores the provided start block stamp to the database.
|
||||
func putRecentBlocks(tx walletdb.Tx, recentHeight int32, recentHashes []wire.ShaHash) error {
|
||||
func putRecentBlocks(tx walletdb.Tx, recentHeight int32, recentHashes []chainhash.Hash) error {
|
||||
bucket := tx.RootBucket().Bucket(syncBucketName)
|
||||
|
||||
// The serialized recent blocks format is:
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
"github.com/btcsuite/btcwallet/internal/zero"
|
||||
|
@ -2147,7 +2147,7 @@ func loadManager(namespace walletdb.Namespace, pubPassphrase []byte, chainParams
|
|||
var cryptoKeyPubEnc, cryptoKeyPrivEnc, cryptoKeyScriptEnc []byte
|
||||
var syncedTo, startBlock *BlockStamp
|
||||
var recentHeight int32
|
||||
var recentHashes []wire.ShaHash
|
||||
var recentHashes []chainhash.Hash
|
||||
err := namespace.View(func(tx walletdb.Tx) error {
|
||||
// Load whether or not the manager is watching-only from the db.
|
||||
var err error
|
||||
|
@ -2463,7 +2463,7 @@ func Create(namespace walletdb.Namespace, seed, pubPassphrase, privPassphrase []
|
|||
createdAt := &BlockStamp{Hash: *chainParams.GenesisHash, Height: 0}
|
||||
|
||||
// Create the initial sync state.
|
||||
recentHashes := []wire.ShaHash{createdAt.Hash}
|
||||
recentHashes := []chainhash.Hash{createdAt.Hash}
|
||||
recentHeight := createdAt.Height
|
||||
syncInfo := newSyncState(createdAt, createdAt, recentHeight, recentHashes)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2014 The btcsuite developers
|
||||
// Copyright (c) 2014-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -12,22 +12,22 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/waddrmgr"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
)
|
||||
|
||||
// newShaHash converts the passed big-endian hex string into a wire.ShaHash.
|
||||
// newHash converts the passed big-endian hex string into a chainhash.Hash.
|
||||
// It only differs from the one available in wire in that it panics on an
|
||||
// error since it will only (and must only) be called with hard-coded, and
|
||||
// therefore known good, hashes.
|
||||
func newShaHash(hexStr string) *wire.ShaHash {
|
||||
sha, err := wire.NewShaHashFromStr(hexStr)
|
||||
func newHash(hexStr string) *chainhash.Hash {
|
||||
hash, err := chainhash.NewHashFromStr(hexStr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return sha
|
||||
return hash
|
||||
}
|
||||
|
||||
// testContext is used to store context information about a running test which
|
||||
|
@ -1439,91 +1439,91 @@ func testWatchingOnly(tc *testContext) bool {
|
|||
func testSync(tc *testContext) bool {
|
||||
tests := []struct {
|
||||
name string
|
||||
hash *wire.ShaHash
|
||||
hash *chainhash.Hash
|
||||
}{
|
||||
{
|
||||
name: "Block 1",
|
||||
hash: newShaHash("00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"),
|
||||
hash: newHash("00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"),
|
||||
},
|
||||
{
|
||||
name: "Block 2",
|
||||
hash: newShaHash("000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd"),
|
||||
hash: newHash("000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd"),
|
||||
},
|
||||
{
|
||||
name: "Block 3",
|
||||
hash: newShaHash("0000000082b5015589a3fdf2d4baff403e6f0be035a5d9742c1cae6295464449"),
|
||||
hash: newHash("0000000082b5015589a3fdf2d4baff403e6f0be035a5d9742c1cae6295464449"),
|
||||
},
|
||||
{
|
||||
name: "Block 4",
|
||||
hash: newShaHash("000000004ebadb55ee9096c9a2f8880e09da59c0d68b1c228da88e48844a1485"),
|
||||
hash: newHash("000000004ebadb55ee9096c9a2f8880e09da59c0d68b1c228da88e48844a1485"),
|
||||
},
|
||||
{
|
||||
name: "Block 5",
|
||||
hash: newShaHash("000000009b7262315dbf071787ad3656097b892abffd1f95a1a022f896f533fc"),
|
||||
hash: newHash("000000009b7262315dbf071787ad3656097b892abffd1f95a1a022f896f533fc"),
|
||||
},
|
||||
{
|
||||
name: "Block 6",
|
||||
hash: newShaHash("000000003031a0e73735690c5a1ff2a4be82553b2a12b776fbd3a215dc8f778d"),
|
||||
hash: newHash("000000003031a0e73735690c5a1ff2a4be82553b2a12b776fbd3a215dc8f778d"),
|
||||
},
|
||||
{
|
||||
name: "Block 7",
|
||||
hash: newShaHash("0000000071966c2b1d065fd446b1e485b2c9d9594acd2007ccbd5441cfc89444"),
|
||||
hash: newHash("0000000071966c2b1d065fd446b1e485b2c9d9594acd2007ccbd5441cfc89444"),
|
||||
},
|
||||
{
|
||||
name: "Block 8",
|
||||
hash: newShaHash("00000000408c48f847aa786c2268fc3e6ec2af68e8468a34a28c61b7f1de0dc6"),
|
||||
hash: newHash("00000000408c48f847aa786c2268fc3e6ec2af68e8468a34a28c61b7f1de0dc6"),
|
||||
},
|
||||
{
|
||||
name: "Block 9",
|
||||
hash: newShaHash("000000008d9dc510f23c2657fc4f67bea30078cc05a90eb89e84cc475c080805"),
|
||||
hash: newHash("000000008d9dc510f23c2657fc4f67bea30078cc05a90eb89e84cc475c080805"),
|
||||
},
|
||||
{
|
||||
name: "Block 10",
|
||||
hash: newShaHash("000000002c05cc2e78923c34df87fd108b22221ac6076c18f3ade378a4d915e9"),
|
||||
hash: newHash("000000002c05cc2e78923c34df87fd108b22221ac6076c18f3ade378a4d915e9"),
|
||||
},
|
||||
{
|
||||
name: "Block 11",
|
||||
hash: newShaHash("0000000097be56d606cdd9c54b04d4747e957d3608abe69198c661f2add73073"),
|
||||
hash: newHash("0000000097be56d606cdd9c54b04d4747e957d3608abe69198c661f2add73073"),
|
||||
},
|
||||
{
|
||||
name: "Block 12",
|
||||
hash: newShaHash("0000000027c2488e2510d1acf4369787784fa20ee084c258b58d9fbd43802b5e"),
|
||||
hash: newHash("0000000027c2488e2510d1acf4369787784fa20ee084c258b58d9fbd43802b5e"),
|
||||
},
|
||||
{
|
||||
name: "Block 13",
|
||||
hash: newShaHash("000000005c51de2031a895adc145ee2242e919a01c6d61fb222a54a54b4d3089"),
|
||||
hash: newHash("000000005c51de2031a895adc145ee2242e919a01c6d61fb222a54a54b4d3089"),
|
||||
},
|
||||
{
|
||||
name: "Block 14",
|
||||
hash: newShaHash("0000000080f17a0c5a67f663a9bc9969eb37e81666d9321125f0e293656f8a37"),
|
||||
hash: newHash("0000000080f17a0c5a67f663a9bc9969eb37e81666d9321125f0e293656f8a37"),
|
||||
},
|
||||
{
|
||||
name: "Block 15",
|
||||
hash: newShaHash("00000000b3322c8c3ef7d2cf6da009a776e6a99ee65ec5a32f3f345712238473"),
|
||||
hash: newHash("00000000b3322c8c3ef7d2cf6da009a776e6a99ee65ec5a32f3f345712238473"),
|
||||
},
|
||||
{
|
||||
name: "Block 16",
|
||||
hash: newShaHash("00000000174a25bb399b009cc8deff1c4b3ea84df7e93affaaf60dc3416cc4f5"),
|
||||
hash: newHash("00000000174a25bb399b009cc8deff1c4b3ea84df7e93affaaf60dc3416cc4f5"),
|
||||
},
|
||||
{
|
||||
name: "Block 17",
|
||||
hash: newShaHash("000000003ff1d0d70147acfbef5d6a87460ff5bcfce807c2d5b6f0a66bfdf809"),
|
||||
hash: newHash("000000003ff1d0d70147acfbef5d6a87460ff5bcfce807c2d5b6f0a66bfdf809"),
|
||||
},
|
||||
{
|
||||
name: "Block 18",
|
||||
hash: newShaHash("000000008693e98cf893e4c85a446b410bb4dfa129bd1be582c09ed3f0261116"),
|
||||
hash: newHash("000000008693e98cf893e4c85a446b410bb4dfa129bd1be582c09ed3f0261116"),
|
||||
},
|
||||
{
|
||||
name: "Block 19",
|
||||
hash: newShaHash("00000000841cb802ca97cf20fb9470480cae9e5daa5d06b4a18ae2d5dd7f186f"),
|
||||
hash: newHash("00000000841cb802ca97cf20fb9470480cae9e5daa5d06b4a18ae2d5dd7f186f"),
|
||||
},
|
||||
{
|
||||
name: "Block 20",
|
||||
hash: newShaHash("0000000067a97a2a37b8f190a17f0221e9c3f4fa824ddffdc2e205eae834c8d7"),
|
||||
hash: newHash("0000000067a97a2a37b8f190a17f0221e9c3f4fa824ddffdc2e205eae834c8d7"),
|
||||
},
|
||||
{
|
||||
name: "Block 21",
|
||||
hash: newShaHash("000000006f016342d1275be946166cff975c8b27542de70a7113ac6d1ef3294f"),
|
||||
hash: newHash("000000006f016342d1275be946166cff975c8b27542de70a7113ac6d1ef3294f"),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -1560,7 +1560,7 @@ func testSync(tc *testContext) bool {
|
|||
iter := tc.manager.NewIterateRecentBlocks()
|
||||
for cont := iter != nil; cont; cont = iter.Prev() {
|
||||
wantHeight := int32(i) - int32(j) + 1
|
||||
var wantHash *wire.ShaHash
|
||||
var wantHash *chainhash.Hash
|
||||
if wantHeight == 0 {
|
||||
wantHash = chaincfg.MainNetParams.GenesisHash
|
||||
} else {
|
||||
|
@ -1613,7 +1613,7 @@ func testSync(tc *testContext) bool {
|
|||
// current block stamp clears the old recent blocks.
|
||||
blockStamp = waddrmgr.BlockStamp{
|
||||
Height: 100,
|
||||
Hash: *newShaHash("000000007bc154e0fa7ea32218a72fe2c1bb9f86cf8c9ebf9a715ed27fdb229a"),
|
||||
Hash: *newHash("000000007bc154e0fa7ea32218a72fe2c1bb9f86cf8c9ebf9a715ed27fdb229a"),
|
||||
}
|
||||
if err := tc.manager.SetSyncedTo(&blockStamp); err != nil {
|
||||
tc.t.Errorf("SetSyncedTo unexpected err on future block stamp: "+
|
||||
|
|
|
@ -7,7 +7,7 @@ package waddrmgr
|
|||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
)
|
||||
|
||||
|
@ -22,7 +22,7 @@ const (
|
|||
// synced to.
|
||||
type BlockStamp struct {
|
||||
Height int32
|
||||
Hash wire.ShaHash
|
||||
Hash chainhash.Hash
|
||||
}
|
||||
|
||||
// syncState houses the sync state of the manager. It consists of the recently
|
||||
|
@ -41,7 +41,7 @@ type syncState struct {
|
|||
recentHeight int32
|
||||
|
||||
// recentHashes is a list of the last several seen block hashes.
|
||||
recentHashes []wire.ShaHash
|
||||
recentHashes []chainhash.Hash
|
||||
}
|
||||
|
||||
// iter returns a BlockIterator that can be used to iterate over the recently
|
||||
|
@ -60,7 +60,7 @@ func (s *syncState) iter(mtx *sync.RWMutex) *BlockIterator {
|
|||
|
||||
// newSyncState returns a new sync state with the provided parameters.
|
||||
func newSyncState(startBlock, syncedTo *BlockStamp, recentHeight int32,
|
||||
recentHashes []wire.ShaHash) *syncState {
|
||||
recentHashes []chainhash.Hash) *syncState {
|
||||
|
||||
return &syncState{
|
||||
startBlock: *startBlock,
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"bytes"
|
||||
"sync"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
|
@ -221,7 +222,7 @@ func (s *NotificationServer) notifyUnminedTransaction(details *wtxmgr.TxDetails)
|
|||
}
|
||||
}
|
||||
|
||||
func (s *NotificationServer) notifyDetachedBlock(hash *wire.ShaHash) {
|
||||
func (s *NotificationServer) notifyDetachedBlock(hash *chainhash.Hash) {
|
||||
if s.currentTxNtfn == nil {
|
||||
s.currentTxNtfn = &TransactionNotifications{}
|
||||
}
|
||||
|
@ -328,16 +329,16 @@ func (s *NotificationServer) notifyAttachedBlock(block *wtxmgr.BlockMeta) {
|
|||
// changes to transactions, it needs a better name.
|
||||
type TransactionNotifications struct {
|
||||
AttachedBlocks []Block
|
||||
DetachedBlocks []*wire.ShaHash
|
||||
DetachedBlocks []*chainhash.Hash
|
||||
UnminedTransactions []TransactionSummary
|
||||
UnminedTransactionHashes []*wire.ShaHash
|
||||
UnminedTransactionHashes []*chainhash.Hash
|
||||
NewBalances []AccountBalance
|
||||
}
|
||||
|
||||
// Block contains the properties and all relevant transactions of an attached
|
||||
// block.
|
||||
type Block struct {
|
||||
Hash *wire.ShaHash
|
||||
Hash *chainhash.Hash
|
||||
Height int32
|
||||
Timestamp int64
|
||||
Transactions []TransactionSummary
|
||||
|
@ -346,7 +347,7 @@ type Block struct {
|
|||
// TransactionSummary contains a transaction relevant to the wallet and marks
|
||||
// which inputs and outputs were relevant.
|
||||
type TransactionSummary struct {
|
||||
Hash *wire.ShaHash
|
||||
Hash *chainhash.Hash
|
||||
Transaction []byte
|
||||
MyInputs []TransactionSummaryInput
|
||||
MyOutputs []TransactionSummaryOutput
|
||||
|
@ -438,14 +439,14 @@ func (c *TransactionNotificationsClient) Done() {
|
|||
// now spent. When spent, the notification includes the spending transaction's
|
||||
// hash and input index.
|
||||
type SpentnessNotifications struct {
|
||||
hash *wire.ShaHash
|
||||
spenderHash *wire.ShaHash
|
||||
hash *chainhash.Hash
|
||||
spenderHash *chainhash.Hash
|
||||
index uint32
|
||||
spenderIndex uint32
|
||||
}
|
||||
|
||||
// Hash returns the transaction hash of the spent output.
|
||||
func (n *SpentnessNotifications) Hash() *wire.ShaHash {
|
||||
func (n *SpentnessNotifications) Hash() *chainhash.Hash {
|
||||
return n.hash
|
||||
}
|
||||
|
||||
|
@ -456,13 +457,13 @@ func (n *SpentnessNotifications) Index() uint32 {
|
|||
|
||||
// Spender returns the spending transction's hash and input index, if any. If
|
||||
// the output is unspent, the final bool return is false.
|
||||
func (n *SpentnessNotifications) Spender() (*wire.ShaHash, uint32, bool) {
|
||||
func (n *SpentnessNotifications) Spender() (*chainhash.Hash, uint32, bool) {
|
||||
return n.spenderHash, n.spenderIndex, n.spenderHash != nil
|
||||
}
|
||||
|
||||
// notifyUnspentOutput notifies registered clients of a new unspent output that
|
||||
// is controlled by the wallet.
|
||||
func (s *NotificationServer) notifyUnspentOutput(account uint32, hash *wire.ShaHash, index uint32) {
|
||||
func (s *NotificationServer) notifyUnspentOutput(account uint32, hash *chainhash.Hash, index uint32) {
|
||||
defer s.mu.Unlock()
|
||||
s.mu.Lock()
|
||||
clients := s.spentness[account]
|
||||
|
@ -481,7 +482,7 @@ func (s *NotificationServer) notifyUnspentOutput(account uint32, hash *wire.ShaH
|
|||
// notifySpentOutput notifies registered clients that a previously-unspent
|
||||
// output is now spent, and includes the spender hash and input index in the
|
||||
// notification.
|
||||
func (s *NotificationServer) notifySpentOutput(account uint32, op *wire.OutPoint, spenderHash *wire.ShaHash, spenderIndex uint32) {
|
||||
func (s *NotificationServer) notifySpentOutput(account uint32, op *wire.OutPoint, spenderHash *chainhash.Hash, spenderIndex uint32) {
|
||||
defer s.mu.Unlock()
|
||||
s.mu.Lock()
|
||||
clients := s.spentness[account]
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/btcjson"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcrpcclient"
|
||||
|
@ -1086,7 +1087,7 @@ func (w *Wallet) ListAllTransactions() ([]btcjson.ListTransactionsResult, error)
|
|||
// BlockIdentifier identifies a block by either a height or a hash.
|
||||
type BlockIdentifier struct {
|
||||
height int32
|
||||
hash *wire.ShaHash
|
||||
hash *chainhash.Hash
|
||||
}
|
||||
|
||||
// NewBlockIdentifierFromHeight constructs a BlockIdentifier for a block height.
|
||||
|
@ -1095,7 +1096,7 @@ func NewBlockIdentifierFromHeight(height int32) *BlockIdentifier {
|
|||
}
|
||||
|
||||
// NewBlockIdentifierFromHash constructs a BlockIdentifier for a block hash.
|
||||
func NewBlockIdentifierFromHash(hash *wire.ShaHash) *BlockIdentifier {
|
||||
func NewBlockIdentifierFromHash(hash *chainhash.Hash) *BlockIdentifier {
|
||||
return &BlockIdentifier{hash: hash}
|
||||
}
|
||||
|
||||
|
@ -1208,7 +1209,7 @@ type AccountResult struct {
|
|||
// method for more details.
|
||||
type AccountsResult struct {
|
||||
Accounts []AccountResult
|
||||
CurrentBlockHash *wire.ShaHash
|
||||
CurrentBlockHash *chainhash.Hash
|
||||
CurrentBlockHeight int32
|
||||
}
|
||||
|
||||
|
@ -1674,7 +1675,7 @@ func (w *Wallet) ResendUnminedTxs() {
|
|||
// TODO(jrick): Check error for if this tx is a double spend,
|
||||
// remove it if so.
|
||||
log.Debugf("Could not resend transaction %v: %v",
|
||||
tx.TxSha(), err)
|
||||
tx.TxHash(), err)
|
||||
continue
|
||||
}
|
||||
log.Debugf("Resent unmined transaction %v", resp)
|
||||
|
@ -1859,7 +1860,7 @@ func (w *Wallet) TotalReceivedForAddr(addr btcutil.Address, minConf int32) (btcu
|
|||
// SendOutputs creates and sends payment transactions. It returns the
|
||||
// transaction hash upon success.
|
||||
func (w *Wallet) SendOutputs(outputs []*wire.TxOut, account uint32,
|
||||
minconf int32) (*wire.ShaHash, error) {
|
||||
minconf int32) (*chainhash.Hash, error) {
|
||||
|
||||
chainClient, err := w.requireChainClient()
|
||||
if err != nil {
|
||||
|
@ -2159,7 +2160,7 @@ func Open(db walletdb.DB, pubPass []byte, cbs *waddrmgr.OpenCallbacks, params *c
|
|||
quit: make(chan struct{}),
|
||||
}
|
||||
w.NtfnServer = newNotificationServer(w)
|
||||
w.TxStore.NotifyUnspent = func(hash *wire.ShaHash, index uint32) {
|
||||
w.TxStore.NotifyUnspent = func(hash *chainhash.Hash, index uint32) {
|
||||
w.NtfnServer.notifyUnspentOutput(0, hash, index)
|
||||
}
|
||||
return w, nil
|
||||
|
|
47
wtxmgr/db.go
47
wtxmgr/db.go
|
@ -10,6 +10,7 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
|
@ -57,11 +58,11 @@ const (
|
|||
LatestVersion = 1
|
||||
)
|
||||
|
||||
// This package makes assumptions that the width of a wire.ShaHash is always 32
|
||||
// bytes. If this is ever changed (unlikely for bitcoin, possible for alts),
|
||||
// This package makes assumptions that the width of a chainhash.Hash is always
|
||||
// 32 bytes. If this is ever changed (unlikely for bitcoin, possible for alts),
|
||||
// offsets have to be rewritten. Use a compile-time assertion that this
|
||||
// assumption holds true.
|
||||
var _ [32]byte = wire.ShaHash{}
|
||||
var _ [32]byte = chainhash.Hash{}
|
||||
|
||||
// Bucket names
|
||||
var (
|
||||
|
@ -120,7 +121,7 @@ func putMinedBalance(ns walletdb.Bucket, amt btcutil.Amount) error {
|
|||
//
|
||||
// The canonical transaction hash serialization is simply the hash.
|
||||
|
||||
func canonicalOutPoint(txHash *wire.ShaHash, index uint32) []byte {
|
||||
func canonicalOutPoint(txHash *chainhash.Hash, index uint32) []byte {
|
||||
k := make([]byte, 36)
|
||||
copy(k, txHash[:])
|
||||
byteOrder.PutUint32(k[32:36], index)
|
||||
|
@ -152,7 +153,7 @@ func keyBlockRecord(height int32) []byte {
|
|||
return k
|
||||
}
|
||||
|
||||
func valueBlockRecord(block *BlockMeta, txHash *wire.ShaHash) []byte {
|
||||
func valueBlockRecord(block *BlockMeta, txHash *chainhash.Hash) []byte {
|
||||
v := make([]byte, 76)
|
||||
copy(v, block.Hash[:])
|
||||
byteOrder.PutUint64(v[32:40], uint64(block.Time.Unix()))
|
||||
|
@ -163,7 +164,7 @@ func valueBlockRecord(block *BlockMeta, txHash *wire.ShaHash) []byte {
|
|||
|
||||
// appendRawBlockRecord returns a new block record value with a transaction
|
||||
// hash appended to the end and an incremented number of transactions.
|
||||
func appendRawBlockRecord(v []byte, txHash *wire.ShaHash) ([]byte, error) {
|
||||
func appendRawBlockRecord(v []byte, txHash *chainhash.Hash) ([]byte, error) {
|
||||
if len(v) < 44 {
|
||||
str := fmt.Sprintf("%s: short read (expected %d bytes, read %d)",
|
||||
bucketBlocks, 44, len(v))
|
||||
|
@ -184,7 +185,7 @@ func putRawBlockRecord(ns walletdb.Bucket, k, v []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func putBlockRecord(ns walletdb.Bucket, block *BlockMeta, txHash *wire.ShaHash) error {
|
||||
func putBlockRecord(ns walletdb.Bucket, block *BlockMeta, txHash *chainhash.Hash) error {
|
||||
k := keyBlockRecord(block.Height)
|
||||
v := valueBlockRecord(block, txHash)
|
||||
return putRawBlockRecord(ns, k, v)
|
||||
|
@ -219,7 +220,7 @@ func readRawBlockRecord(k, v []byte, block *blockRecord) error {
|
|||
return storeError(ErrData, str, nil)
|
||||
}
|
||||
numTransactions := int(byteOrder.Uint32(v[40:44]))
|
||||
expectedLen := 44 + wire.HashSize*numTransactions
|
||||
expectedLen := 44 + chainhash.HashSize*numTransactions
|
||||
if len(v) < expectedLen {
|
||||
str := fmt.Sprintf("%s: short read (expected %d bytes, read %d)",
|
||||
bucketBlocks, expectedLen, len(v))
|
||||
|
@ -229,11 +230,11 @@ func readRawBlockRecord(k, v []byte, block *blockRecord) error {
|
|||
block.Height = int32(byteOrder.Uint32(k))
|
||||
copy(block.Hash[:], v)
|
||||
block.Time = time.Unix(int64(byteOrder.Uint64(v[32:40])), 0)
|
||||
block.transactions = make([]wire.ShaHash, numTransactions)
|
||||
block.transactions = make([]chainhash.Hash, numTransactions)
|
||||
off := 44
|
||||
for i := range block.transactions {
|
||||
copy(block.transactions[i][:], v[off:])
|
||||
off += wire.HashSize
|
||||
off += chainhash.HashSize
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -350,7 +351,7 @@ func (it *blockIterator) delete() error {
|
|||
// [0:8] Received time (8 bytes)
|
||||
// [8:] Serialized transaction (varies)
|
||||
|
||||
func keyTxRecord(txHash *wire.ShaHash, block *Block) []byte {
|
||||
func keyTxRecord(txHash *chainhash.Hash, block *Block) []byte {
|
||||
k := make([]byte, 68)
|
||||
copy(k, txHash[:])
|
||||
byteOrder.PutUint32(k[32:36], uint32(block.Height))
|
||||
|
@ -400,7 +401,7 @@ func putRawTxRecord(ns walletdb.Bucket, k, v []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func readRawTxRecord(txHash *wire.ShaHash, v []byte, rec *TxRecord) error {
|
||||
func readRawTxRecord(txHash *chainhash.Hash, v []byte, rec *TxRecord) error {
|
||||
if len(v) < 8 {
|
||||
str := fmt.Sprintf("%s: short read (expected %d bytes, read %d)",
|
||||
bucketTxRecords, 8, len(v))
|
||||
|
@ -428,7 +429,7 @@ func readRawTxRecordBlock(k []byte, block *Block) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func fetchTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash, block *Block) (*TxRecord, error) {
|
||||
func fetchTxRecord(ns walletdb.Bucket, txHash *chainhash.Hash, block *Block) (*TxRecord, error) {
|
||||
k := keyTxRecord(txHash, block)
|
||||
v := ns.Bucket(bucketTxRecords).Get(k)
|
||||
|
||||
|
@ -453,7 +454,7 @@ func fetchRawTxRecordPkScript(k, v []byte, index uint32) ([]byte, error) {
|
|||
return rec.MsgTx.TxOut[index].PkScript, nil
|
||||
}
|
||||
|
||||
func existsTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash, block *Block) (k, v []byte) {
|
||||
func existsTxRecord(ns walletdb.Bucket, txHash *chainhash.Hash, block *Block) (k, v []byte) {
|
||||
k = keyTxRecord(txHash, block)
|
||||
v = ns.Bucket(bucketTxRecords).Get(k)
|
||||
return
|
||||
|
@ -463,7 +464,7 @@ func existsRawTxRecord(ns walletdb.Bucket, k []byte) (v []byte) {
|
|||
return ns.Bucket(bucketTxRecords).Get(k)
|
||||
}
|
||||
|
||||
func deleteTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash, block *Block) error {
|
||||
func deleteTxRecord(ns walletdb.Bucket, txHash *chainhash.Hash, block *Block) error {
|
||||
k := keyTxRecord(txHash, block)
|
||||
return ns.Bucket(bucketTxRecords).Delete(k)
|
||||
}
|
||||
|
@ -471,7 +472,7 @@ func deleteTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash, block *Block) erro
|
|||
// latestTxRecord searches for the newest recorded mined transaction record with
|
||||
// a matching hash. In case of a hash collision, the record from the newest
|
||||
// block is returned. Returns (nil, nil) if no matching transactions are found.
|
||||
func latestTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash) (k, v []byte) {
|
||||
func latestTxRecord(ns walletdb.Bucket, txHash *chainhash.Hash) (k, v []byte) {
|
||||
prefix := txHash[:]
|
||||
c := ns.Bucket(bucketTxRecords).Cursor()
|
||||
ck, cv := c.Seek(prefix)
|
||||
|
@ -508,7 +509,7 @@ func latestTxRecord(ns walletdb.Bucket, txHash *wire.ShaHash) (k, v []byte) {
|
|||
// The optional debits key is only included if the credit is spent by another
|
||||
// mined debit.
|
||||
|
||||
func keyCredit(txHash *wire.ShaHash, index uint32, block *Block) []byte {
|
||||
func keyCredit(txHash *chainhash.Hash, index uint32, block *Block) []byte {
|
||||
k := make([]byte, 72)
|
||||
copy(k, txHash[:])
|
||||
byteOrder.PutUint32(k[32:36], uint32(block.Height))
|
||||
|
@ -636,7 +637,7 @@ func unspendRawCredit(ns walletdb.Bucket, k []byte) (btcutil.Amount, error) {
|
|||
return btcutil.Amount(byteOrder.Uint64(v[0:8])), nil
|
||||
}
|
||||
|
||||
func existsCredit(ns walletdb.Bucket, txHash *wire.ShaHash, index uint32, block *Block) (k, v []byte) {
|
||||
func existsCredit(ns walletdb.Bucket, txHash *chainhash.Hash, index uint32, block *Block) (k, v []byte) {
|
||||
k = keyCredit(txHash, index, block)
|
||||
v = ns.Bucket(bucketCredits).Get(k)
|
||||
return
|
||||
|
@ -835,7 +836,7 @@ func deleteRawUnspent(ns walletdb.Bucket, k []byte) error {
|
|||
// [44:76] Block hash (32 bytes)
|
||||
// [76:80] Output index (4 bytes)
|
||||
|
||||
func keyDebit(txHash *wire.ShaHash, index uint32, block *Block) []byte {
|
||||
func keyDebit(txHash *chainhash.Hash, index uint32, block *Block) []byte {
|
||||
k := make([]byte, 72)
|
||||
copy(k, txHash[:])
|
||||
byteOrder.PutUint32(k[32:36], uint32(block.Height))
|
||||
|
@ -844,7 +845,7 @@ func keyDebit(txHash *wire.ShaHash, index uint32, block *Block) []byte {
|
|||
return k
|
||||
}
|
||||
|
||||
func putDebit(ns walletdb.Bucket, txHash *wire.ShaHash, index uint32, amount btcutil.Amount, block *Block, credKey []byte) error {
|
||||
func putDebit(ns walletdb.Bucket, txHash *chainhash.Hash, index uint32, amount btcutil.Amount, block *Block, credKey []byte) error {
|
||||
k := keyDebit(txHash, index, block)
|
||||
|
||||
v := make([]byte, 80)
|
||||
|
@ -867,7 +868,7 @@ func extractRawDebitCreditKey(v []byte) []byte {
|
|||
// existsDebit checks for the existance of a debit. If found, the debit and
|
||||
// previous credit keys are returned. If the debit does not exist, both keys
|
||||
// are nil.
|
||||
func existsDebit(ns walletdb.Bucket, txHash *wire.ShaHash, index uint32, block *Block) (k, credKey []byte, err error) {
|
||||
func existsDebit(ns walletdb.Bucket, txHash *chainhash.Hash, index uint32, block *Block) (k, credKey []byte, err error) {
|
||||
k = keyDebit(txHash, index, block)
|
||||
v := ns.Bucket(bucketDebits).Get(k)
|
||||
if v == nil {
|
||||
|
@ -972,7 +973,7 @@ func putRawUnmined(ns walletdb.Bucket, k, v []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func readRawUnminedHash(k []byte, txHash *wire.ShaHash) error {
|
||||
func readRawUnminedHash(k []byte, txHash *chainhash.Hash) error {
|
||||
if len(k) < 32 {
|
||||
str := "short unmined key"
|
||||
return storeError(ErrData, str, nil)
|
||||
|
@ -1092,7 +1093,7 @@ type unminedCreditIterator struct {
|
|||
err error
|
||||
}
|
||||
|
||||
func makeUnminedCreditIterator(ns walletdb.Bucket, txHash *wire.ShaHash) unminedCreditIterator {
|
||||
func makeUnminedCreditIterator(ns walletdb.Bucket, txHash *chainhash.Hash) unminedCreditIterator {
|
||||
c := ns.Bucket(bucketUnminedCredits).Cursor()
|
||||
return unminedCreditIterator{c: c, prefix: txHash[:]}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ package wtxmgr_test
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||
)
|
||||
|
@ -22,7 +23,7 @@ var (
|
|||
)
|
||||
|
||||
func init() {
|
||||
tx := spendOutput(&wire.ShaHash{}, 0, 10e8)
|
||||
tx := spendOutput(&chainhash.Hash{}, 0, 10e8)
|
||||
rec, err := wtxmgr.NewTxRecordFromMsgTx(tx, timeNow())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
|
@ -4,19 +4,17 @@
|
|||
|
||||
package wtxmgr
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
)
|
||||
import "github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
|
||||
type graphNode struct {
|
||||
value *TxRecord
|
||||
outEdges []*wire.ShaHash
|
||||
outEdges []*chainhash.Hash
|
||||
inDegree int
|
||||
}
|
||||
|
||||
type hashGraph map[wire.ShaHash]graphNode
|
||||
type hashGraph map[chainhash.Hash]graphNode
|
||||
|
||||
func makeGraph(set map[wire.ShaHash]*TxRecord) hashGraph {
|
||||
func makeGraph(set map[chainhash.Hash]*TxRecord) hashGraph {
|
||||
graph := make(hashGraph)
|
||||
|
||||
for _, rec := range set {
|
||||
|
@ -83,7 +81,7 @@ func graphRoots(graph hashGraph) []*TxRecord {
|
|||
|
||||
// dependencySort topologically sorts a set of transaction records by their
|
||||
// dependency order. It is implemented using Kahn's algorithm.
|
||||
func dependencySort(txs map[wire.ShaHash]*TxRecord) []*TxRecord {
|
||||
func dependencySort(txs map[chainhash.Hash]*TxRecord) []*TxRecord {
|
||||
graph := makeGraph(txs)
|
||||
s := graphRoots(graph)
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ package wtxmgr
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
)
|
||||
|
@ -42,7 +42,7 @@ type TxDetails struct {
|
|||
|
||||
// minedTxDetails fetches the TxDetails for the mined transaction with hash
|
||||
// txHash and the passed tx record key and value.
|
||||
func (s *Store) minedTxDetails(ns walletdb.Bucket, txHash *wire.ShaHash, recKey, recVal []byte) (*TxDetails, error) {
|
||||
func (s *Store) minedTxDetails(ns walletdb.Bucket, txHash *chainhash.Hash, recKey, recVal []byte) (*TxDetails, error) {
|
||||
var details TxDetails
|
||||
|
||||
// Parse transaction record k/v, lookup the full block record for the
|
||||
|
@ -94,7 +94,7 @@ func (s *Store) minedTxDetails(ns walletdb.Bucket, txHash *wire.ShaHash, recKey,
|
|||
|
||||
// unminedTxDetails fetches the TxDetails for the unmined transaction with the
|
||||
// hash txHash and the passed unmined record value.
|
||||
func (s *Store) unminedTxDetails(ns walletdb.Bucket, txHash *wire.ShaHash, v []byte) (*TxDetails, error) {
|
||||
func (s *Store) unminedTxDetails(ns walletdb.Bucket, txHash *chainhash.Hash, v []byte) (*TxDetails, error) {
|
||||
details := TxDetails{
|
||||
Block: BlockMeta{Block: Block{Height: -1}},
|
||||
}
|
||||
|
@ -166,7 +166,7 @@ func (s *Store) unminedTxDetails(ns walletdb.Bucket, txHash *wire.ShaHash, v []b
|
|||
//
|
||||
// Not finding a transaction with this hash is not an error. In this case,
|
||||
// a nil TxDetails is returned.
|
||||
func (s *Store) TxDetails(txHash *wire.ShaHash) (*TxDetails, error) {
|
||||
func (s *Store) TxDetails(txHash *chainhash.Hash) (*TxDetails, error) {
|
||||
var details *TxDetails
|
||||
err := scopedView(s.namespace, func(ns walletdb.Bucket) error {
|
||||
var err error
|
||||
|
@ -197,7 +197,7 @@ func (s *Store) TxDetails(txHash *wire.ShaHash) (*TxDetails, error) {
|
|||
//
|
||||
// Not finding a transaction with this hash from this block is not an error. In
|
||||
// this case, a nil TxDetails is returned.
|
||||
func (s *Store) UniqueTxDetails(txHash *wire.ShaHash, block *Block) (*TxDetails, error) {
|
||||
func (s *Store) UniqueTxDetails(txHash *chainhash.Hash, block *Block) (*TxDetails, error) {
|
||||
var details *TxDetails
|
||||
err := scopedView(s.namespace, func(ns walletdb.Bucket) error {
|
||||
var err error
|
||||
|
@ -234,7 +234,7 @@ func (s *Store) rangeUnminedTransactions(ns walletdb.Bucket, f func([]TxDetails)
|
|||
return storeError(ErrData, str, nil)
|
||||
}
|
||||
|
||||
var txHash wire.ShaHash
|
||||
var txHash chainhash.Hash
|
||||
copy(txHash[:], k)
|
||||
detail, err := s.unminedTxDetails(ns, &txHash, v)
|
||||
if err != nil {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2015 The btcsuite developers
|
||||
// Copyright (c) 2015-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -11,6 +11,7 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
. "github.com/btcsuite/btcwallet/wtxmgr"
|
||||
|
@ -19,12 +20,12 @@ import (
|
|||
type queryState struct {
|
||||
// slice items are ordered by height, mempool comes last.
|
||||
blocks [][]TxDetails
|
||||
txDetails map[wire.ShaHash][]TxDetails
|
||||
txDetails map[chainhash.Hash][]TxDetails
|
||||
}
|
||||
|
||||
func newQueryState() *queryState {
|
||||
return &queryState{
|
||||
txDetails: make(map[wire.ShaHash][]TxDetails),
|
||||
txDetails: make(map[chainhash.Hash][]TxDetails),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,7 +38,7 @@ func (q *queryState) deepCopy() *queryState {
|
|||
}
|
||||
cpy.blocks = append(cpy.blocks, cpyDetails)
|
||||
}
|
||||
cpy.txDetails = make(map[wire.ShaHash][]TxDetails)
|
||||
cpy.txDetails = make(map[chainhash.Hash][]TxDetails)
|
||||
for txHash, details := range q.txDetails {
|
||||
detailsSlice := make([]TxDetails, len(details))
|
||||
for i, detail := range details {
|
||||
|
@ -282,7 +283,7 @@ func TestStoreQueries(t *testing.T) {
|
|||
}
|
||||
|
||||
// Insert an unmined transaction. Mark no credits yet.
|
||||
txA := spendOutput(&wire.ShaHash{}, 0, 100e8)
|
||||
txA := spendOutput(&chainhash.Hash{}, 0, 100e8)
|
||||
recA := newTxRecordFromMsgTx(txA, timeNow())
|
||||
newState := lastState.deepCopy()
|
||||
newState.blocks = [][]TxDetails{
|
||||
|
@ -412,7 +413,7 @@ func TestStoreQueries(t *testing.T) {
|
|||
t.Errorf("Expected no details, found details for tx %v", missingDetails.Hash)
|
||||
}
|
||||
missingUniqueTests := []struct {
|
||||
hash *wire.ShaHash
|
||||
hash *chainhash.Hash
|
||||
block *Block
|
||||
}{
|
||||
{&missingRec.Hash, &b100.Block},
|
||||
|
@ -554,7 +555,7 @@ func TestPreviousPkScripts(t *testing.T) {
|
|||
|
||||
// Create a transaction spending two prevous outputs and generating two
|
||||
// new outputs the passed pkScipts. Spends outputs 0 and 1 from prevHash.
|
||||
buildTx := func(prevHash *wire.ShaHash, script0, script1 []byte) *wire.MsgTx {
|
||||
buildTx := func(prevHash *chainhash.Hash, script0, script1 []byte) *wire.MsgTx {
|
||||
return &wire.MsgTx{
|
||||
TxIn: []*wire.TxIn{
|
||||
&wire.TxIn{PreviousOutPoint: wire.OutPoint{
|
||||
|
@ -582,7 +583,7 @@ func TestPreviousPkScripts(t *testing.T) {
|
|||
|
||||
// Create transactions with the fake output scripts.
|
||||
var (
|
||||
txA = buildTx(&wire.ShaHash{}, scriptA0, scriptA1)
|
||||
txA = buildTx(&chainhash.Hash{}, scriptA0, scriptA1)
|
||||
recA = newTxRecordFromMsgTx(txA)
|
||||
txB = buildTx(&recA.Hash, scriptB0, scriptB1)
|
||||
recB = newTxRecordFromMsgTx(txB)
|
||||
|
|
19
wtxmgr/tx.go
19
wtxmgr/tx.go
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013-2015 The btcsuite developers
|
||||
// Copyright (c) 2013-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -9,6 +9,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/blockchain"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
|
@ -17,7 +18,7 @@ import (
|
|||
// Block contains the minimum amount of data to uniquely identify any block on
|
||||
// either the best or side chain.
|
||||
type Block struct {
|
||||
Hash wire.ShaHash
|
||||
Hash chainhash.Hash
|
||||
Height int32
|
||||
}
|
||||
|
||||
|
@ -34,7 +35,7 @@ type BlockMeta struct {
|
|||
type blockRecord struct {
|
||||
Block
|
||||
Time time.Time
|
||||
transactions []wire.ShaHash
|
||||
transactions []chainhash.Hash
|
||||
}
|
||||
|
||||
// incidence records the block hash and blockchain height of a mined transaction.
|
||||
|
@ -42,7 +43,7 @@ type blockRecord struct {
|
|||
// transaction (duplicate transaction hashes are allowed), the incidence is used
|
||||
// instead.
|
||||
type incidence struct {
|
||||
txHash wire.ShaHash
|
||||
txHash chainhash.Hash
|
||||
block Block
|
||||
}
|
||||
|
||||
|
@ -56,7 +57,7 @@ type indexedIncidence struct {
|
|||
// debit records the debits a transaction record makes from previous wallet
|
||||
// transaction credits.
|
||||
type debit struct {
|
||||
txHash wire.ShaHash
|
||||
txHash chainhash.Hash
|
||||
index uint32
|
||||
amount btcutil.Amount
|
||||
spends indexedIncidence
|
||||
|
@ -74,7 +75,7 @@ type credit struct {
|
|||
// TxRecord represents a transaction managed by the Store.
|
||||
type TxRecord struct {
|
||||
MsgTx wire.MsgTx
|
||||
Hash wire.ShaHash
|
||||
Hash chainhash.Hash
|
||||
Received time.Time
|
||||
SerializedTx []byte // Optional: may be nil
|
||||
}
|
||||
|
@ -92,7 +93,7 @@ func NewTxRecord(serializedTx []byte, received time.Time) (*TxRecord, error) {
|
|||
str := "failed to deserialize transaction"
|
||||
return nil, storeError(ErrInput, str, err)
|
||||
}
|
||||
copy(rec.Hash[:], wire.DoubleSha256(serializedTx))
|
||||
copy(rec.Hash[:], chainhash.DoubleHashB(serializedTx))
|
||||
return rec, nil
|
||||
}
|
||||
|
||||
|
@ -110,7 +111,7 @@ func NewTxRecordFromMsgTx(msgTx *wire.MsgTx, received time.Time) (*TxRecord, err
|
|||
Received: received,
|
||||
SerializedTx: buf.Bytes(),
|
||||
}
|
||||
copy(rec.Hash[:], wire.DoubleSha256(rec.SerializedTx))
|
||||
copy(rec.Hash[:], chainhash.DoubleHashB(rec.SerializedTx))
|
||||
return rec, nil
|
||||
}
|
||||
|
||||
|
@ -133,7 +134,7 @@ type Store struct {
|
|||
|
||||
// Event callbacks. These execute in the same goroutine as the wtxmgr
|
||||
// caller.
|
||||
NotifyUnspent func(hash *wire.ShaHash, index uint32)
|
||||
NotifyUnspent func(hash *chainhash.Hash, index uint32)
|
||||
}
|
||||
|
||||
// Open opens the wallet transaction store from a walletdb namespace. If the
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2013-2015 The btcsuite developers
|
||||
// Copyright (c) 2013-2016 The btcsuite developers
|
||||
// Use of this source code is governed by an ISC
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
|
@ -14,6 +14,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/blockchain"
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
|
@ -26,7 +27,7 @@ import (
|
|||
var (
|
||||
TstRecvSerializedTx, _ = hex.DecodeString("010000000114d9ff358894c486b4ae11c2a8cf7851b1df64c53d2e511278eff17c22fb7373000000008c493046022100995447baec31ee9f6d4ec0e05cb2a44f6b817a99d5f6de167d1c75354a946410022100c9ffc23b64d770b0e01e7ff4d25fbc2f1ca8091053078a247905c39fce3760b601410458b8e267add3c1e374cf40f1de02b59213a82e1d84c2b94096e22e2f09387009c96debe1d0bcb2356ffdcf65d2a83d4b34e72c62eccd8490dbf2110167783b2bffffffff0280969800000000001976a914479ed307831d0ac19ebc5f63de7d5f1a430ddb9d88ac38bfaa00000000001976a914dadf9e3484f28b385ddeaa6c575c0c0d18e9788a88ac00000000")
|
||||
TstRecvTx, _ = btcutil.NewTxFromBytes(TstRecvSerializedTx)
|
||||
TstRecvTxSpendingTxBlockHash, _ = wire.NewShaHashFromStr("00000000000000017188b968a371bab95aa43522665353b646e41865abae02a4")
|
||||
TstRecvTxSpendingTxBlockHash, _ = chainhash.NewHashFromStr("00000000000000017188b968a371bab95aa43522665353b646e41865abae02a4")
|
||||
TstRecvAmt = int64(10000000)
|
||||
TstRecvTxBlockDetails = &BlockMeta{
|
||||
Block: Block{Hash: *TstRecvTxSpendingTxBlockHash, Height: 276425},
|
||||
|
@ -39,7 +40,7 @@ var (
|
|||
TstSpendingSerializedTx, _ = hex.DecodeString("0100000003ad3fba7ebd67c09baa9538898e10d6726dcb8eadb006be0c7388c8e46d69d361000000006b4830450220702c4fbde5532575fed44f8d6e8c3432a2a9bd8cff2f966c3a79b2245a7c88db02210095d6505a57e350720cb52b89a9b56243c15ddfcea0596aedc1ba55d9fb7d5aa0012103cccb5c48a699d3efcca6dae277fee6b82e0229ed754b742659c3acdfed2651f9ffffffffdbd36173f5610e34de5c00ed092174603761595d90190f790e79cda3e5b45bc2010000006b483045022000fa20735e5875e64d05bed43d81b867f3bd8745008d3ff4331ef1617eac7c44022100ad82261fc57faac67fc482a37b6bf18158da0971e300abf5fe2f9fd39e107f58012102d4e1caf3e022757512c204bf09ff56a9981df483aba3c74bb60d3612077c9206ffffffff65536c9d964b6f89b8ef17e83c6666641bc495cb27bab60052f76cd4556ccd0d040000006a473044022068e3886e0299ffa69a1c3ee40f8b6700f5f6d463a9cf9dbf22c055a131fc4abc02202b58957fe19ff1be7a84c458d08016c53fbddec7184ac5e633f2b282ae3420ae012103b4e411b81d32a69fb81178a8ea1abaa12f613336923ee920ffbb1b313af1f4d2ffffffff02ab233200000000001976a91418808b2fbd8d2c6d022aed5cd61f0ce6c0a4cbb688ac4741f011000000001976a914f081088a300c80ce36b717a9914ab5ec8a7d283988ac00000000")
|
||||
TstSpendingTx, _ = btcutil.NewTxFromBytes(TstSpendingSerializedTx)
|
||||
TstSpendingTxBlockHeight = int32(279143)
|
||||
TstSignedTxBlockHash, _ = wire.NewShaHashFromStr("00000000000000017188b968a371bab95aa43522665353b646e41865abae02a4")
|
||||
TstSignedTxBlockHash, _ = chainhash.NewHashFromStr("00000000000000017188b968a371bab95aa43522665353b646e41865abae02a4")
|
||||
TstSignedTxBlockDetails = &BlockMeta{
|
||||
Block: Block{Hash: *TstSignedTxBlockHash, Height: TstSpendingTxBlockHeight},
|
||||
Time: time.Unix(1389114091, 0),
|
||||
|
@ -109,7 +110,7 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
// Create a "signed" (with invalid sigs) tx that spends output 0 of
|
||||
// the double spend.
|
||||
spendingTx := wire.NewMsgTx()
|
||||
spendingTxIn := wire.NewTxIn(wire.NewOutPoint(TstDoubleSpendTx.Sha(), 0), []byte{0, 1, 2, 3, 4})
|
||||
spendingTxIn := wire.NewTxIn(wire.NewOutPoint(TstDoubleSpendTx.Hash(), 0), []byte{0, 1, 2, 3, 4})
|
||||
spendingTx.AddTxIn(spendingTxIn)
|
||||
spendingTxOut1 := wire.NewTxOut(1e7, []byte{5, 6, 7, 8, 9})
|
||||
spendingTxOut2 := wire.NewTxOut(9e7, []byte{10, 11, 12, 13, 14})
|
||||
|
@ -124,7 +125,7 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
f func(*Store) (*Store, error)
|
||||
bal, unc btcutil.Amount
|
||||
unspents map[wire.OutPoint]struct{}
|
||||
unmined map[wire.ShaHash]struct{}
|
||||
unmined map[chainhash.Hash]struct{}
|
||||
}{
|
||||
{
|
||||
name: "new store",
|
||||
|
@ -134,7 +135,7 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
bal: 0,
|
||||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "txout insert",
|
||||
|
@ -155,12 +156,12 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstRecvTx.MsgTx().TxOut[0].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstRecvTx.Sha(),
|
||||
Hash: *TstRecvTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstRecvTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstRecvTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -182,12 +183,12 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstRecvTx.MsgTx().TxOut[0].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstRecvTx.Sha(),
|
||||
Hash: *TstRecvTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstRecvTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstRecvTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -209,11 +210,11 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstRecvTx.Sha(),
|
||||
Hash: *TstRecvTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "insert duplicate confirmed",
|
||||
|
@ -234,11 +235,11 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstRecvTx.Sha(),
|
||||
Hash: *TstRecvTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "rollback confirmed credit",
|
||||
|
@ -250,12 +251,12 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstRecvTx.MsgTx().TxOut[0].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstRecvTx.Sha(),
|
||||
Hash: *TstRecvTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstRecvTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstRecvTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -277,11 +278,11 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstDoubleSpendTx.Sha(),
|
||||
Hash: *TstDoubleSpendTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "insert unconfirmed debit",
|
||||
|
@ -296,8 +297,8 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
bal: 0,
|
||||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -313,8 +314,8 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
bal: 0,
|
||||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -336,12 +337,12 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstSpendingTx.MsgTx().TxOut[0].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -362,16 +363,16 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstSpendingTx.MsgTx().TxOut[0].Value + TstSpendingTx.MsgTx().TxOut[1].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 1,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -388,15 +389,15 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 1,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "rollback after spending tx",
|
||||
|
@ -408,15 +409,15 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 1,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
{
|
||||
name: "rollback spending tx block",
|
||||
|
@ -428,16 +429,16 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
unc: btcutil.Amount(TstSpendingTx.MsgTx().TxOut[0].Value + TstSpendingTx.MsgTx().TxOut[1].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 0,
|
||||
}: {},
|
||||
wire.OutPoint{
|
||||
Hash: *TstSpendingTx.Sha(),
|
||||
Hash: *TstSpendingTx.Hash(),
|
||||
Index: 1,
|
||||
}: {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -449,12 +450,12 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
bal: 0,
|
||||
unc: btcutil.Amount(TstSpendingTx.MsgTx().TxOut[0].Value + TstSpendingTx.MsgTx().TxOut[1].Value),
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
*wire.NewOutPoint(TstSpendingTx.Sha(), 0): {},
|
||||
*wire.NewOutPoint(TstSpendingTx.Sha(), 1): {},
|
||||
*wire.NewOutPoint(TstSpendingTx.Hash(), 0): {},
|
||||
*wire.NewOutPoint(TstSpendingTx.Hash(), 1): {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{
|
||||
*TstDoubleSpendTx.Sha(): {},
|
||||
*TstSpendingTx.Sha(): {},
|
||||
unmined: map[chainhash.Hash]struct{}{
|
||||
*TstDoubleSpendTx.Hash(): {},
|
||||
*TstSpendingTx.Hash(): {},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -474,9 +475,9 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
bal: btcutil.Amount(TstRecvTx.MsgTx().TxOut[0].Value),
|
||||
unc: 0,
|
||||
unspents: map[wire.OutPoint]struct{}{
|
||||
*wire.NewOutPoint(TstRecvTx.Sha(), 0): {},
|
||||
*wire.NewOutPoint(TstRecvTx.Hash(), 0): {},
|
||||
},
|
||||
unmined: map[wire.ShaHash]struct{}{},
|
||||
unmined: map[chainhash.Hash]struct{}{},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -529,7 +530,7 @@ func TestInsertsCreditsDebitsRollbacks(t *testing.T) {
|
|||
t.Fatalf("%s: cannot load unmined transactions: %v", test.name, err)
|
||||
}
|
||||
for _, tx := range unmined {
|
||||
txHash := tx.TxSha()
|
||||
txHash := tx.TxHash()
|
||||
if _, ok := test.unmined[txHash]; !ok {
|
||||
t.Fatalf("%s: unexpected unmined tx: %v", test.name, txHash)
|
||||
}
|
||||
|
@ -593,7 +594,7 @@ func TestFindingSpentCredits(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
op := wire.NewOutPoint(TstSpendingTx.Sha(), 0)
|
||||
op := wire.NewOutPoint(TstSpendingTx.Hash(), 0)
|
||||
if unspents[0].OutPoint != *op {
|
||||
t.Fatal("unspent outpoint doesn't match expected")
|
||||
}
|
||||
|
@ -616,7 +617,7 @@ func newCoinBase(outputValues ...int64) *wire.MsgTx {
|
|||
return &tx
|
||||
}
|
||||
|
||||
func spendOutput(txHash *wire.ShaHash, index uint32, outputValues ...int64) *wire.MsgTx {
|
||||
func spendOutput(txHash *chainhash.Hash, index uint32, outputValues ...int64) *wire.MsgTx {
|
||||
tx := wire.MsgTx{
|
||||
TxIn: []*wire.TxIn{
|
||||
&wire.TxIn{
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
package wtxmgr
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcwallet/walletdb"
|
||||
)
|
||||
|
@ -126,7 +127,7 @@ func (s *Store) removeConflict(ns walletdb.Bucket, rec *TxRecord) error {
|
|||
// which are not known to have been mined in a block. Transactions are
|
||||
// guaranteed to be sorted by their dependency order.
|
||||
func (s *Store) UnminedTxs() ([]*wire.MsgTx, error) {
|
||||
var recSet map[wire.ShaHash]*TxRecord
|
||||
var recSet map[chainhash.Hash]*TxRecord
|
||||
err := scopedView(s.namespace, func(ns walletdb.Bucket) error {
|
||||
var err error
|
||||
recSet, err = s.unminedTxRecords(ns)
|
||||
|
@ -144,10 +145,10 @@ func (s *Store) UnminedTxs() ([]*wire.MsgTx, error) {
|
|||
return txs, nil
|
||||
}
|
||||
|
||||
func (s *Store) unminedTxRecords(ns walletdb.Bucket) (map[wire.ShaHash]*TxRecord, error) {
|
||||
unmined := make(map[wire.ShaHash]*TxRecord)
|
||||
func (s *Store) unminedTxRecords(ns walletdb.Bucket) (map[chainhash.Hash]*TxRecord, error) {
|
||||
unmined := make(map[chainhash.Hash]*TxRecord)
|
||||
err := ns.Bucket(bucketUnmined).ForEach(func(k, v []byte) error {
|
||||
var txHash wire.ShaHash
|
||||
var txHash chainhash.Hash
|
||||
err := readRawUnminedHash(k, &txHash)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -166,8 +167,8 @@ func (s *Store) unminedTxRecords(ns walletdb.Bucket) (map[wire.ShaHash]*TxRecord
|
|||
|
||||
// UnminedTxHashes returns the hashes of all transactions not known to have been
|
||||
// mined in a block.
|
||||
func (s *Store) UnminedTxHashes() ([]*wire.ShaHash, error) {
|
||||
var hashes []*wire.ShaHash
|
||||
func (s *Store) UnminedTxHashes() ([]*chainhash.Hash, error) {
|
||||
var hashes []*chainhash.Hash
|
||||
err := scopedView(s.namespace, func(ns walletdb.Bucket) error {
|
||||
var err error
|
||||
hashes, err = s.unminedTxHashes(ns)
|
||||
|
@ -176,10 +177,10 @@ func (s *Store) UnminedTxHashes() ([]*wire.ShaHash, error) {
|
|||
return hashes, err
|
||||
}
|
||||
|
||||
func (s *Store) unminedTxHashes(ns walletdb.Bucket) ([]*wire.ShaHash, error) {
|
||||
var hashes []*wire.ShaHash
|
||||
func (s *Store) unminedTxHashes(ns walletdb.Bucket) ([]*chainhash.Hash, error) {
|
||||
var hashes []*chainhash.Hash
|
||||
err := ns.Bucket(bucketUnmined).ForEach(func(k, v []byte) error {
|
||||
hash := new(wire.ShaHash)
|
||||
hash := new(chainhash.Hash)
|
||||
err := readRawUnminedHash(k, hash)
|
||||
if err == nil {
|
||||
hashes = append(hashes, hash)
|
||||
|
|
Loading…
Add table
Reference in a new issue