multi: update btcsuite API's to latest upstream changes

This commit makes a large number of minor changes concerning API usage
within the deamon to match the latest version on the upstream btcsuite
libraries.

The major changes are the switch from wire.ShaHash to chainhash.Hash,
and that wire.NewMsgTx() now takes a paramter indicating the version of
the transaction to be created.
This commit is contained in:
Olaoluwa Osuntokun 2017-01-05 13:56:27 -08:00
parent 5d37c1d9e7
commit 5affed38fc
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
40 changed files with 234 additions and 211 deletions

View File

@ -8,6 +8,7 @@ import (
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -292,7 +293,7 @@ func (b *breachArbiter) exactRetribution(confChan *chainntnfs.ConfirmationEvent,
// dispatched once the justice tx is confirmed. After confirmation we // dispatched once the justice tx is confirmed. After confirmation we
// notify the caller that initiated the retribution work low that the // notify the caller that initiated the retribution work low that the
// deed has been done. // deed has been done.
justiceTXID := justiceTx.TxSha() justiceTXID := justiceTx.TxHash()
confChan, err = b.notifier.RegisterConfirmationsNtfn(&justiceTXID, 1) confChan, err = b.notifier.RegisterConfirmationsNtfn(&justiceTXID, 1)
if err != nil { if err != nil {
brarLog.Errorf("unable to register for conf for txid: %v", brarLog.Errorf("unable to register for conf for txid: %v",
@ -404,7 +405,7 @@ func (b *breachArbiter) breachObserver(contract *lnwallet.LightningChannel,
// send the retribution information to the utxo nursery. // send the retribution information to the utxo nursery.
// TODO(roasbeef): populate htlc breaches // TODO(roasbeef): populate htlc breaches
b.breachedContracts <- &retributionInfo{ b.breachedContracts <- &retributionInfo{
commitHash: breachInfo.BreachTransaction.TxSha(), commitHash: breachInfo.BreachTransaction.TxHash(),
chanPoint: *chanPoint, chanPoint: *chanPoint,
selfOutput: &breachedOutput{ selfOutput: &breachedOutput{
@ -444,7 +445,7 @@ type breachedOutput struct {
// transaction which spends all outputs of the commitment transaction into an // transaction which spends all outputs of the commitment transaction into an
// output controlled by the wallet. // output controlled by the wallet.
type retributionInfo struct { type retributionInfo struct {
commitHash wire.ShaHash commitHash chainhash.Hash
chanPoint wire.OutPoint chanPoint wire.OutPoint
selfOutput *breachedOutput selfOutput *breachedOutput
@ -478,7 +479,7 @@ func (b *breachArbiter) createJusticeTx(r *retributionInfo) (*wire.MsgTx, error)
// With the fee calculate, we can now create the justice transaction // With the fee calculate, we can now create the justice transaction
// using the information gathered above. // using the information gathered above.
justiceTx := wire.NewMsgTx() justiceTx := wire.NewMsgTx(2)
justiceTx.AddTxOut(&wire.TxOut{ justiceTx.AddTxOut(&wire.TxOut{
PkScript: pkScriptOfJustice, PkScript: pkScriptOfJustice,
Value: sweepedAmt, Value: sweepedAmt,

View File

@ -9,6 +9,7 @@ import (
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/roasbeef/btcd/btcjson" "github.com/roasbeef/btcd/btcjson"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcrpcclient" "github.com/roasbeef/btcrpcclient"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -30,7 +31,7 @@ var (
// used as an element within an unbounded queue in order to avoid blocking the // used as an element within an unbounded queue in order to avoid blocking the
// main rpc dispatch rule. // main rpc dispatch rule.
type chainUpdate struct { type chainUpdate struct {
blockHash *wire.ShaHash blockHash *chainhash.Hash
blockHeight int32 blockHeight int32
} }
@ -55,7 +56,7 @@ type BtcdNotifier struct {
spendNotifications map[wire.OutPoint][]*spendNotification spendNotifications map[wire.OutPoint][]*spendNotification
confNotifications map[wire.ShaHash][]*confirmationsNotification confNotifications map[chainhash.Hash][]*confirmationsNotification
confHeap *confirmationHeap confHeap *confirmationHeap
blockEpochClients []chan *chainntnfs.BlockEpoch blockEpochClients []chan *chainntnfs.BlockEpoch
@ -85,7 +86,7 @@ func New(config *btcrpcclient.ConnConfig) (*BtcdNotifier, error) {
notificationRegistry: make(chan interface{}), notificationRegistry: make(chan interface{}),
spendNotifications: make(map[wire.OutPoint][]*spendNotification), spendNotifications: make(map[wire.OutPoint][]*spendNotification),
confNotifications: make(map[wire.ShaHash][]*confirmationsNotification), confNotifications: make(map[chainhash.Hash][]*confirmationsNotification),
confHeap: newConfirmationHeap(), confHeap: newConfirmationHeap(),
disconnectedBlockHashes: make(chan *blockNtfn, 20), disconnectedBlockHashes: make(chan *blockNtfn, 20),
@ -180,14 +181,14 @@ func (b *BtcdNotifier) Stop() error {
// blockNtfn packages a notification of a connected/disconnected block along // blockNtfn packages a notification of a connected/disconnected block along
// with its height at the time. // with its height at the time.
type blockNtfn struct { type blockNtfn struct {
sha *wire.ShaHash sha *chainhash.Hash
height int32 height int32
} }
// onBlockConnected implements on OnBlockConnected callback for btcrpcclient. // onBlockConnected implements on OnBlockConnected callback for btcrpcclient.
// Ingesting a block updates the wallet's internal utxo state based on the // Ingesting a block updates the wallet's internal utxo state based on the
// outputs created and destroyed within each block. // outputs created and destroyed within each block.
func (b *BtcdNotifier) onBlockConnected(hash *wire.ShaHash, height int32, t time.Time) { func (b *BtcdNotifier) onBlockConnected(hash *chainhash.Hash, height int32, t time.Time) {
// Append this new chain update to the end of the queue of new chain // Append this new chain update to the end of the queue of new chain
// updates. // updates.
b.chainUpdateMtx.Lock() b.chainUpdateMtx.Lock()
@ -203,7 +204,7 @@ func (b *BtcdNotifier) onBlockConnected(hash *wire.ShaHash, height int32, t time
} }
// onBlockDisconnected implements on OnBlockDisconnected callback for btcrpcclient. // onBlockDisconnected implements on OnBlockDisconnected callback for btcrpcclient.
func (b *BtcdNotifier) onBlockDisconnected(hash *wire.ShaHash, height int32, t time.Time) { func (b *BtcdNotifier) onBlockDisconnected(hash *chainhash.Hash, height int32, t time.Time) {
} }
// onRedeemingTx implements on OnRedeemingTx callback for btcrpcclient. // onRedeemingTx implements on OnRedeemingTx callback for btcrpcclient.
@ -293,7 +294,7 @@ out:
// notification on a heap to be triggered in // notification on a heap to be triggered in
// the future once additional confirmations are // the future once additional confirmations are
// attained. // attained.
txSha := tx.TxSha() txSha := tx.TxHash()
b.checkConfirmationTrigger(&txSha, update, i) b.checkConfirmationTrigger(&txSha, update, i)
} }
@ -323,7 +324,7 @@ out:
// summary, finally sending off the details to // summary, finally sending off the details to
// the notification subscriber. // the notification subscriber.
if clients, ok := b.spendNotifications[prevOut]; ok { if clients, ok := b.spendNotifications[prevOut]; ok {
spenderSha := newSpend.tx.Sha() spenderSha := newSpend.tx.Hash()
for _, ntfn := range clients { for _, ntfn := range clients {
spendDetails := &chainntnfs.SpendDetail{ spendDetails := &chainntnfs.SpendDetail{
SpentOutPoint: ntfn.targetOutpoint, SpentOutPoint: ntfn.targetOutpoint,
@ -361,14 +362,14 @@ func (b *BtcdNotifier) attemptHistoricalDispatch(msg *confirmationsNotification,
// If the transaction already has some or all of the confirmations, // If the transaction already has some or all of the confirmations,
// then we may be able to dispatch it immediately. // then we may be able to dispatch it immediately.
tx, err := b.chainConn.GetRawTransactionVerbose(msg.txid) tx, err := b.chainConn.GetRawTransactionVerbose(msg.txid)
if err != nil || tx == nil { if err != nil || tx == nil || tx.BlockHash == "" {
return false return false
} }
// As we need to fully populate the returned TxConfirmation struct, // As we need to fully populate the returned TxConfirmation struct,
// grab the block in which the transaction was confirmed so we can // grab the block in which the transaction was confirmed so we can
// locate its exact index within the block. // locate its exact index within the block.
blockHash, err := wire.NewShaHashFromStr(tx.BlockHash) blockHash, err := chainhash.NewHashFromStr(tx.BlockHash)
if err != nil { if err != nil {
chainntnfs.Log.Errorf("unable to get block hash %v for "+ chainntnfs.Log.Errorf("unable to get block hash %v for "+
"historical dispatch: %v", tx.BlockHash, err) "historical dispatch: %v", tx.BlockHash, err)
@ -380,7 +381,7 @@ func (b *BtcdNotifier) attemptHistoricalDispatch(msg *confirmationsNotification,
return false return false
} }
txHash, err := wire.NewShaHashFromStr(tx.Hash) txHash, err := chainhash.NewHashFromStr(tx.Hash)
if err != nil { if err != nil {
chainntnfs.Log.Errorf("unable to convert to hash: %v", err) chainntnfs.Log.Errorf("unable to convert to hash: %v", err)
return false return false
@ -390,7 +391,7 @@ func (b *BtcdNotifier) attemptHistoricalDispatch(msg *confirmationsNotification,
// block so we can give the subscriber full confirmation details. // block so we can give the subscriber full confirmation details.
var txIndex uint32 var txIndex uint32
for i, t := range block.Transactions { for i, t := range block.Transactions {
h := t.TxSha() h := t.TxHash()
if txHash.IsEqual(&h) { if txHash.IsEqual(&h) {
txIndex = uint32(i) txIndex = uint32(i)
} }
@ -426,7 +427,7 @@ func (b *BtcdNotifier) attemptHistoricalDispatch(msg *confirmationsNotification,
// notifyBlockEpochs notifies all registered block epoch clients of the newly // notifyBlockEpochs notifies all registered block epoch clients of the newly
// connected block to the main chain. // connected block to the main chain.
func (b *BtcdNotifier) notifyBlockEpochs(newHeight int32, newSha *wire.ShaHash) { func (b *BtcdNotifier) notifyBlockEpochs(newHeight int32, newSha *chainhash.Hash) {
epoch := &chainntnfs.BlockEpoch{ epoch := &chainntnfs.BlockEpoch{
Height: newHeight, Height: newHeight,
Hash: newSha, Hash: newSha,
@ -479,7 +480,7 @@ func (b *BtcdNotifier) notifyConfs(newBlockHeight int32) {
// matches, yet needs additional confirmations, it is added to the confirmation // matches, yet needs additional confirmations, it is added to the confirmation
// heap to be triggered at a later time. // heap to be triggered at a later time.
// TODO(roasbeef): perhaps lookup, then track by inputs instead? // TODO(roasbeef): perhaps lookup, then track by inputs instead?
func (b *BtcdNotifier) checkConfirmationTrigger(txSha *wire.ShaHash, func (b *BtcdNotifier) checkConfirmationTrigger(txSha *chainhash.Hash,
newTip *chainUpdate, txIndex int) { newTip *chainUpdate, txIndex int) {
// If a confirmation notification has been registered // If a confirmation notification has been registered
@ -573,7 +574,7 @@ func (b *BtcdNotifier) RegisterSpendNtfn(outpoint *wire.OutPoint) (*chainntnfs.S
return nil, err return nil, err
} }
blockhash, err := wire.NewShaHashFromStr(transaction.BlockHash) blockhash, err := chainhash.NewHashFromStr(transaction.BlockHash)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -591,7 +592,7 @@ func (b *BtcdNotifier) RegisterSpendNtfn(outpoint *wire.OutPoint) (*chainntnfs.S
// confirmationNotification represents a client's intent to receive a // confirmationNotification represents a client's intent to receive a
// notification once the target txid reaches numConfirmations confirmations. // notification once the target txid reaches numConfirmations confirmations.
type confirmationsNotification struct { type confirmationsNotification struct {
txid *wire.ShaHash txid *chainhash.Hash
initialConfirmHeight uint32 initialConfirmHeight uint32
numConfirmations uint32 numConfirmations uint32
@ -603,7 +604,7 @@ type confirmationsNotification struct {
// RegisterConfirmationsNotification registers a notification with BtcdNotifier // RegisterConfirmationsNotification registers a notification with BtcdNotifier
// which will be triggered once the txid reaches numConfs number of // which will be triggered once the txid reaches numConfs number of
// confirmations. // confirmations.
func (b *BtcdNotifier) RegisterConfirmationsNtfn(txid *wire.ShaHash, func (b *BtcdNotifier) RegisterConfirmationsNtfn(txid *chainhash.Hash,
numConfs uint32) (*chainntnfs.ConfirmationEvent, error) { numConfs uint32) (*chainntnfs.ConfirmationEvent, error) {
ntfn := &confirmationsNotification{ ntfn := &confirmationsNotification{

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"sync" "sync"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
) )
@ -26,7 +27,7 @@ type ChainNotifier interface {
// //
// NOTE: Dispatching notifications to multiple clients subscribed to // NOTE: Dispatching notifications to multiple clients subscribed to
// the same (txid, numConfs) tuple MUST be supported. // the same (txid, numConfs) tuple MUST be supported.
RegisterConfirmationsNtfn(txid *wire.ShaHash, numConfs uint32) (*ConfirmationEvent, error) RegisterConfirmationsNtfn(txid *chainhash.Hash, numConfs uint32) (*ConfirmationEvent, error)
// RegisterSpendNtfn registers an intent to be notified once the target // RegisterSpendNtfn registers an intent to be notified once the target
// outpoint is succesfully spent within a confirmed transaction. The // outpoint is succesfully spent within a confirmed transaction. The
@ -62,7 +63,7 @@ type ChainNotifier interface {
type TxConfirmation struct { type TxConfirmation struct {
// BlockHash is the hash of the block that confirmed the original // BlockHash is the hash of the block that confirmed the original
// transition. // transition.
BlockHash *wire.ShaHash BlockHash *chainhash.Hash
// BlockHeight is the height of the block in which the transaction was // BlockHeight is the height of the block in which the transaction was
// confirmed within. // confirmed within.
@ -105,7 +106,7 @@ type ConfirmationEvent struct {
// target output. // target output.
type SpendDetail struct { type SpendDetail struct {
SpentOutPoint *wire.OutPoint SpentOutPoint *wire.OutPoint
SpenderTxHash *wire.ShaHash SpenderTxHash *chainhash.Hash
SpendingTx *wire.MsgTx SpendingTx *wire.MsgTx
SpenderInputIndex uint32 SpenderInputIndex uint32
SpendingHeight int32 SpendingHeight int32
@ -122,7 +123,7 @@ type SpendEvent struct {
// main chain. // main chain.
type BlockEpoch struct { type BlockEpoch struct {
Height int32 Height int32
Hash *wire.ShaHash Hash *chainhash.Hash
} }
// BlockEpochEvent encapsulates an on-going stream of block epoch // BlockEpochEvent encapsulates an on-going stream of block epoch

View File

@ -9,6 +9,7 @@ import (
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
_ "github.com/lightningnetwork/lnd/chainntnfs/btcdnotify" _ "github.com/lightningnetwork/lnd/chainntnfs/btcdnotify"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
@ -33,14 +34,14 @@ var (
testAddr = addrPk.AddressPubKeyHash() testAddr = addrPk.AddressPubKeyHash()
) )
func getTestTxId(miner *rpctest.Harness) (*wire.ShaHash, error) { func getTestTxId(miner *rpctest.Harness) (*chainhash.Hash, error) {
script, err := txscript.PayToAddrScript(testAddr) script, err := txscript.PayToAddrScript(testAddr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
outputs := []*wire.TxOut{&wire.TxOut{2e8, script}} outputs := []*wire.TxOut{&wire.TxOut{2e8, script}}
return miner.CoinbaseSpend(outputs) return miner.SendOutputs(outputs, 10)
} }
func testSingleConfirmationNotification(miner *rpctest.Harness, func testSingleConfirmationNotification(miner *rpctest.Harness,
@ -246,7 +247,7 @@ func testSpendNotification(miner *rpctest.Harness,
} }
// Next, create a new transaction spending that output. // Next, create a new transaction spending that output.
spendingTx := wire.NewMsgTx() spendingTx := wire.NewMsgTx(1)
spendingTx.AddTxIn(&wire.TxIn{ spendingTx.AddTxIn(&wire.TxIn{
PreviousOutPoint: *outpoint, PreviousOutPoint: *outpoint,
}) })
@ -293,10 +294,10 @@ func testSpendNotification(miner *rpctest.Harness,
"%v instead of %v", "%v instead of %v",
ntfn.SpentOutPoint, outpoint) ntfn.SpentOutPoint, outpoint)
} }
if !bytes.Equal(ntfn.SpenderTxHash.Bytes(), spenderSha.Bytes()) { if !bytes.Equal(ntfn.SpenderTxHash[:], spenderSha[:]) {
t.Fatalf("ntfn includes wrong spender tx sha, "+ t.Fatalf("ntfn includes wrong spender tx sha, "+
"reports %v intead of %v", "reports %v intead of %v",
ntfn.SpenderTxHash.Bytes(), spenderSha.Bytes()) ntfn.SpenderTxHash[:], spenderSha[:])
} }
if ntfn.SpenderInputIndex != 0 { if ntfn.SpenderInputIndex != 0 {
t.Fatalf("ntfn includes wrong spending input "+ t.Fatalf("ntfn includes wrong spending input "+
@ -549,7 +550,7 @@ func testSpendBeforeNtfnRegistration(miner *rpctest.Harness,
outpoint := wire.NewOutPoint(txid, uint32(outIndex)) outpoint := wire.NewOutPoint(txid, uint32(outIndex))
// Next, create a new transaction spending that output. // Next, create a new transaction spending that output.
spendingTx := wire.NewMsgTx() spendingTx := wire.NewMsgTx(1)
spendingTx.AddTxIn(&wire.TxIn{ spendingTx.AddTxIn(&wire.TxIn{
PreviousOutPoint: *outpoint, PreviousOutPoint: *outpoint,
}) })
@ -596,9 +597,9 @@ func testSpendBeforeNtfnRegistration(miner *rpctest.Harness,
t.Fatalf("ntfn includes wrong output, reports %v instead of %v", t.Fatalf("ntfn includes wrong output, reports %v instead of %v",
ntfn.SpentOutPoint, outpoint) ntfn.SpentOutPoint, outpoint)
} }
if !bytes.Equal(ntfn.SpenderTxHash.Bytes(), spenderSha.Bytes()) { if !bytes.Equal(ntfn.SpenderTxHash[:], spenderSha[:]) {
t.Fatalf("ntfn includes wrong spender tx sha, reports %v intead of %v", t.Fatalf("ntfn includes wrong spender tx sha, reports %v intead of %v",
ntfn.SpenderTxHash.Bytes(), spenderSha.Bytes()) ntfn.SpenderTxHash[:], spenderSha[:])
} }
if ntfn.SpenderInputIndex != 0 { if ntfn.SpenderInputIndex != 0 {
t.Fatalf("ntfn includes wrong spending input index, reports %v, should be %v", t.Fatalf("ntfn includes wrong spending input index, reports %v, should be %v",

View File

@ -11,6 +11,7 @@ import (
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
"github.com/lightningnetwork/lnd/elkrem" "github.com/lightningnetwork/lnd/elkrem"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -1274,7 +1275,7 @@ func fetchChanCommitTxns(nodeChanBucket *bolt.Bucket, channel *OpenChannel) erro
txnBytes := bytes.NewReader(nodeChanBucket.Get(txnsKey)) txnBytes := bytes.NewReader(nodeChanBucket.Get(txnsKey))
channel.OurCommitTx = wire.NewMsgTx() channel.OurCommitTx = wire.NewMsgTx(2)
if err = channel.OurCommitTx.Deserialize(txnBytes); err != nil { if err = channel.OurCommitTx.Deserialize(txnBytes); err != nil {
return err return err
} }
@ -1502,7 +1503,7 @@ func fetchChanElkremState(nodeChanBucket *bolt.Bucket, channel *OpenChannel) err
if err != nil { if err != nil {
return err return err
} }
elkremRoot, err := wire.NewShaHash(senderBytes) elkremRoot, err := chainhash.NewHash(senderBytes)
if err != nil { if err != nil {
return err return err
} }

View File

@ -12,6 +12,7 @@ import (
"github.com/lightningnetwork/lnd/elkrem" "github.com/lightningnetwork/lnd/elkrem"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -19,16 +20,16 @@ import (
) )
var ( var (
netParams = &chaincfg.SegNet4Params netParams = &chaincfg.TestNet3Params
key = [wire.HashSize]byte{ key = [chainhash.HashSize]byte{
0x81, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x81, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
0x68, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, 0x68, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
0xd, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d, 0xd, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d,
0x1e, 0xb, 0x4c, 0xf9, 0x9e, 0xc5, 0x8c, 0xe9, 0x1e, 0xb, 0x4c, 0xf9, 0x9e, 0xc5, 0x8c, 0xe9,
} }
id = &wire.OutPoint{ id = &wire.OutPoint{
Hash: [wire.HashSize]byte{ Hash: [chainhash.HashSize]byte{
0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, 0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
0x2d, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d, 0x2d, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d,
@ -36,7 +37,7 @@ var (
}, },
Index: 9, Index: 9,
} }
rev = [wire.HashSize]byte{ rev = [chainhash.HashSize]byte{
0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, 0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
0x2d, 0xe7, 0x93, 0xe4, 0x2d, 0xe7, 0x93, 0xe4,
@ -46,7 +47,7 @@ var (
TxIn: []*wire.TxIn{ TxIn: []*wire.TxIn{
&wire.TxIn{ &wire.TxIn{
PreviousOutPoint: wire.OutPoint{ PreviousOutPoint: wire.OutPoint{
Hash: wire.ShaHash{}, Hash: chainhash.Hash{},
Index: 0xffffffff, Index: 0xffffffff,
}, },
SignatureScript: []byte{0x04, 0x31, 0xdc, 0x00, 0x1b, 0x01, 0x62}, SignatureScript: []byte{0x04, 0x31, 0xdc, 0x00, 0x1b, 0x01, 0x62},

View File

@ -10,6 +10,7 @@ import (
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -505,7 +506,7 @@ const (
// with the current UTXO state. An integer is returned which reflects the // with the current UTXO state. An integer is returned which reflects the
// number of channels pruned due to the new incoming block. // number of channels pruned due to the new incoming block.
func (c *ChannelGraph) PruneGraph(spentOutputs []*wire.OutPoint, func (c *ChannelGraph) PruneGraph(spentOutputs []*wire.OutPoint,
blockHash *wire.ShaHash, blockHeight uint32) (uint32, error) { blockHash *chainhash.Hash, blockHeight uint32) (uint32, error) {
var numChans uint32 var numChans uint32
@ -572,10 +573,10 @@ func (c *ChannelGraph) PruneGraph(spentOutputs []*wire.OutPoint,
// used to prune channels in the graph. Knowing the "prune tip" allows callers // used to prune channels in the graph. Knowing the "prune tip" allows callers
// to tell if the graph is currently in sync with the current best known UTXO // to tell if the graph is currently in sync with the current best known UTXO
// state. // state.
func (c *ChannelGraph) PruneTip() (*wire.ShaHash, uint32, error) { func (c *ChannelGraph) PruneTip() (*chainhash.Hash, uint32, error) {
var ( var (
currentTip [pruneTipBytes]byte currentTip [pruneTipBytes]byte
tipHash wire.ShaHash tipHash chainhash.Hash
tipHeight uint32 tipHeight uint32
) )

View File

@ -13,6 +13,7 @@ import (
"github.com/btcsuite/fastsha256" "github.com/btcsuite/fastsha256"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -524,7 +525,7 @@ func TestGraphTraversal(t *testing.T) {
} }
} }
func assertPruneTip(t *testing.T, graph *ChannelGraph, blockHash *wire.ShaHash, func assertPruneTip(t *testing.T, graph *ChannelGraph, blockHash *chainhash.Hash,
blockHeight uint32) { blockHeight uint32) {
pruneHash, pruneHeight, err := graph.PruneTip() pruneHash, pruneHeight, err := graph.PruneTip()
@ -629,7 +630,7 @@ func TestGraphPruning(t *testing.T) {
// First we create a mock block that ends up closing the first two // First we create a mock block that ends up closing the first two
// channels. // channels.
var blockHash wire.ShaHash var blockHash chainhash.Hash
copy(blockHash[:], bytes.Repeat([]byte{1}, 32)) copy(blockHash[:], bytes.Repeat([]byte{1}, 32))
blockHeight := uint32(1) blockHeight := uint32(1)
block := channelPoints[:2] block := channelPoints[:2]

View File

@ -10,7 +10,7 @@ import (
"strings" "strings"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/urfave/cli" "github.com/urfave/cli"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -250,7 +250,7 @@ func openChannel(ctx *cli.Context) error {
switch update := resp.Update.(type) { switch update := resp.Update.(type) {
case *lnrpc.OpenStatusUpdate_ChanOpen: case *lnrpc.OpenStatusUpdate_ChanOpen:
channelPoint := update.ChanOpen.ChannelPoint channelPoint := update.ChanOpen.ChannelPoint
txid, err := wire.NewShaHash(channelPoint.FundingTxid) txid, err := chainhash.NewHash(channelPoint.FundingTxid)
if err != nil { if err != nil {
return err return err
} }
@ -306,7 +306,7 @@ func closeChannel(ctx *cli.Context) error {
ctxb := context.Background() ctxb := context.Background()
client := getClient(ctx) client := getClient(ctx)
txid, err := wire.NewShaHashFromStr(ctx.String("funding_txid")) txid, err := chainhash.NewHashFromStr(ctx.String("funding_txid"))
if err != nil { if err != nil {
return err return err
} }
@ -340,7 +340,7 @@ func closeChannel(ctx *cli.Context) error {
switch update := resp.Update.(type) { switch update := resp.Update.(type) {
case *lnrpc.CloseStatusUpdate_ChanClose: case *lnrpc.CloseStatusUpdate_ChanClose:
closingHash := update.ChanClose.ClosingTxid closingHash := update.ChanClose.ClosingTxid
txid, err := wire.NewShaHash(closingHash) txid, err := chainhash.NewHash(closingHash)
if err != nil { if err != nil {
return err return err
} }

View File

@ -3,7 +3,7 @@ package elkrem
import ( import (
"fmt" "fmt"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
/* elkrem is a simpler alternative to the 64 dimensional sha-chain. /* elkrem is a simpler alternative to the 64 dimensional sha-chain.
@ -39,27 +39,27 @@ const maxHeight = uint8(47)
// You can calculate h from i but I can't figure out how without taking // You can calculate h from i but I can't figure out how without taking
// O(i) ops. Feels like there should be a clever O(h) way. 1 byte, whatever. // O(i) ops. Feels like there should be a clever O(h) way. 1 byte, whatever.
type ElkremNode struct { type ElkremNode struct {
h uint8 // height of this node h uint8 // height of this node
i uint64 // index (i'th node) i uint64 // index (i'th node)
sha *wire.ShaHash // hash sha *chainhash.Hash // hash
} }
type ElkremSender struct { type ElkremSender struct {
root *wire.ShaHash // root hash of the tree root *chainhash.Hash // root hash of the tree
} }
type ElkremReceiver struct { type ElkremReceiver struct {
s []ElkremNode // store of received hashes s []ElkremNode // store of received hashes
} }
func LeftSha(in wire.ShaHash) wire.ShaHash { func LeftSha(in chainhash.Hash) chainhash.Hash {
return wire.DoubleSha256SH(in.Bytes()) // left is sha(sha(in)) return chainhash.DoubleHashH(in[:]) // left is sha(sha(in))
} }
func RightSha(in wire.ShaHash) wire.ShaHash { func RightSha(in chainhash.Hash) chainhash.Hash {
return wire.DoubleSha256SH(append(in.Bytes(), 0x01)) // sha(sha(in, 1)) return chainhash.DoubleHashH(append(in[:], 0x01)) // sha(sha(in, 1))
} }
// iterative descent of sub-tree. w = hash number you want. i = input index // iterative descent of sub-tree. w = hash number you want. i = input index
// h = height of input index. sha = input hash // h = height of input index. sha = input hash
func descend(w, i uint64, h uint8, sha wire.ShaHash) (wire.ShaHash, error) { func descend(w, i uint64, h uint8, sha chainhash.Hash) (chainhash.Hash, error) {
for w < i { for w < i {
if w <= i-(1<<h) { // left if w <= i-(1<<h) { // left
sha = LeftSha(sha) sha = LeftSha(sha)
@ -80,7 +80,7 @@ func descend(w, i uint64, h uint8, sha wire.ShaHash) (wire.ShaHash, error) {
} }
// Creates an Elkrem Sender from a root hash. // Creates an Elkrem Sender from a root hash.
func NewElkremSender(r wire.ShaHash) *ElkremSender { func NewElkremSender(r chainhash.Hash) *ElkremSender {
var e ElkremSender var e ElkremSender
e.root = &r e.root = &r
return &e return &e
@ -88,14 +88,14 @@ func NewElkremSender(r wire.ShaHash) *ElkremSender {
// AtIndex skips to the requested index // AtIndex skips to the requested index
// should never error; remove error..? // should never error; remove error..?
func (e *ElkremSender) AtIndex(w uint64) (*wire.ShaHash, error) { func (e *ElkremSender) AtIndex(w uint64) (*chainhash.Hash, error) {
out, err := descend(w, maxIndex, maxHeight, *e.root) out, err := descend(w, maxIndex, maxHeight, *e.root)
return &out, err return &out, err
} }
// AddNext inserts the next hash in the tree. Returns an error if // AddNext inserts the next hash in the tree. Returns an error if
// the incoming hash doesn't fit. // the incoming hash doesn't fit.
func (e *ElkremReceiver) AddNext(sha *wire.ShaHash) error { func (e *ElkremReceiver) AddNext(sha *chainhash.Hash) error {
// note: careful about atomicity / disk writes here // note: careful about atomicity / disk writes here
var n ElkremNode var n ElkremNode
n.sha = sha n.sha = sha
@ -123,7 +123,7 @@ func (e *ElkremReceiver) AddNext(sha *wire.ShaHash) error {
} }
// AtIndex returns the w'th hash in the receiver. // AtIndex returns the w'th hash in the receiver.
func (e *ElkremReceiver) AtIndex(w uint64) (*wire.ShaHash, error) { func (e *ElkremReceiver) AtIndex(w uint64) (*chainhash.Hash, error) {
if e == nil || e.s == nil { if e == nil || e.s == nil {
return nil, fmt.Errorf("nil elkrem receiver") return nil, fmt.Errorf("nil elkrem receiver")
} }

View File

@ -3,14 +3,14 @@ package elkrem
import ( import (
"testing" "testing"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
// TestElkremBig tries 10K hashes // TestElkremBig tries 10K hashes
func TestElkremBig(t *testing.T) { func TestElkremBig(t *testing.T) {
var rcv ElkremReceiver var rcv ElkremReceiver
sndr := NewElkremSender(wire.DoubleSha256SH([]byte("elktest"))) sndr := NewElkremSender(chainhash.DoubleHashH([]byte("elktest")))
for n := uint64(0); n < 10000; n++ { for n := uint64(0); n < 10000; n++ {
sha, err := sndr.AtIndex(n) sha, err := sndr.AtIndex(n)
@ -36,7 +36,7 @@ func TestElkremBig(t *testing.T) {
func TestElkremLess(t *testing.T) { func TestElkremLess(t *testing.T) {
var rcv ElkremReceiver var rcv ElkremReceiver
sndr := NewElkremSender(wire.DoubleSha256SH([]byte("elktest2"))) sndr := NewElkremSender(chainhash.DoubleHashH([]byte("elktest2")))
for n := uint64(0); n < 5000; n++ { for n := uint64(0); n < 5000; n++ {
sha, err := sndr.AtIndex(n) sha, err := sndr.AtIndex(n)

View File

@ -5,7 +5,7 @@ import (
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
/* Serialization and Deserialization methods for the Elkrem structs. /* Serialization and Deserialization methods for the Elkrem structs.
@ -49,7 +49,7 @@ func (e *ElkremReceiver) ToBytes() ([]byte, error) {
return nil, fmt.Errorf("node %d has nil hash", node.i) return nil, fmt.Errorf("node %d has nil hash", node.i)
} }
// write 32 byte sha hash // write 32 byte sha hash
n, err := buf.Write(node.sha.Bytes()) n, err := buf.Write(node.sha[:])
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -86,7 +86,7 @@ func ElkremReceiverFromBytes(b []byte) (*ElkremReceiver, error) {
e.s = make([]ElkremNode, numOfNodes) e.s = make([]ElkremNode, numOfNodes)
for j, _ := range e.s { for j, _ := range e.s {
e.s[j].sha = new(wire.ShaHash) e.s[j].sha = new(chainhash.Hash)
// read 1 byte height // read 1 byte height
err := binary.Read(buf, binary.BigEndian, &e.s[j].h) err := binary.Read(buf, binary.BigEndian, &e.s[j].h)
if err != nil { if err != nil {

View File

@ -12,6 +12,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -331,7 +332,7 @@ func (f *fundingManager) handleFundingRequest(fmsg *fundingRequestMsg) {
if len(f.activeReservations[fmsg.peer.id]) >= cfg.MaxPendingChannels { if len(f.activeReservations[fmsg.peer.id]) >= cfg.MaxPendingChannels {
errMsg := &lnwire.ErrorGeneric{ errMsg := &lnwire.ErrorGeneric{
ChannelPoint: &wire.OutPoint{ ChannelPoint: &wire.OutPoint{
Hash: wire.ShaHash{}, Hash: chainhash.Hash{},
Index: 0, Index: 0,
}, },
Problem: "Number of pending channels exceed maximum", Problem: "Number of pending channels exceed maximum",

View File

@ -14,6 +14,7 @@ import (
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
"golang.org/x/crypto/ripemd160" "golang.org/x/crypto/ripemd160"
@ -48,7 +49,7 @@ type link struct {
type htlcPacket struct { type htlcPacket struct {
sync.RWMutex sync.RWMutex
dest wire.ShaHash dest chainhash.Hash
index uint32 index uint32
srcLink wire.OutPoint srcLink wire.OutPoint
@ -120,7 +121,7 @@ type htlcSwitch struct {
// currently have open with that peer. // currently have open with that peer.
// TODO(roasbeef): combine w/ onionIndex? // TODO(roasbeef): combine w/ onionIndex?
interfaceMtx sync.RWMutex interfaceMtx sync.RWMutex
interfaces map[wire.ShaHash][]*link interfaces map[chainhash.Hash][]*link
// onionIndex is an index used to properly forward a message // onionIndex is an index used to properly forward a message
// to the next hop within a Sphinx circuit. Within the sphinx packets, // to the next hop within a Sphinx circuit. Within the sphinx packets,
@ -159,7 +160,7 @@ type htlcSwitch struct {
func newHtlcSwitch() *htlcSwitch { func newHtlcSwitch() *htlcSwitch {
return &htlcSwitch{ return &htlcSwitch{
chanIndex: make(map[wire.OutPoint]*link), chanIndex: make(map[wire.OutPoint]*link),
interfaces: make(map[wire.ShaHash][]*link), interfaces: make(map[chainhash.Hash][]*link),
onionIndex: make(map[[ripemd160.Size]byte][]*link), onionIndex: make(map[[ripemd160.Size]byte][]*link),
paymentCircuits: make(map[circuitKey]*paymentCircuit), paymentCircuits: make(map[circuitKey]*paymentCircuit),
linkControl: make(chan interface{}), linkControl: make(chan interface{}),

View File

@ -8,7 +8,7 @@ import (
"github.com/btcsuite/fastsha256" "github.com/btcsuite/fastsha256"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -18,9 +18,9 @@ var (
// All nodes initialize with the flag active will immediately settle // All nodes initialize with the flag active will immediately settle
// any incoming HTLC whose rHash is corresponds with the debug // any incoming HTLC whose rHash is corresponds with the debug
// preimage. // preimage.
debugPre, _ = wire.NewShaHash(bytes.Repeat([]byte{1}, 32)) debugPre, _ = chainhash.NewHash(bytes.Repeat([]byte{1}, 32))
debugHash = wire.ShaHash(fastsha256.Sum256(debugPre[:])) debugHash = chainhash.Hash(fastsha256.Sum256(debugPre[:]))
) )
// invoiceRegistry is a central registry of all the outstanding invoices // invoiceRegistry is a central registry of all the outstanding invoices
@ -38,7 +38,7 @@ type invoiceRegistry struct {
// debugInvoices is a mp which stores special "debug" invoices which // debugInvoices is a mp which stores special "debug" invoices which
// should be only created/used when manual tests require an invoice // should be only created/used when manual tests require an invoice
// that *all* nodes are able to fully settle. // that *all* nodes are able to fully settle.
debugInvoices map[wire.ShaHash]*channeldb.Invoice debugInvoices map[chainhash.Hash]*channeldb.Invoice
} }
// newInvoiceRegistry creates a new invoice registry. The invoice registry // newInvoiceRegistry creates a new invoice registry. The invoice registry
@ -48,7 +48,7 @@ type invoiceRegistry struct {
func newInvoiceRegistry(cdb *channeldb.DB) *invoiceRegistry { func newInvoiceRegistry(cdb *channeldb.DB) *invoiceRegistry {
return &invoiceRegistry{ return &invoiceRegistry{
cdb: cdb, cdb: cdb,
debugInvoices: make(map[wire.ShaHash]*channeldb.Invoice), debugInvoices: make(map[chainhash.Hash]*channeldb.Invoice),
notificationClients: make(map[uint32]*invoiceSubscription), notificationClients: make(map[uint32]*invoiceSubscription),
} }
} }
@ -57,8 +57,8 @@ func newInvoiceRegistry(cdb *channeldb.DB) *invoiceRegistry {
// by the passed preimage. Once this invoice is added, sub-systems within the // by the passed preimage. Once this invoice is added, sub-systems within the
// daemon add/forward HTLC's are able to obtain the proper preimage required // daemon add/forward HTLC's are able to obtain the proper preimage required
// for redemption in the case that we're the final destination. // for redemption in the case that we're the final destination.
func (i *invoiceRegistry) AddDebugInvoice(amt btcutil.Amount, preimage wire.ShaHash) { func (i *invoiceRegistry) AddDebugInvoice(amt btcutil.Amount, preimage chainhash.Hash) {
paymentHash := wire.ShaHash(fastsha256.Sum256(preimage[:])) paymentHash := chainhash.Hash(fastsha256.Sum256(preimage[:]))
invoice := &channeldb.Invoice{ invoice := &channeldb.Invoice{
CreationDate: time.Now(), CreationDate: time.Now(),
@ -101,7 +101,7 @@ func (i *invoiceRegistry) AddInvoice(invoice *channeldb.Invoice) error {
// lookupInvoice looks up an invoice by it's payment hash (R-Hash), if found // lookupInvoice looks up an invoice by it's payment hash (R-Hash), if found
// then we're able to pull the funds pending within an HTLC. // then we're able to pull the funds pending within an HTLC.
// TODO(roasbeef): ignore if settled? // TODO(roasbeef): ignore if settled?
func (i *invoiceRegistry) LookupInvoice(rHash wire.ShaHash) (*channeldb.Invoice, error) { func (i *invoiceRegistry) LookupInvoice(rHash chainhash.Hash) (*channeldb.Invoice, error) {
// First check the in-memory debug invoice index to see if this is an // First check the in-memory debug invoice index to see if this is an
// existing invoice added for debugging. // existing invoice added for debugging.
i.RLock() i.RLock()
@ -121,7 +121,7 @@ func (i *invoiceRegistry) LookupInvoice(rHash wire.ShaHash) (*channeldb.Invoice,
// SettleInvoice attempts to mark an invoice as settled. If the invoice is a // SettleInvoice attempts to mark an invoice as settled. If the invoice is a
// dbueg invoice, then this method is a nooop as debug invoices are never fully // dbueg invoice, then this method is a nooop as debug invoices are never fully
// settled. // settled.
func (i *invoiceRegistry) SettleInvoice(rHash wire.ShaHash) error { func (i *invoiceRegistry) SettleInvoice(rHash chainhash.Hash) error {
ltndLog.Debugf("Settling invoice %x", rHash[:]) ltndLog.Debugf("Settling invoice %x", rHash[:])
// First check the in-memory debug invoice index to see if this is an // First check the in-memory debug invoice index to see if this is an

View File

@ -20,6 +20,8 @@ import (
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/rpctest" "github.com/roasbeef/btcd/rpctest"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcrpcclient" "github.com/roasbeef/btcrpcclient"
@ -89,9 +91,9 @@ func (h *harnessTest) Log(args ...interface{}) {
h.t.Log(args...) h.t.Log(args...)
} }
func assertTxInBlock(t *harnessTest, block *wire.MsgBlock, txid *wire.ShaHash) { func assertTxInBlock(t *harnessTest, block *wire.MsgBlock, txid *chainhash.Hash) {
for _, tx := range block.Transactions { for _, tx := range block.Transactions {
sha := tx.TxSha() sha := tx.TxHash()
if bytes.Equal(txid[:], sha[:]) { if bytes.Equal(txid[:], sha[:]) {
return return
} }
@ -144,7 +146,7 @@ func openChannelAndAssert(t *harnessTest, net *networkHarness, ctx context.Conte
if err != nil { if err != nil {
t.Fatalf("error while waiting for channel open: %v", err) t.Fatalf("error while waiting for channel open: %v", err)
} }
fundingTxID, err := wire.NewShaHash(fundingChanPoint.FundingTxid) fundingTxID, err := chainhash.NewHash(fundingChanPoint.FundingTxid)
if err != nil { if err != nil {
t.Fatalf("unable to create sha hash: %v", err) t.Fatalf("unable to create sha hash: %v", err)
} }
@ -170,7 +172,7 @@ func openChannelAndAssert(t *harnessTest, net *networkHarness, ctx context.Conte
// detected as closed, an assertion checks that the transaction is found within // detected as closed, an assertion checks that the transaction is found within
// a block. // a block.
func closeChannelAndAssert(t *harnessTest, net *networkHarness, ctx context.Context, func closeChannelAndAssert(t *harnessTest, net *networkHarness, ctx context.Context,
node *lightningNode, fundingChanPoint *lnrpc.ChannelPoint, force bool) *wire.ShaHash { node *lightningNode, fundingChanPoint *lnrpc.ChannelPoint, force bool) *chainhash.Hash {
closeUpdates, _, err := net.CloseChannel(ctx, node, fundingChanPoint, force) closeUpdates, _, err := net.CloseChannel(ctx, node, fundingChanPoint, force)
if err != nil { if err != nil {
@ -371,8 +373,8 @@ func testChannelForceClosure(net *networkHarness, t *harnessTest) {
// At this point, the sweeping transaction should now be broadcast. So // At this point, the sweeping transaction should now be broadcast. So
// we fetch the node's mempool to ensure it has been properly // we fetch the node's mempool to ensure it has been properly
// broadcast. // broadcast.
var sweepingTXID *wire.ShaHash var sweepingTXID *chainhash.Hash
var mempool []*wire.ShaHash var mempool []*chainhash.Hash
mempoolTimeout := time.After(3 * time.Second) mempoolTimeout := time.After(3 * time.Second)
checkMempoolTick := time.Tick(100 * time.Millisecond) checkMempoolTick := time.Tick(100 * time.Millisecond)
mempoolPoll: mempoolPoll:
@ -427,7 +429,7 @@ mempoolPoll:
t.Fatalf("unable to get block: %v", err) t.Fatalf("unable to get block: %v", err)
} }
assertTxInBlock(t, block, sweepTx.Sha()) assertTxInBlock(t, block, sweepTx.Hash())
} }
func testSingleHopInvoice(net *networkHarness, t *harnessTest) { func testSingleHopInvoice(net *networkHarness, t *harnessTest) {
@ -672,7 +674,7 @@ func testMultiHopPayments(net *networkHarness, t *harnessTest) {
chanPointAlice := openChannelAndAssert(t, net, ctxt, net.Alice, chanPointAlice := openChannelAndAssert(t, net, ctxt, net.Alice,
net.Bob, chanAmt) net.Bob, chanAmt)
aliceChanTXID, err := wire.NewShaHash(chanPointAlice.FundingTxid) aliceChanTXID, err := chainhash.NewHash(chanPointAlice.FundingTxid)
if err != nil { if err != nil {
t.Fatalf("unable to create sha hash: %v", err) t.Fatalf("unable to create sha hash: %v", err)
} }
@ -701,7 +703,7 @@ func testMultiHopPayments(net *networkHarness, t *harnessTest) {
chanPointCarol := openChannelAndAssert(t, net, ctxt, carol, chanPointCarol := openChannelAndAssert(t, net, ctxt, carol,
net.Alice, chanAmt) net.Alice, chanAmt)
carolChanTXID, err := wire.NewShaHash(chanPointCarol.FundingTxid) carolChanTXID, err := chainhash.NewHash(chanPointCarol.FundingTxid)
if err != nil { if err != nil {
t.Fatalf("unable to create sha hash: %v", err) t.Fatalf("unable to create sha hash: %v", err)
} }
@ -1079,7 +1081,7 @@ func testMaxPendingChannels(net *networkHarness, t *harnessTest) {
t.Fatalf("error while waiting for channel open: %v", err) t.Fatalf("error while waiting for channel open: %v", err)
} }
fundingTxID, err := wire.NewShaHash(fundingChanPoint.FundingTxid) fundingTxID, err := chainhash.NewHash(fundingChanPoint.FundingTxid)
if err != nil { if err != nil {
t.Fatalf("unable to create sha hash: %v", err) t.Fatalf("unable to create sha hash: %v", err)
} }
@ -1282,7 +1284,7 @@ func testRevokedCloseRetribution(net *networkHarness, t *harnessTest) {
// Query the mempool for Alice's justice transaction, this should be // Query the mempool for Alice's justice transaction, this should be
// broadcast as Bob's contract breaching transaction gets confirmed // broadcast as Bob's contract breaching transaction gets confirmed
// above. // above.
var justiceTXID *wire.ShaHash var justiceTXID *chainhash.Hash
breakTimeout := time.After(time.Second * 5) breakTimeout := time.After(time.Second * 5)
poll: poll:
for { for {
@ -1328,8 +1330,8 @@ poll:
if len(block.Transactions) != 2 { if len(block.Transactions) != 2 {
t.Fatalf("transaction wasn't mined") t.Fatalf("transaction wasn't mined")
} }
justiceSha := block.Transactions[1].TxSha() justiceSha := block.Transactions[1].TxHash()
if !bytes.Equal(justiceTx.Sha()[:], justiceSha[:]) { if !bytes.Equal(justiceTx.Hash()[:], justiceSha[:]) {
t.Fatalf("justice tx wasn't mined") t.Fatalf("justice tx wasn't mined")
} }

View File

@ -5,6 +5,7 @@ import (
"errors" "errors"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
) )
@ -18,14 +19,14 @@ var (
// within the main chain. // within the main chain.
// //
// This method is a part of the lnwallet.BlockChainIO interface. // This method is a part of the lnwallet.BlockChainIO interface.
func (b *BtcWallet) GetBestBlock() (*wire.ShaHash, int32, error) { func (b *BtcWallet) GetBestBlock() (*chainhash.Hash, int32, error) {
return b.rpc.GetBestBlock() return b.rpc.GetBestBlock()
} }
// GetTxOut returns the original output referenced by the passed outpoint. // GetTxOut returns the original output referenced by the passed outpoint.
// //
// This method is a part of the lnwallet.BlockChainIO interface. // This method is a part of the lnwallet.BlockChainIO interface.
func (b *BtcWallet) GetUtxo(txid *wire.ShaHash, index uint32) (*wire.TxOut, error) { func (b *BtcWallet) GetUtxo(txid *chainhash.Hash, index uint32) (*wire.TxOut, error) {
txout, err := b.rpc.GetTxOut(txid, index, false) txout, err := b.rpc.GetTxOut(txid, index, false)
if err != nil { if err != nil {
return nil, err return nil, err
@ -50,7 +51,7 @@ func (b *BtcWallet) GetUtxo(txid *wire.ShaHash, index uint32) (*wire.TxOut, erro
// transaction ID. // transaction ID.
// //
// This method is a part of the lnwallet.BlockChainIO interface. // This method is a part of the lnwallet.BlockChainIO interface.
func (b *BtcWallet) GetTransaction(txid *wire.ShaHash) (*wire.MsgTx, error) { func (b *BtcWallet) GetTransaction(txid *chainhash.Hash) (*wire.MsgTx, error) {
tx, err := b.rpc.GetRawTransaction(txid) tx, err := b.rpc.GetRawTransaction(txid)
if err != nil { if err != nil {
return nil, err return nil, err
@ -62,7 +63,7 @@ func (b *BtcWallet) GetTransaction(txid *wire.ShaHash) (*wire.MsgTx, error) {
// GetBlock returns a raw block from the server given its hash. // GetBlock returns a raw block from the server given its hash.
// //
// This method is a part of the lnwallet.BlockChainIO interface. // This method is a part of the lnwallet.BlockChainIO interface.
func (b *BtcWallet) GetBlock(blockHash *wire.ShaHash) (*wire.MsgBlock, error) { func (b *BtcWallet) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) {
block, err := b.rpc.GetBlock(blockHash) block, err := b.rpc.GetBlock(blockHash)
if err != nil { if err != nil {
return nil, err return nil, err
@ -75,7 +76,7 @@ func (b *BtcWallet) GetBlock(blockHash *wire.ShaHash) (*wire.MsgBlock, error) {
// given height. // given height.
// //
// This method is a part of the lnwallet.BlockChainIO interface. // This method is a part of the lnwallet.BlockChainIO interface.
func (b *BtcWallet) GetBlockHash(blockHeight int64) (*wire.ShaHash, error) { func (b *BtcWallet) GetBlockHash(blockHeight int64) (*chainhash.Hash, error) {
blockHash, err := b.rpc.GetBlockHash(blockHeight) blockHash, err := b.rpc.GetBlockHash(blockHeight)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -11,6 +11,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -308,7 +309,7 @@ func (b *BtcWallet) FetchRootKey() (*btcec.PrivateKey, error) {
// outputs are non-standard, a non-nil error will be be returned. // outputs are non-standard, a non-nil error will be be returned.
// //
// This is a part of the WalletController interface. // This is a part of the WalletController interface.
func (b *BtcWallet) SendOutputs(outputs []*wire.TxOut) (*wire.ShaHash, error) { func (b *BtcWallet) SendOutputs(outputs []*wire.TxOut) (*chainhash.Hash, error) {
return b.wallet.SendOutputs(outputs, defaultAccount, 1) return b.wallet.SendOutputs(outputs, defaultAccount, 1)
} }
@ -355,7 +356,7 @@ func (b *BtcWallet) ListUnspentWitness(minConfs int32) ([]*lnwallet.Utxo, error)
// the wallet are nested p2sh... // the wallet are nested p2sh...
if txscript.IsPayToWitnessPubKeyHash(pkScript) || if txscript.IsPayToWitnessPubKeyHash(pkScript) ||
txscript.IsPayToScriptHash(pkScript) { txscript.IsPayToScriptHash(pkScript) {
txid, err := wire.NewShaHashFromStr(output.TxID) txid, err := chainhash.NewHashFromStr(output.TxID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -384,7 +385,7 @@ func (b *BtcWallet) PublishTransaction(tx *wire.MsgTx) error {
// extractBalanceDelta extracts the net balance delta from the PoV of the // extractBalanceDelta extracts the net balance delta from the PoV of the
// wallet given a TransactionSummary. // wallet given a TransactionSummary.
func extractBalanceDelta(txSummary base.TransactionSummary) (btcutil.Amount, error) { func extractBalanceDelta(txSummary base.TransactionSummary) (btcutil.Amount, error) {
tx := wire.NewMsgTx() tx := wire.NewMsgTx(1)
txReader := bytes.NewReader(txSummary.Transaction) txReader := bytes.NewReader(txSummary.Transaction)
if err := tx.Deserialize(txReader); err != nil { if err := tx.Deserialize(txReader); err != nil {
return -1, nil return -1, nil

View File

@ -11,6 +11,7 @@ import (
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
@ -19,7 +20,7 @@ import (
"github.com/roasbeef/btcutil/txsort" "github.com/roasbeef/btcutil/txsort"
) )
var zeroHash wire.ShaHash var zeroHash chainhash.Hash
var ( var (
ErrChanClosing = fmt.Errorf("channel is being closed, operation disallowed") ErrChanClosing = fmt.Errorf("channel is being closed, operation disallowed")
@ -584,7 +585,7 @@ type BreachRetribution struct {
func newBreachRetribution(chanState *channeldb.OpenChannel, stateNum uint64, func newBreachRetribution(chanState *channeldb.OpenChannel, stateNum uint64,
broadcastCommitment *wire.MsgTx) (*BreachRetribution, error) { broadcastCommitment *wire.MsgTx) (*BreachRetribution, error) {
commitHash := broadcastCommitment.TxSha() commitHash := broadcastCommitment.TxHash()
// Query the on-disk revocation log for the snapshot which was recorded // Query the on-disk revocation log for the snapshot which was recorded
// at this particular state num. // at this particular state num.
@ -1408,7 +1409,7 @@ func (lc *LightningChannel) ReceiveRevocation(revMsg *lnwire.CommitRevocation) (
ourCommitKey := lc.channelState.OurCommitKey ourCommitKey := lc.channelState.OurCommitKey
currentRevocationKey := lc.channelState.TheirCurrentRevocation currentRevocationKey := lc.channelState.TheirCurrentRevocation
pendingRevocation := wire.ShaHash(revMsg.Revocation) pendingRevocation := chainhash.Hash(revMsg.Revocation)
// Ensure the new pre-image fits in properly within the elkrem receiver // Ensure the new pre-image fits in properly within the elkrem receiver
// tree. If this fails, then all other checks are skipped. // tree. If this fails, then all other checks are skipped.
@ -1929,7 +1930,7 @@ func (lc *LightningChannel) ForceClose() (*ForceCloseSummary, error) {
return &ForceCloseSummary{ return &ForceCloseSummary{
CloseTx: commitTx, CloseTx: commitTx,
SelfOutpoint: wire.OutPoint{ SelfOutpoint: wire.OutPoint{
Hash: commitTx.TxSha(), Hash: commitTx.TxHash(),
Index: delayIndex, Index: delayIndex,
}, },
SelfOutputMaturity: csvTimeout, SelfOutputMaturity: csvTimeout,
@ -1951,7 +1952,7 @@ func (lc *LightningChannel) ForceClose() (*ForceCloseSummary, error) {
// //
// TODO(roasbeef): caller should initiate signal to reject all incoming HTLCs, // TODO(roasbeef): caller should initiate signal to reject all incoming HTLCs,
// settle any inflight. // settle any inflight.
func (lc *LightningChannel) InitCooperativeClose() ([]byte, *wire.ShaHash, error) { func (lc *LightningChannel) InitCooperativeClose() ([]byte, *chainhash.Hash, error) {
lc.Lock() lc.Lock()
defer lc.Unlock() defer lc.Unlock()
@ -1969,7 +1970,7 @@ func (lc *LightningChannel) InitCooperativeClose() ([]byte, *wire.ShaHash, error
lc.channelState.OurBalance, lc.channelState.TheirBalance, lc.channelState.OurBalance, lc.channelState.TheirBalance,
lc.channelState.OurDeliveryScript, lc.channelState.TheirDeliveryScript, lc.channelState.OurDeliveryScript, lc.channelState.TheirDeliveryScript,
lc.channelState.IsInitiator) lc.channelState.IsInitiator)
closeTxSha := closeTx.TxSha() closeTxSha := closeTx.TxHash()
// Finally, sign the completed cooperative closure transaction. As the // Finally, sign the completed cooperative closure transaction. As the
// initiator we'll simply send our signature over the the remote party, // initiator we'll simply send our signature over the the remote party,
@ -2095,8 +2096,7 @@ func CreateCommitTx(fundingOutput *wire.TxIn, selfKey, theirKey *btcec.PublicKey
// Now that both output scripts have been created, we can finally create // Now that both output scripts have been created, we can finally create
// the transaction itself. We use a transaction version of 2 since CSV // the transaction itself. We use a transaction version of 2 since CSV
// will fail unless the tx version is >= 2. // will fail unless the tx version is >= 2.
commitTx := wire.NewMsgTx() commitTx := wire.NewMsgTx(2)
commitTx.Version = 2
commitTx.AddTxIn(fundingOutput) commitTx.AddTxIn(fundingOutput)
// Avoid creating zero value outputs within the commitment transaction. // Avoid creating zero value outputs within the commitment transaction.
@ -2125,7 +2125,7 @@ func CreateCooperativeCloseTx(fundingTxIn *wire.TxIn,
// channel. In the event that one side doesn't have any settled funds // channel. In the event that one side doesn't have any settled funds
// within the channel then a refund output for that particular side can // within the channel then a refund output for that particular side can
// be omitted. // be omitted.
closeTx := wire.NewMsgTx() closeTx := wire.NewMsgTx(2)
closeTx.AddTxIn(fundingTxIn) closeTx.AddTxIn(fundingTxIn)
// The initiator the a cooperative closure pays the fee in entirety. // The initiator the a cooperative closure pays the fee in entirety.

View File

@ -16,6 +16,7 @@ import (
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/blockchain" "github.com/roasbeef/btcd/blockchain"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -87,7 +88,7 @@ func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, signDesc *SignDescriptor
type mockNotfier struct { type mockNotfier struct {
} }
func (m *mockNotfier) RegisterConfirmationsNtfn(txid *wire.ShaHash, numConfs uint32) (*chainntnfs.ConfirmationEvent, error) { func (m *mockNotfier) RegisterConfirmationsNtfn(txid *chainhash.Hash, numConfs uint32) (*chainntnfs.ConfirmationEvent, error) {
return nil, nil return nil, nil
} }
func (m *mockNotfier) RegisterBlockEpochNtfn() (*chainntnfs.BlockEpochEvent, error) { func (m *mockNotfier) RegisterBlockEpochNtfn() (*chainntnfs.BlockEpochEvent, error) {
@ -199,7 +200,7 @@ func createTestChannels(revocationWindow int) (*LightningChannel, *LightningChan
} }
prevOut := &wire.OutPoint{ prevOut := &wire.OutPoint{
Hash: wire.ShaHash(testHdSeed), Hash: chainhash.Hash(testHdSeed),
Index: 0, Index: 0,
} }
fundingTxIn := wire.NewTxIn(prevOut, nil, nil) fundingTxIn := wire.NewTxIn(prevOut, nil, nil)
@ -614,7 +615,7 @@ func TestCheckCommitTxSize(t *testing.T) {
t.Fatalf("unable to initiate alice force close: %v", err) t.Fatalf("unable to initiate alice force close: %v", err)
} }
actualCost := blockchain.GetMsgTxCost(commitTx) actualCost := blockchain.GetTransactionWeight(btcutil.NewTx(commitTx))
estimatedCost := estimateCommitTxCost(count, false) estimatedCost := estimateCommitTxCost(count, false)
diff := int(estimatedCost - actualCost) diff := int(estimatedCost - actualCost)
@ -709,7 +710,7 @@ func TestCooperativeChannelClosure(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("unable to complete alice cooperative close: %v", err) t.Fatalf("unable to complete alice cooperative close: %v", err)
} }
bobCloseSha := closeTx.TxSha() bobCloseSha := closeTx.TxHash()
if !bobCloseSha.IsEqual(txid) { if !bobCloseSha.IsEqual(txid) {
t.Fatalf("alice's transactions doesn't match: %x vs %x", t.Fatalf("alice's transactions doesn't match: %x vs %x",
bobCloseSha[:], txid[:]) bobCloseSha[:], txid[:])
@ -729,7 +730,7 @@ func TestCooperativeChannelClosure(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("unable to complete bob cooperative close: %v", err) t.Fatalf("unable to complete bob cooperative close: %v", err)
} }
aliceCloseSha := closeTx.TxSha() aliceCloseSha := closeTx.TxHash()
if !aliceCloseSha.IsEqual(txid) { if !aliceCloseSha.IsEqual(txid) {
t.Fatalf("bob's closure transactions don't match: %x vs %x", t.Fatalf("bob's closure transactions don't match: %x vs %x",
aliceCloseSha[:], txid[:]) aliceCloseSha[:], txid[:])

View File

@ -6,6 +6,7 @@ import (
"sync" "sync"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -42,7 +43,7 @@ type Utxo struct {
// the wallet, or has outputs that pay to the wallet. // the wallet, or has outputs that pay to the wallet.
type TransactionDetail struct { type TransactionDetail struct {
// Hash is the transaction hash of the transaction. // Hash is the transaction hash of the transaction.
Hash wire.ShaHash Hash chainhash.Hash
// Value is the net value of this transaction (in satoshis) from the // Value is the net value of this transaction (in satoshis) from the
// PoV of the wallet. If this transaction purely spends from the // PoV of the wallet. If this transaction purely spends from the
@ -58,7 +59,7 @@ type TransactionDetail struct {
// BlockHeight is the hash of the block which includes this // BlockHeight is the hash of the block which includes this
// transaction. Unconfirmed transactions will have a nil value for this // transaction. Unconfirmed transactions will have a nil value for this
// field. // field.
BlockHash *wire.ShaHash BlockHash *chainhash.Hash
// BlockHeight is the height of the block including this transaction. // BlockHeight is the height of the block including this transaction.
// Unconfirmed transaction will show a height of zero. // Unconfirmed transaction will show a height of zero.
@ -142,7 +143,7 @@ type WalletController interface {
// paying out to the specified outputs. In the case the wallet has // paying out to the specified outputs. In the case the wallet has
// insufficient funds, or the outputs are non-standard, an error // insufficient funds, or the outputs are non-standard, an error
// should be returned. // should be returned.
SendOutputs(outputs []*wire.TxOut) (*wire.ShaHash, error) SendOutputs(outputs []*wire.TxOut) (*chainhash.Hash, error)
// ListUnspentWitness returns all unspent outputs which are version 0 // ListUnspentWitness returns all unspent outputs which are version 0
// witness programs. The 'confirms' parameter indicates the minimum // witness programs. The 'confirms' parameter indicates the minimum
@ -203,23 +204,23 @@ type WalletController interface {
type BlockChainIO interface { type BlockChainIO interface {
// GetBestBlock returns the current height and block hash of the valid // GetBestBlock returns the current height and block hash of the valid
// most-work chain the implementation is aware of. // most-work chain the implementation is aware of.
GetBestBlock() (*wire.ShaHash, int32, error) GetBestBlock() (*chainhash.Hash, int32, error)
// GetTxOut returns the original output referenced by the passed // GetTxOut returns the original output referenced by the passed
// outpoint. // outpoint.
GetUtxo(txid *wire.ShaHash, index uint32) (*wire.TxOut, error) GetUtxo(txid *chainhash.Hash, index uint32) (*wire.TxOut, error)
// GetTransaction returns the full transaction identified by the passed // GetTransaction returns the full transaction identified by the passed
// transaction ID. // transaction ID.
GetTransaction(txid *wire.ShaHash) (*wire.MsgTx, error) GetTransaction(txid *chainhash.Hash) (*wire.MsgTx, error)
// GetBlockHash returns the hash of the block in the best block chain // GetBlockHash returns the hash of the block in the best block chain
// at the given height. // at the given height.
GetBlockHash(blockHeight int64) (*wire.ShaHash, error) GetBlockHash(blockHeight int64) (*chainhash.Hash, error)
// GetBlock returns the block in the main chain identified by the given // GetBlock returns the block in the main chain identified by the given
// hash. // hash.
GetBlock(blockHash *wire.ShaHash) (*wire.MsgBlock, error) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error)
} }
// SignDescriptor houses the necessary information required to successfully sign // SignDescriptor houses the necessary information required to successfully sign

View File

@ -18,6 +18,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwallet/btcwallet" "github.com/lightningnetwork/lnd/lnwallet/btcwallet"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcutil/txsort" "github.com/roasbeef/btcutil/txsort"
_ "github.com/roasbeef/btcwallet/walletdb/bdb" _ "github.com/roasbeef/btcwallet/walletdb/bdb"
@ -209,7 +210,7 @@ func newBobNode(miner *rpctest.Harness, amt btcutil.Amount) (*bobNode, error) {
// Give bobNode one 7 BTC output for use in creating channels. // Give bobNode one 7 BTC output for use in creating channels.
output := &wire.TxOut{7e8, bobAddrScript} output := &wire.TxOut{7e8, bobAddrScript}
mainTxid, err := miner.CoinbaseSpend([]*wire.TxOut{output}) mainTxid, err := miner.SendOutputs([]*wire.TxOut{output}, 10)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -247,7 +248,7 @@ func newBobNode(miner *rpctest.Harness, amt btcutil.Amount) (*bobNode, error) {
copy(obsfucator[:], revocation[:]) copy(obsfucator[:], revocation[:])
// His ID is just as creative... // His ID is just as creative...
var id [wire.HashSize]byte var id [chainhash.HashSize]byte
id[0] = 0xff id[0] = 0xff
return &bobNode{ return &bobNode{
@ -283,7 +284,7 @@ func loadTestCredits(miner *rpctest.Harness, w *lnwallet.LightningWallet, numOut
addrs = append(addrs, walletAddr) addrs = append(addrs, walletAddr)
output := &wire.TxOut{satoshiPerOutput, script} output := &wire.TxOut{satoshiPerOutput, script}
if _, err := miner.CoinbaseSpend([]*wire.TxOut{output}); err != nil { if _, err := miner.SendOutputs([]*wire.TxOut{output}, 10); err != nil {
return err return err
} }
} }
@ -466,7 +467,7 @@ func testDualFundingReservationWorkflow(miner *rpctest.Harness, wallet *lnwallet
// txn hits a "comfortable" depth. // txn hits a "comfortable" depth.
// The resulting active channel state should have been persisted to the DB. // The resulting active channel state should have been persisted to the DB.
fundingSha := fundingTx.TxSha() fundingSha := fundingTx.TxHash()
channels, err := wallet.ChannelDB.FetchOpenChannels(bobNode.id) channels, err := wallet.ChannelDB.FetchOpenChannels(bobNode.id)
if err != nil { if err != nil {
t.Fatalf("unable to retrieve channel from DB: %v", err) t.Fatalf("unable to retrieve channel from DB: %v", err)
@ -732,7 +733,7 @@ func testSingleFunderReservationWorkflowInitiator(miner *rpctest.Harness,
// The resulting active channel state should have been persisted to the DB. // The resulting active channel state should have been persisted to the DB.
// TODO(roasbeef): de-duplicate // TODO(roasbeef): de-duplicate
fundingTx := chanReservation.FinalFundingTx() fundingTx := chanReservation.FinalFundingTx()
fundingSha := fundingTx.TxSha() fundingSha := fundingTx.TxHash()
channels, err := wallet.ChannelDB.FetchOpenChannels(bobNode.id) channels, err := wallet.ChannelDB.FetchOpenChannels(bobNode.id)
if err != nil { if err != nil {
t.Fatalf("unable to retrieve channel from DB: %v", err) t.Fatalf("unable to retrieve channel from DB: %v", err)
@ -854,7 +855,7 @@ func testSingleFunderReservationWorkflowResponder(miner *rpctest.Harness,
// At this point, we send Bob our contribution, allowing him to // At this point, we send Bob our contribution, allowing him to
// construct the funding transaction, and sign our version of the // construct the funding transaction, and sign our version of the
// commitment transaction. // commitment transaction.
fundingTx := wire.NewMsgTx() fundingTx := wire.NewMsgTx(1)
fundingTx.AddTxIn(bobNode.availableOutputs[0]) fundingTx.AddTxIn(bobNode.availableOutputs[0])
fundingTx.AddTxOut(bobNode.changeOutputs[0]) fundingTx.AddTxOut(bobNode.changeOutputs[0])
fundingTx.AddTxOut(multiOut) fundingTx.AddTxOut(multiOut)
@ -866,7 +867,7 @@ func testSingleFunderReservationWorkflowResponder(miner *rpctest.Harness,
// Locate the output index of the 2-of-2 in order to send back to the // Locate the output index of the 2-of-2 in order to send back to the
// wallet so it can finalize the transaction by signing bob's commitment // wallet so it can finalize the transaction by signing bob's commitment
// transaction. // transaction.
fundingTxID := fundingTx.TxSha() fundingTxID := fundingTx.TxHash()
_, multiSigIndex := lnwallet.FindScriptOutputIndex(fundingTx, multiOut.PkScript) _, multiSigIndex := lnwallet.FindScriptOutputIndex(fundingTx, multiOut.PkScript)
fundingOutpoint := wire.NewOutPoint(&fundingTxID, multiSigIndex) fundingOutpoint := wire.NewOutPoint(&fundingTxID, multiSigIndex)
bobObsfucator := bobNode.obsfucator bobObsfucator := bobNode.obsfucator
@ -923,7 +924,7 @@ func testListTransactionDetails(miner *rpctest.Harness, wallet *lnwallet.Lightni
// Create 5 new outputs spendable by the wallet. // Create 5 new outputs spendable by the wallet.
const numTxns = 5 const numTxns = 5
const outputAmt = btcutil.SatoshiPerBitcoin const outputAmt = btcutil.SatoshiPerBitcoin
txids := make(map[wire.ShaHash]struct{}) txids := make(map[chainhash.Hash]struct{})
for i := 0; i < numTxns; i++ { for i := 0; i < numTxns; i++ {
addr, err := wallet.NewAddress(lnwallet.WitnessPubKey, false) addr, err := wallet.NewAddress(lnwallet.WitnessPubKey, false)
if err != nil { if err != nil {
@ -935,7 +936,7 @@ func testListTransactionDetails(miner *rpctest.Harness, wallet *lnwallet.Lightni
} }
output := &wire.TxOut{outputAmt, script} output := &wire.TxOut{outputAmt, script}
txid, err := miner.CoinbaseSpend([]*wire.TxOut{output}) txid, err := miner.SendOutputs([]*wire.TxOut{output}, 10)
if err != nil { if err != nil {
t.Fatalf("unable to send coinbase: %v", err) t.Fatalf("unable to send coinbase: %v", err)
} }
@ -1083,7 +1084,7 @@ func testTransactionSubscriptions(miner *rpctest.Harness, w *lnwallet.LightningW
} }
output := &wire.TxOut{outputAmt, script} output := &wire.TxOut{outputAmt, script}
if _, err := miner.CoinbaseSpend([]*wire.TxOut{output}); err != nil { if _, err := miner.SendOutputs([]*wire.TxOut{output}, 10); err != nil {
t.Fatalf("unable to send coinbase: %v", err) t.Fatalf("unable to send coinbase: %v", err)
} }
} }
@ -1183,10 +1184,10 @@ func testSignOutputPrivateTweak(r *rpctest.Harness, w *lnwallet.LightningWallet,
/// WIth the index located, we can create a transaction spending the /// WIth the index located, we can create a transaction spending the
//referenced output. //referenced output.
sweepTx := wire.NewMsgTx() sweepTx := wire.NewMsgTx(2)
sweepTx.AddTxIn(&wire.TxIn{ sweepTx.AddTxIn(&wire.TxIn{
PreviousOutPoint: wire.OutPoint{ PreviousOutPoint: wire.OutPoint{
Hash: tx.TxSha(), Hash: tx.TxHash(),
Index: outputIndex, Index: outputIndex,
}, },
}) })

View File

@ -11,6 +11,7 @@ import (
"github.com/btcsuite/fastsha256" "github.com/btcsuite/fastsha256"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -749,7 +750,7 @@ func DeriveRevocationPrivKey(commitPrivKey *btcec.PrivateKey,
// [2]: https://tools.ietf.org/html/rfc5869 // [2]: https://tools.ietf.org/html/rfc5869
func deriveElkremRoot(elkremDerivationRoot *btcec.PrivateKey, func deriveElkremRoot(elkremDerivationRoot *btcec.PrivateKey,
localMultiSigKey *btcec.PublicKey, localMultiSigKey *btcec.PublicKey,
remoteMultiSigKey *btcec.PublicKey) wire.ShaHash { remoteMultiSigKey *btcec.PublicKey) chainhash.Hash {
secret := elkremDerivationRoot.Serialize() secret := elkremDerivationRoot.Serialize()
salt := localMultiSigKey.SerializeCompressed() salt := localMultiSigKey.SerializeCompressed()
@ -760,7 +761,7 @@ func deriveElkremRoot(elkremDerivationRoot *btcec.PrivateKey,
// It's safe to ignore the error her as we know for sure that we won't // It's safe to ignore the error her as we know for sure that we won't
// be draining the HKDF past its available entropy horizon. // be draining the HKDF past its available entropy horizon.
// TODO(roasbeef): revisit... // TODO(roasbeef): revisit...
var elkremRoot wire.ShaHash var elkremRoot chainhash.Hash
rootReader.Read(elkremRoot[:]) rootReader.Read(elkremRoot[:])
return elkremRoot return elkremRoot

View File

@ -67,9 +67,8 @@ func TestCommitmentSpendValidation(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("unable to create target output: %v") t.Fatalf("unable to create target output: %v")
} }
sweepTx := wire.NewMsgTx() sweepTx := wire.NewMsgTx(2)
sweepTx.Version = 2 sweepTx.AddTxIn(wire.NewTxIn(&wire.OutPoint{commitmentTx.TxHash(), 0}, nil, nil))
sweepTx.AddTxIn(wire.NewTxIn(&wire.OutPoint{commitmentTx.TxSha(), 0}, nil, nil))
sweepTx.AddTxOut(&wire.TxOut{ sweepTx.AddTxOut(&wire.TxOut{
PkScript: targetOutput, PkScript: targetOutput,
Value: 0.5 * 10e8, Value: 0.5 * 10e8,
@ -267,7 +266,7 @@ func TestHTLCSenderSpendValidation(t *testing.T) {
// This will be Alice's commitment transaction. In this scenario Alice // This will be Alice's commitment transaction. In this scenario Alice
// is sending an HTLC to a node she has a a path to (could be Bob, // is sending an HTLC to a node she has a a path to (could be Bob,
// could be multiple hops down, it doesn't really matter). // could be multiple hops down, it doesn't really matter).
senderCommitTx := wire.NewMsgTx() senderCommitTx := wire.NewMsgTx(2)
senderCommitTx.AddTxIn(fakeFundingTxIn) senderCommitTx.AddTxIn(fakeFundingTxIn)
senderCommitTx.AddTxOut(&wire.TxOut{ senderCommitTx.AddTxOut(&wire.TxOut{
Value: int64(paymentAmt), Value: int64(paymentAmt),
@ -275,11 +274,11 @@ func TestHTLCSenderSpendValidation(t *testing.T) {
}) })
prevOut := &wire.OutPoint{ prevOut := &wire.OutPoint{
Hash: senderCommitTx.TxSha(), Hash: senderCommitTx.TxHash(),
Index: 0, Index: 0,
} }
sweepTx := wire.NewMsgTx() sweepTx := wire.NewMsgTx(2)
sweepTx.AddTxIn(wire.NewTxIn(prevOut, nil, nil)) sweepTx.AddTxIn(wire.NewTxIn(prevOut, nil, nil))
sweepTx.AddTxOut( sweepTx.AddTxOut(
&wire.TxOut{ &wire.TxOut{
@ -439,7 +438,7 @@ func TestHTLCReceiverSpendValidation(t *testing.T) {
// This will be Bob's commitment transaction. In this scenario Alice // This will be Bob's commitment transaction. In this scenario Alice
// is sending an HTLC to a node she has a a path to (could be Bob, // is sending an HTLC to a node she has a a path to (could be Bob,
// could be multiple hops down, it doesn't really matter). // could be multiple hops down, it doesn't really matter).
recieverCommitTx := wire.NewMsgTx() recieverCommitTx := wire.NewMsgTx(2)
recieverCommitTx.AddTxIn(fakeFundingTxIn) recieverCommitTx.AddTxIn(fakeFundingTxIn)
recieverCommitTx.AddTxOut(&wire.TxOut{ recieverCommitTx.AddTxOut(&wire.TxOut{
Value: int64(paymentAmt), Value: int64(paymentAmt),
@ -447,11 +446,11 @@ func TestHTLCReceiverSpendValidation(t *testing.T) {
}) })
prevOut := &wire.OutPoint{ prevOut := &wire.OutPoint{
Hash: recieverCommitTx.TxSha(), Hash: recieverCommitTx.TxHash(),
Index: 0, Index: 0,
} }
sweepTx := wire.NewMsgTx() sweepTx := wire.NewMsgTx(2)
sweepTx.AddTxIn(wire.NewTxIn(prevOut, nil, nil)) sweepTx.AddTxIn(wire.NewTxIn(prevOut, nil, nil))
sweepTx.AddTxOut( sweepTx.AddTxOut(
&wire.TxOut{ &wire.TxOut{
@ -559,7 +558,7 @@ func TestHTLCReceiverSpendValidation(t *testing.T) {
} }
func TestCommitTxStateHint(t *testing.T) { func TestCommitTxStateHint(t *testing.T) {
commitTx := wire.NewMsgTx() commitTx := wire.NewMsgTx(2)
commitTx.AddTxIn(&wire.TxIn{}) commitTx.AddTxIn(&wire.TxIn{})
var obsfucator [StateHintSize]byte var obsfucator [StateHintSize]byte

View File

@ -6,7 +6,7 @@ import (
const ( const (
WitnessFactor = blockchain.WitnessScaleFactor WitnessFactor = blockchain.WitnessScaleFactor
MaxTransactionWeightPolicy = blockchain.MaxBlockCost / 10 MaxTransactionWeightPolicy = blockchain.MaxBlockWeight / 10
// The weight(cost), which is different from the !size! (see BIP-141), // The weight(cost), which is different from the !size! (see BIP-141),
// is calculated as: // is calculated as:

View File

@ -661,7 +661,7 @@ func (l *LightningWallet) handleContributionMsg(req *addContributionMsg) {
// Create a blank, fresh transaction. Soon to be a complete funding // Create a blank, fresh transaction. Soon to be a complete funding
// transaction which will allow opening a lightning channel. // transaction which will allow opening a lightning channel.
pendingReservation.fundingTx = wire.NewMsgTx() pendingReservation.fundingTx = wire.NewMsgTx(1)
fundingTx := pendingReservation.fundingTx fundingTx := pendingReservation.fundingTx
// Some temporary variables to cut down on the resolution verbosity. // Some temporary variables to cut down on the resolution verbosity.
@ -739,7 +739,7 @@ func (l *LightningWallet) handleContributionMsg(req *addContributionMsg) {
// Locate the index of the multi-sig outpoint in order to record it // Locate the index of the multi-sig outpoint in order to record it
// since the outputs are canonically sorted. If this is a single funder // since the outputs are canonically sorted. If this is a single funder
// workflow, then we'll also need to send this to the remote node. // workflow, then we'll also need to send this to the remote node.
fundingTxID := fundingTx.TxSha() fundingTxID := fundingTx.TxHash()
_, multiSigIndex := FindScriptOutputIndex(fundingTx, multiSigOut.PkScript) _, multiSigIndex := FindScriptOutputIndex(fundingTx, multiSigOut.PkScript)
fundingOutpoint := wire.NewOutPoint(&fundingTxID, multiSigIndex) fundingOutpoint := wire.NewOutPoint(&fundingTxID, multiSigIndex)
pendingReservation.partialState.FundingOutpoint = fundingOutpoint pendingReservation.partialState.FundingOutpoint = fundingOutpoint
@ -1235,7 +1235,7 @@ func (l *LightningWallet) handleChannelOpen(req *channelOpenMsg) {
func (l *LightningWallet) openChannelAfterConfirmations(res *ChannelReservation) { func (l *LightningWallet) openChannelAfterConfirmations(res *ChannelReservation) {
// Register with the ChainNotifier for a notification once the funding // Register with the ChainNotifier for a notification once the funding
// transaction reaches `numConfs` confirmations. // transaction reaches `numConfs` confirmations.
txid := res.fundingTx.TxSha() txid := res.fundingTx.TxHash()
numConfs := uint32(res.numConfsToOpen) numConfs := uint32(res.numConfsToOpen)
confNtfn, _ := l.chainNotifier.RegisterConfirmationsNtfn(&txid, numConfs) confNtfn, _ := l.chainNotifier.RegisterConfirmationsNtfn(&txid, numConfs)

View File

@ -7,7 +7,7 @@ import (
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
// ChannelAnnouncement message is used to announce the existence of a channel // ChannelAnnouncement message is used to announce the existence of a channel
@ -56,12 +56,12 @@ func (a *ChannelAnnouncement) Validate() error {
var sigHash []byte var sigHash []byte
sigHash = wire.DoubleSha256(a.FirstNodeID.SerializeCompressed()) sigHash = chainhash.DoubleHashB(a.FirstNodeID.SerializeCompressed())
if !a.FirstBitcoinSig.Verify(sigHash, a.FirstBitcoinKey) { if !a.FirstBitcoinSig.Verify(sigHash, a.FirstBitcoinKey) {
return errors.New("can't verify first bitcoin signature") return errors.New("can't verify first bitcoin signature")
} }
sigHash = wire.DoubleSha256(a.SecondNodeID.SerializeCompressed()) sigHash = chainhash.DoubleHashB(a.SecondNodeID.SerializeCompressed())
if !a.SecondBitcoinSig.Verify(sigHash, a.SecondBitcoinKey) { if !a.SecondBitcoinSig.Verify(sigHash, a.SecondBitcoinKey) {
return errors.New("can't verify second bitcoin signature") return errors.New("can't verify second bitcoin signature")
} }
@ -70,7 +70,7 @@ func (a *ChannelAnnouncement) Validate() error {
if err != nil { if err != nil {
return err return err
} }
dataHash := wire.DoubleSha256(data) dataHash := chainhash.DoubleHashB(data)
if !a.FirstNodeSig.Verify(dataHash, a.FirstNodeID) { if !a.FirstNodeSig.Verify(dataHash, a.FirstNodeID) {
return errors.New("can't verify data in first node signature") return errors.New("can't verify data in first node signature")

View File

@ -6,7 +6,7 @@ import (
"testing" "testing"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
func TestChannelAnnoucementEncodeDecode(t *testing.T) { func TestChannelAnnoucementEncodeDecode(t *testing.T) {
@ -60,10 +60,10 @@ func TestChannelAnnoucementValidation(t *testing.T) {
var hash []byte var hash []byte
hash = wire.DoubleSha256(firstNodePubKey.SerializeCompressed()) hash = chainhash.DoubleHashB(firstNodePubKey.SerializeCompressed())
firstBitcoinSig, _ := firstBitcoinPrivKey.Sign(hash) firstBitcoinSig, _ := firstBitcoinPrivKey.Sign(hash)
hash = wire.DoubleSha256(secondNodePubKey.SerializeCompressed()) hash = chainhash.DoubleHashB(secondNodePubKey.SerializeCompressed())
secondBitcoinSig, _ := secondBitcoinPrivKey.Sign(hash) secondBitcoinSig, _ := secondBitcoinPrivKey.Sign(hash)
ca := &ChannelAnnouncement{ ca := &ChannelAnnouncement{
@ -77,7 +77,7 @@ func TestChannelAnnoucementValidation(t *testing.T) {
} }
dataToSign, _ := ca.DataToSign() dataToSign, _ := ca.DataToSign()
hash = wire.DoubleSha256(dataToSign) hash = chainhash.DoubleHashB(dataToSign)
firstNodeSign, _ := firstNodePrivKey.Sign(hash) firstNodeSign, _ := firstNodePrivKey.Sign(hash)
ca.FirstNodeSig = firstNodeSign ca.FirstNodeSig = firstNodeSign

View File

@ -10,6 +10,7 @@ import (
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -175,7 +176,7 @@ func writeElement(w io.Writer, element interface{}) error {
if _, err = w.Write(b[:]); err != nil { if _, err = w.Write(b[:]); err != nil {
return err return err
} }
case *wire.ShaHash: case *chainhash.Hash:
if _, err := w.Write(e[:]); err != nil { if _, err := w.Write(e[:]); err != nil {
return err return err
} }
@ -425,8 +426,8 @@ func readElement(r io.Reader, element interface{}) error {
return err return err
} }
*e = btcutil.Amount(int64(binary.BigEndian.Uint64(b[:]))) *e = btcutil.Amount(int64(binary.BigEndian.Uint64(b[:])))
case **wire.ShaHash: case **chainhash.Hash:
var b wire.ShaHash var b chainhash.Hash
if _, err := io.ReadFull(r, b[:]); err != nil { if _, err := io.ReadFull(r, b[:]); err != nil {
return err return err
} }
@ -576,7 +577,7 @@ func readElement(r io.Reader, element interface{}) error {
if _, err = io.ReadFull(r, h[:]); err != nil { if _, err = io.ReadFull(r, h[:]); err != nil {
return err return err
} }
hash, err := wire.NewShaHash(h[:]) hash, err := chainhash.NewHash(h[:])
if err != nil { if err != nil {
return err return err
} }
@ -596,7 +597,7 @@ func readElement(r io.Reader, element interface{}) error {
if _, err = io.ReadFull(r, h[:]); err != nil { if _, err = io.ReadFull(r, h[:]); err != nil {
return err return err
} }
hash, err := wire.NewShaHash(h[:]) hash, err := chainhash.NewHash(h[:])
if err != nil { if err != nil {
return err return err
} }

View File

@ -10,6 +10,7 @@ import (
"net" "net"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
) )
@ -63,18 +64,18 @@ var (
// echo -n | openssl sha256 // echo -n | openssl sha256
// This stuff gets reversed!!! // This stuff gets reversed!!!
shaHash1Bytes, _ = hex.DecodeString("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") shaHash1Bytes, _ = hex.DecodeString("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
shaHash1, _ = wire.NewShaHash(shaHash1Bytes) shaHash1, _ = chainhash.NewHash(shaHash1Bytes)
outpoint1 = wire.NewOutPoint(shaHash1, 0) outpoint1 = wire.NewOutPoint(shaHash1, 0)
// echo | openssl sha256 // echo | openssl sha256
// This stuff gets reversed!!! // This stuff gets reversed!!!
shaHash2Bytes, _ = hex.DecodeString("01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b") shaHash2Bytes, _ = hex.DecodeString("01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b")
shaHash2, _ = wire.NewShaHash(shaHash2Bytes) shaHash2, _ = chainhash.NewHash(shaHash2Bytes)
outpoint2 = wire.NewOutPoint(shaHash2, 1) outpoint2 = wire.NewOutPoint(shaHash2, 1)
// create inputs from outpoint1 and outpoint2 // create inputs from outpoint1 and outpoint2
inputs = []*wire.TxIn{wire.NewTxIn(outpoint1, nil, nil), wire.NewTxIn(outpoint2, nil, nil)} inputs = []*wire.TxIn{wire.NewTxIn(outpoint1, nil, nil), wire.NewTxIn(outpoint2, nil, nil)}
// Commitment Signature // Commitment Signature
tx = wire.NewMsgTx() tx = wire.NewMsgTx(1)
emptybytes = new([]byte) emptybytes = new([]byte)
sigStr, _ = txscript.RawTxInSignature(tx, 0, *emptybytes, txscript.SigHashAll, privKey) sigStr, _ = txscript.RawTxInSignature(tx, 0, *emptybytes, txscript.SigHashAll, privKey)
commitSig, _ = btcec.ParseSignature(sigStr, btcec.S256()) commitSig, _ = btcec.ParseSignature(sigStr, btcec.S256())
@ -93,7 +94,7 @@ var (
ptrFundingTXSigs = append(*new([]*btcec.Signature), commitSig1, commitSig2) ptrFundingTXSigs = append(*new([]*btcec.Signature), commitSig1, commitSig2)
// TxID // TxID
txid = new(wire.ShaHash) txid = new(chainhash.Hash)
// Reversed when displayed // Reversed when displayed
txidBytes, _ = hex.DecodeString("fd95c6e5c9d5bcf9cfc7231b6a438e46c518c724d0b04b75cc8fddf84a254e3a") txidBytes, _ = hex.DecodeString("fd95c6e5c9d5bcf9cfc7231b6a438e46c518c724d0b04b75cc8fddf84a254e3a")
_ = copy(txid[:], txidBytes) _ = copy(txid[:], txidBytes)

View File

@ -8,7 +8,7 @@ import (
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
var ( var (
@ -119,7 +119,7 @@ func (a *NodeAnnouncement) Validate() error {
return err return err
} }
dataHash := wire.DoubleSha256(data) dataHash := chainhash.DoubleHashB(data)
if !a.Signature.Verify(dataHash, a.NodeID) { if !a.Signature.Verify(dataHash, a.NodeID) {
return errors.New("can't check the node annoucement signature") return errors.New("can't check the node annoucement signature")
} }

View File

@ -6,7 +6,7 @@ import (
"testing" "testing"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
) )
func TestNodeAnnouncementEncodeDecode(t *testing.T) { func TestNodeAnnouncementEncodeDecode(t *testing.T) {
@ -58,7 +58,7 @@ func TestNodeAnnoucementValidation(t *testing.T) {
} }
dataToSign, _ := na.DataToSign() dataToSign, _ := na.DataToSign()
hash = wire.DoubleSha256(dataToSign) hash = chainhash.DoubleHashB(dataToSign)
signature, _ := nodePrivKey.Sign(hash) signature, _ := nodePrivKey.Sign(hash)
na.Signature = signature na.Signature = signature

View File

@ -24,6 +24,7 @@ import (
"github.com/go-errors/errors" "github.com/go-errors/errors"
"github.com/lightningnetwork/lnd/lnrpc" "github.com/lightningnetwork/lnd/lnrpc"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/rpctest" "github.com/roasbeef/btcd/rpctest"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
@ -314,7 +315,7 @@ type networkHarness struct {
Alice *lightningNode Alice *lightningNode
Bob *lightningNode Bob *lightningNode
seenTxns chan wire.ShaHash seenTxns chan chainhash.Hash
watchRequests chan *watchRequest watchRequests chan *watchRequest
// Channel for transmitting stderr output from failed lightning node // Channel for transmitting stderr output from failed lightning node
@ -331,7 +332,7 @@ type networkHarness struct {
func newNetworkHarness() (*networkHarness, error) { func newNetworkHarness() (*networkHarness, error) {
return &networkHarness{ return &networkHarness{
activeNodes: make(map[int]*lightningNode), activeNodes: make(map[int]*lightningNode),
seenTxns: make(chan wire.ShaHash), seenTxns: make(chan chainhash.Hash),
watchRequests: make(chan *watchRequest), watchRequests: make(chan *watchRequest),
lndErrorChan: make(chan error), lndErrorChan: make(chan error),
}, nil }, nil
@ -442,7 +443,7 @@ func (n *networkHarness) SetUp() error {
PkScript: addrScript, PkScript: addrScript,
Value: btcutil.SatoshiPerBitcoin, Value: btcutil.SatoshiPerBitcoin,
} }
if _, err := n.Miner.CoinbaseSpend([]*wire.TxOut{output}); err != nil { if _, err := n.Miner.SendOutputs([]*wire.TxOut{output}, 30); err != nil {
return err return err
} }
} }
@ -568,7 +569,7 @@ func (n *networkHarness) RestartNode(node *lightningNode, callback func() error)
// dispatch a notification once a transaction with the target txid is seen // dispatch a notification once a transaction with the target txid is seen
// within the test network. // within the test network.
type watchRequest struct { type watchRequest struct {
txid wire.ShaHash txid chainhash.Hash
eventChan chan struct{} eventChan chan struct{}
} }
@ -576,8 +577,8 @@ type watchRequest struct {
// the broadcast of a target transaction, and then dispatches the transaction // the broadcast of a target transaction, and then dispatches the transaction
// once its seen on the network. // once its seen on the network.
func (n *networkHarness) networkWatcher() { func (n *networkHarness) networkWatcher() {
seenTxns := make(map[wire.ShaHash]struct{}) seenTxns := make(map[chainhash.Hash]struct{})
clients := make(map[wire.ShaHash][]chan struct{}) clients := make(map[chainhash.Hash][]chan struct{})
for { for {
@ -618,7 +619,7 @@ func (n *networkHarness) networkWatcher() {
// OnTxAccepted is a callback to be called each time a new transaction has been // OnTxAccepted is a callback to be called each time a new transaction has been
// broadcast on the network. // broadcast on the network.
func (n *networkHarness) OnTxAccepted(hash *wire.ShaHash, amt btcutil.Amount) { func (n *networkHarness) OnTxAccepted(hash *chainhash.Hash, amt btcutil.Amount) {
go func() { go func() {
n.seenTxns <- *hash n.seenTxns <- *hash
}() }()
@ -628,7 +629,7 @@ func (n *networkHarness) OnTxAccepted(hash *wire.ShaHash, amt btcutil.Amount) {
// the transaction isn't seen within the network before the passed timeout, // the transaction isn't seen within the network before the passed timeout,
// then an error is returned. // then an error is returned.
// TODO(roasbeef): add another method which creates queue of all seen transactions // TODO(roasbeef): add another method which creates queue of all seen transactions
func (n *networkHarness) WaitForTxBroadcast(ctx context.Context, txid wire.ShaHash) error { func (n *networkHarness) WaitForTxBroadcast(ctx context.Context, txid chainhash.Hash) error {
eventChan := make(chan struct{}) eventChan := make(chan struct{})
n.watchRequests <- &watchRequest{txid, eventChan} n.watchRequests <- &watchRequest{txid, eventChan}
@ -734,7 +735,7 @@ func (n *networkHarness) WaitForChannelOpen(ctx context.Context,
// pending, then an error is returned. // pending, then an error is returned.
func (n *networkHarness) CloseChannel(ctx context.Context, func (n *networkHarness) CloseChannel(ctx context.Context,
lnNode *lightningNode, cp *lnrpc.ChannelPoint, lnNode *lightningNode, cp *lnrpc.ChannelPoint,
force bool) (lnrpc.Lightning_CloseChannelClient, *wire.ShaHash, error) { force bool) (lnrpc.Lightning_CloseChannelClient, *chainhash.Hash, error) {
closeReq := &lnrpc.CloseChannelRequest{ closeReq := &lnrpc.CloseChannelRequest{
ChannelPoint: cp, ChannelPoint: cp,
@ -746,7 +747,7 @@ func (n *networkHarness) CloseChannel(ctx context.Context,
} }
errChan := make(chan error) errChan := make(chan error)
fin := make(chan *wire.ShaHash) fin := make(chan *chainhash.Hash)
go func() { go func() {
// Consume the "channel close" update in order to wait for the closing // Consume the "channel close" update in order to wait for the closing
// transaction to be broadcast, then wait for the closing tx to be seen // transaction to be broadcast, then wait for the closing tx to be seen
@ -763,7 +764,7 @@ func (n *networkHarness) CloseChannel(ctx context.Context,
return return
} }
closeTxid, err := wire.NewShaHash(pendingClose.ClosePending.Txid) closeTxid, err := chainhash.NewHash(pendingClose.ClosePending.Txid)
if err != nil { if err != nil {
errChan <- err errChan <- err
return return
@ -793,7 +794,7 @@ func (n *networkHarness) CloseChannel(ctx context.Context,
// passed context has a timeout, then if the timeout is reached before the // passed context has a timeout, then if the timeout is reached before the
// notification is received then an error is returned. // notification is received then an error is returned.
func (n *networkHarness) WaitForChannelClose(ctx context.Context, func (n *networkHarness) WaitForChannelClose(ctx context.Context,
closeChanStream lnrpc.Lightning_CloseChannelClient) (*wire.ShaHash, error) { closeChanStream lnrpc.Lightning_CloseChannelClient) (*chainhash.Hash, error) {
errChan := make(chan error) errChan := make(chan error)
updateChan := make(chan *lnrpc.CloseStatusUpdate_ChanClose) updateChan := make(chan *lnrpc.CloseStatusUpdate_ChanClose)
@ -822,7 +823,7 @@ func (n *networkHarness) WaitForChannelClose(ctx context.Context,
case err := <-errChan: case err := <-errChan:
return nil, err return nil, err
case update := <-updateChan: case update := <-updateChan:
return wire.NewShaHash(update.ChanClose.ClosingTxid) return chainhash.NewHash(update.ChanClose.ClosingTxid)
} }
} }
@ -898,7 +899,7 @@ func (n *networkHarness) SendCoins(ctx context.Context, amt btcutil.Amount,
PkScript: addrScript, PkScript: addrScript,
Value: int64(amt), Value: int64(amt),
} }
if _, err := n.Miner.CoinbaseSpend([]*wire.TxOut{output}); err != nil { if _, err := n.Miner.SendOutputs([]*wire.TxOut{output}, 30); err != nil {
return err return err
} }

11
peer.go
View File

@ -20,6 +20,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -69,7 +70,7 @@ type peer struct {
conn net.Conn conn net.Conn
addr *lnwire.NetAddress addr *lnwire.NetAddress
lightningID wire.ShaHash lightningID chainhash.Hash
inbound bool inbound bool
id int32 id int32
@ -157,7 +158,7 @@ func newPeer(conn net.Conn, server *server, addr *lnwire.NetAddress,
p := &peer{ p := &peer{
conn: conn, conn: conn,
lightningID: wire.ShaHash(fastsha256.Sum256(nodePub.SerializeCompressed())), lightningID: chainhash.Hash(fastsha256.Sum256(nodePub.SerializeCompressed())),
addr: addr, addr: addr,
id: atomic.AddInt32(&numNodes, 1), id: atomic.AddInt32(&numNodes, 1),
@ -694,7 +695,7 @@ out:
// cooperative channel close. The channel state machine is transitioned to the // cooperative channel close. The channel state machine is transitioned to the
// closing phase, then our half of the closing witness is sent over to the // closing phase, then our half of the closing witness is sent over to the
// remote peer. // remote peer.
func (p *peer) executeCooperativeClose(channel *lnwallet.LightningChannel) (*wire.ShaHash, error) { func (p *peer) executeCooperativeClose(channel *lnwallet.LightningChannel) (*chainhash.Hash, error) {
// Shift the channel state machine into a 'closing' state. This // Shift the channel state machine into a 'closing' state. This
// generates a signature for the closing tx, as well as a txid of the // generates a signature for the closing tx, as well as a txid of the
// closing tx itself, allowing us to watch the network to determine // closing tx itself, allowing us to watch the network to determine
@ -730,7 +731,7 @@ func (p *peer) executeCooperativeClose(channel *lnwallet.LightningChannel) (*wir
func (p *peer) handleLocalClose(req *closeLinkReq) { func (p *peer) handleLocalClose(req *closeLinkReq) {
var ( var (
err error err error
closingTxid *wire.ShaHash closingTxid *chainhash.Hash
) )
p.activeChanMtx.RLock() p.activeChanMtx.RLock()
@ -1417,7 +1418,7 @@ func (p *peer) handleUpstreamMsg(state *commitmentState, msg lnwire.Message) {
// with this latest commitment update. // with this latest commitment update.
// TODO(roasbeef): wait until next transition? // TODO(roasbeef): wait until next transition?
for invoice, _ := range settledPayments { for invoice, _ := range settledPayments {
err := p.server.invoices.SettleInvoice(wire.ShaHash(invoice)) err := p.server.invoices.SettleInvoice(chainhash.Hash(invoice))
if err != nil { if err != nil {
peerLog.Errorf("unable to settle invoice: %v", err) peerLog.Errorf("unable to settle invoice: %v", err)
} }

View File

@ -14,6 +14,7 @@ import (
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -201,7 +202,7 @@ func parseTestGraph(path string) (*channeldb.ChannelGraph, func(), aliasMap, err
} }
fundingTXID := strings.Split(edge.ChannelPoint, ":")[0] fundingTXID := strings.Split(edge.ChannelPoint, ":")[0]
txidBytes, err := wire.NewShaHashFromStr(fundingTXID) txidBytes, err := chainhash.NewHashFromStr(fundingTXID)
if err != nil { if err != nil {
return nil, nil, nil, err return nil, nil, nil, err
} }

View File

@ -752,7 +752,7 @@ func (r *ChannelRouter) fetchChanPoint(chanID *lnwire.ChannelID) (*wire.OutPoint
// transaction index to obtain the funding output and txid. // transaction index to obtain the funding output and txid.
fundingTx := fundingBlock.Transactions[chanID.TxIndex] fundingTx := fundingBlock.Transactions[chanID.TxIndex]
return &wire.OutPoint{ return &wire.OutPoint{
Hash: fundingTx.TxSha(), Hash: fundingTx.TxHash(),
Index: uint32(chanID.TxPosition), Index: uint32(chanID.TxPosition),
}, nil }, nil
} }

View File

@ -24,6 +24,7 @@ import (
"github.com/lightningnetwork/lnd/zpay32" "github.com/lightningnetwork/lnd/zpay32"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg" "github.com/roasbeef/btcd/chaincfg"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -104,7 +105,7 @@ func addrPairsToOutputs(addrPairs map[string]int64) ([]*wire.TxOut, error) {
// sendCoinsOnChain makes an on-chain transaction in or to send coins to one or // sendCoinsOnChain makes an on-chain transaction in or to send coins to one or
// more addresses specified in the passed payment map. The payment map maps an // more addresses specified in the passed payment map. The payment map maps an
// address to a specified output value to be sent to that address. // address to a specified output value to be sent to that address.
func (r *rpcServer) sendCoinsOnChain(paymentMap map[string]int64) (*wire.ShaHash, error) { func (r *rpcServer) sendCoinsOnChain(paymentMap map[string]int64) (*chainhash.Hash, error) {
outputs, err := addrPairsToOutputs(paymentMap) outputs, err := addrPairsToOutputs(paymentMap)
if err != nil { if err != nil {
return nil, err return nil, err
@ -271,7 +272,7 @@ out:
switch update := fundingUpdate.Update.(type) { switch update := fundingUpdate.Update.(type) {
case *lnrpc.OpenStatusUpdate_ChanOpen: case *lnrpc.OpenStatusUpdate_ChanOpen:
chanPoint := update.ChanOpen.ChannelPoint chanPoint := update.ChanOpen.ChannelPoint
h, _ := wire.NewShaHash(chanPoint.FundingTxid) h, _ := chainhash.NewHash(chanPoint.FundingTxid)
outpoint = wire.OutPoint{ outpoint = wire.OutPoint{
Hash: *h, Hash: *h,
Index: chanPoint.OutputIndex, Index: chanPoint.OutputIndex,
@ -354,7 +355,7 @@ func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest,
force := in.Force force := in.Force
index := in.ChannelPoint.OutputIndex index := in.ChannelPoint.OutputIndex
txid, err := wire.NewShaHash(in.ChannelPoint.FundingTxid) txid, err := chainhash.NewHash(in.ChannelPoint.FundingTxid)
if err != nil { if err != nil {
rpcsLog.Errorf("[closechannel] invalid txid: %v", err) rpcsLog.Errorf("[closechannel] invalid txid: %v", err)
return err return err
@ -472,7 +473,7 @@ out:
// longer need to process any further updates. // longer need to process any further updates.
switch closeUpdate := closingUpdate.Update.(type) { switch closeUpdate := closingUpdate.Update.(type) {
case *lnrpc.CloseStatusUpdate_ChanClose: case *lnrpc.CloseStatusUpdate_ChanClose:
h, _ := wire.NewShaHash(closeUpdate.ChanClose.ClosingTxid) h, _ := chainhash.NewHash(closeUpdate.ChanClose.ClosingTxid)
rpcsLog.Infof("[closechannel] close completed: "+ rpcsLog.Infof("[closechannel] close completed: "+
"txid(%v)", h) "txid(%v)", h)
break out break out
@ -520,7 +521,7 @@ func (r *rpcServer) fetchActiveChannel(chanPoint wire.OutPoint) (*lnwallet.Light
// commitment transaction has been broadcast, a struct describing the final // commitment transaction has been broadcast, a struct describing the final
// state of the channel is sent to the utxoNursery in order to ultimately sweep // state of the channel is sent to the utxoNursery in order to ultimately sweep
// the immature outputs. // the immature outputs.
func (r *rpcServer) forceCloseChan(channel *lnwallet.LightningChannel) (*wire.ShaHash, error) { func (r *rpcServer) forceCloseChan(channel *lnwallet.LightningChannel) (*chainhash.Hash, error) {
// Execute a unilateral close shutting down all further channel // Execute a unilateral close shutting down all further channel
// operation. // operation.
closeSummary, err := channel.ForceClose() closeSummary, err := channel.ForceClose()
@ -529,7 +530,7 @@ func (r *rpcServer) forceCloseChan(channel *lnwallet.LightningChannel) (*wire.Sh
} }
closeTx := closeSummary.CloseTx closeTx := closeSummary.CloseTx
txid := closeTx.TxSha() txid := closeTx.TxHash()
// With the close transaction in hand, broadcast the transaction to the // With the close transaction in hand, broadcast the transaction to the
// network, thereby entering the psot channel resolution state. // network, thereby entering the psot channel resolution state.
@ -1014,7 +1015,7 @@ func (r *rpcServer) constructPaymentRoute(destNode *btcec.PublicKey,
} }
firstHopPub := route.Hops[0].Channel.Node.PubKey.SerializeCompressed() firstHopPub := route.Hops[0].Channel.Node.PubKey.SerializeCompressed()
destInterface := wire.ShaHash(fastsha256.Sum256(firstHopPub)) destInterface := chainhash.Hash(fastsha256.Sum256(firstHopPub))
return &htlcPacket{ return &htlcPacket{
dest: destInterface, dest: destInterface,

View File

@ -8,7 +8,7 @@ import (
"io" "io"
"sync" "sync"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
) )
@ -32,7 +32,7 @@ type HyperShaChain struct {
chainBranches [64]chainBranch chainBranches [64]chainBranch
lastHash wire.ShaHash lastHash chainhash.Hash
} }
// NewHyperShaChain // NewHyperShaChain
@ -145,14 +145,14 @@ func (h *HyperShaChain) AddNextHash(hash [32]byte) error {
} }
// CurrentPreImage... // CurrentPreImage...
func (h *HyperShaChain) CurrentPreImage() *wire.ShaHash { func (h *HyperShaChain) CurrentPreImage() *chainhash.Hash {
h.RLock() h.RLock()
defer h.RUnlock() defer h.RUnlock()
return &h.lastHash return &h.lastHash
} }
// CurrentRevocationHash... // CurrentRevocationHash...
// TODO(roasbeef): *wire.ShaHash vs [wire.HashSize]byte ? // TODO(roasbeef): *chainhash.Hash vs [wire.HashSize]byte ?
func (h *HyperShaChain) CurrentRevocationHash() []byte { func (h *HyperShaChain) CurrentRevocationHash() []byte {
h.RLock() h.RLock()
defer h.RUnlock() defer h.RUnlock()

View File

@ -581,8 +581,7 @@ func createSweepTx(wallet *lnwallet.LightningWallet, matureOutputs []*kidOutput)
totalSum += o.amt totalSum += o.amt
} }
sweepTx := wire.NewMsgTx() sweepTx := wire.NewMsgTx(2)
sweepTx.Version = 2
sweepTx.AddTxOut(&wire.TxOut{ sweepTx.AddTxOut(&wire.TxOut{
PkScript: pkScript, PkScript: pkScript,
Value: int64(totalSum - 5000), Value: int64(totalSum - 5000),

View File

@ -8,6 +8,7 @@ import (
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/roasbeef/btcd/btcec" "github.com/roasbeef/btcd/btcec"
"github.com/roasbeef/btcd/chaincfg/chainhash"
"github.com/roasbeef/btcd/txscript" "github.com/roasbeef/btcd/txscript"
"github.com/roasbeef/btcd/wire" "github.com/roasbeef/btcd/wire"
"github.com/roasbeef/btcutil" "github.com/roasbeef/btcutil"
@ -16,7 +17,7 @@ import (
var ( var (
outPoints = []wire.OutPoint{ outPoints = []wire.OutPoint{
wire.OutPoint{ wire.OutPoint{
Hash: [wire.HashSize]byte{ Hash: [chainhash.HashSize]byte{
0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, 0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
0x2d, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d, 0x2d, 0xe7, 0x93, 0xe4, 0xb7, 0x25, 0xb8, 0x4d,
@ -25,7 +26,7 @@ var (
Index: 9, Index: 9,
}, },
wire.OutPoint{ wire.OutPoint{
Hash: [wire.HashSize]byte{ Hash: [chainhash.HashSize]byte{
0xb7, 0x94, 0x38, 0x5f, 0x2d, 0x1e, 0xf7, 0xab, 0xb7, 0x94, 0x38, 0x5f, 0x2d, 0x1e, 0xf7, 0xab,
0x4d, 0x92, 0x73, 0xd1, 0x90, 0x63, 0x81, 0xb4, 0x4d, 0x92, 0x73, 0xd1, 0x90, 0x63, 0x81, 0xb4,
0x4f, 0x2f, 0x6f, 0x25, 0x88, 0xa3, 0xef, 0xb9, 0x4f, 0x2f, 0x6f, 0x25, 0x88, 0xa3, 0xef, 0xb9,
@ -34,7 +35,7 @@ var (
Index: 49, Index: 49,
}, },
wire.OutPoint{ wire.OutPoint{
Hash: [wire.HashSize]byte{ Hash: [chainhash.HashSize]byte{
0x81, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda, 0x81, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
0x63, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17, 0x63, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
0xd, 0xe7, 0x95, 0xe4, 0xb7, 0x25, 0xb8, 0x4d, 0xd, 0xe7, 0x95, 0xe4, 0xb7, 0x25, 0xb8, 0x4d,