mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-09-22 15:57:49 +02:00
multi: add bitcoind drivers and tests
This commit is contained in:
@@ -29,23 +29,7 @@ var (
|
||||
//
|
||||
// This method is a part of the lnwallet.BlockChainIO interface.
|
||||
func (b *BtcWallet) GetBestBlock() (*chainhash.Hash, int32, error) {
|
||||
switch backend := b.chain.(type) {
|
||||
|
||||
case *chain.NeutrinoClient:
|
||||
header, height, err := backend.CS.BlockHeaders.ChainTip()
|
||||
if err != nil {
|
||||
return nil, -1, err
|
||||
}
|
||||
|
||||
blockHash := header.BlockHash()
|
||||
return &blockHash, int32(height), nil
|
||||
|
||||
case *chain.RPCClient:
|
||||
return backend.GetBestBlock()
|
||||
|
||||
default:
|
||||
return nil, -1, fmt.Errorf("unknown backend")
|
||||
}
|
||||
return b.chain.GetBestBlock()
|
||||
}
|
||||
|
||||
// GetUtxo returns the original output referenced by the passed outpoint.
|
||||
@@ -100,6 +84,26 @@ func (b *BtcWallet) GetUtxo(op *wire.OutPoint, heightHint uint32) (*wire.TxOut,
|
||||
PkScript: pkScript,
|
||||
}, nil
|
||||
|
||||
case *chain.BitcoindClient:
|
||||
txout, err := backend.GetTxOut(&op.Hash, op.Index, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if txout == nil {
|
||||
return nil, ErrOutputSpent
|
||||
}
|
||||
|
||||
pkScript, err := hex.DecodeString(txout.ScriptPubKey.Hex)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &wire.TxOut{
|
||||
// Sadly, gettxout returns the output value in BTC
|
||||
// instead of satoshis.
|
||||
Value: int64(txout.Value * 1e8),
|
||||
PkScript: pkScript,
|
||||
}, nil
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown backend")
|
||||
}
|
||||
@@ -109,27 +113,7 @@ func (b *BtcWallet) GetUtxo(op *wire.OutPoint, heightHint uint32) (*wire.TxOut,
|
||||
//
|
||||
// This method is a part of the lnwallet.BlockChainIO interface.
|
||||
func (b *BtcWallet) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) {
|
||||
switch backend := b.chain.(type) {
|
||||
|
||||
case *chain.NeutrinoClient:
|
||||
block, err := backend.CS.GetBlockFromNetwork(*blockHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return block.MsgBlock(), nil
|
||||
|
||||
case *chain.RPCClient:
|
||||
block, err := backend.GetBlock(blockHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return block, nil
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown backend")
|
||||
}
|
||||
return b.chain.GetBlock(blockHash)
|
||||
}
|
||||
|
||||
// GetBlockHash returns the hash of the block in the best blockchain at the
|
||||
@@ -137,29 +121,7 @@ func (b *BtcWallet) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error)
|
||||
//
|
||||
// This method is a part of the lnwallet.BlockChainIO interface.
|
||||
func (b *BtcWallet) GetBlockHash(blockHeight int64) (*chainhash.Hash, error) {
|
||||
switch backend := b.chain.(type) {
|
||||
|
||||
case *chain.NeutrinoClient:
|
||||
height := uint32(blockHeight)
|
||||
blockHeader, err := backend.CS.BlockHeaders.FetchHeaderByHeight(height)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
blockHash := blockHeader.BlockHash()
|
||||
return &blockHash, nil
|
||||
|
||||
case *chain.RPCClient:
|
||||
blockHash, err := backend.GetBlockHash(blockHeight)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return blockHash, nil
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown backend")
|
||||
}
|
||||
return b.chain.GetBlockHash(blockHeight)
|
||||
}
|
||||
|
||||
// A compile time check to ensure that BtcWallet implements the BlockChainIO
|
||||
|
Reference in New Issue
Block a user