You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
5.3 KiB
200 lines
5.3 KiB
package mock |
|
|
|
import ( |
|
"encoding/hex" |
|
"sync/atomic" |
|
"time" |
|
|
|
"github.com/btcsuite/btcd/btcec" |
|
"github.com/btcsuite/btcd/chaincfg" |
|
"github.com/btcsuite/btcd/chaincfg/chainhash" |
|
"github.com/btcsuite/btcd/wire" |
|
"github.com/btcsuite/btcutil" |
|
"github.com/btcsuite/btcutil/psbt" |
|
"github.com/btcsuite/btcwallet/wallet/txauthor" |
|
"github.com/btcsuite/btcwallet/wtxmgr" |
|
|
|
"github.com/lightningnetwork/lnd/lnwallet" |
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee" |
|
) |
|
|
|
var ( |
|
CoinPkScript, _ = hex.DecodeString("001431df1bde03c074d0cf21ea2529427e1499b8f1de") |
|
) |
|
|
|
// WalletController is a mock implementation of the WalletController |
|
// interface. It let's us mock the interaction with the bitcoin network. |
|
type WalletController struct { |
|
RootKey *btcec.PrivateKey |
|
PublishedTransactions chan *wire.MsgTx |
|
index uint32 |
|
Utxos []*lnwallet.Utxo |
|
} |
|
|
|
// BackEnd returns "mock" to signify a mock wallet controller. |
|
func (w *WalletController) BackEnd() string { |
|
return "mock" |
|
} |
|
|
|
// FetchInputInfo will be called to get info about the inputs to the funding |
|
// transaction. |
|
func (w *WalletController) FetchInputInfo( |
|
prevOut *wire.OutPoint) (*lnwallet.Utxo, error) { |
|
|
|
utxo := &lnwallet.Utxo{ |
|
AddressType: lnwallet.WitnessPubKey, |
|
Value: 10 * btcutil.SatoshiPerBitcoin, |
|
PkScript: []byte("dummy"), |
|
Confirmations: 1, |
|
OutPoint: *prevOut, |
|
} |
|
return utxo, nil |
|
} |
|
|
|
// ConfirmedBalance currently returns dummy values. |
|
func (w *WalletController) ConfirmedBalance(confs int32, |
|
_ string) (btcutil.Amount, error) { |
|
return 0, nil |
|
} |
|
|
|
// NewAddress is called to get new addresses for delivery, change etc. |
|
func (w *WalletController) NewAddress(addrType lnwallet.AddressType, |
|
change bool, _ string) (btcutil.Address, error) { |
|
|
|
addr, _ := btcutil.NewAddressPubKey( |
|
w.RootKey.PubKey().SerializeCompressed(), &chaincfg.MainNetParams, |
|
) |
|
return addr, nil |
|
} |
|
|
|
// LastUnusedAddress currently returns dummy values. |
|
func (w *WalletController) LastUnusedAddress(addrType lnwallet.AddressType, |
|
_ string) (btcutil.Address, error) { |
|
return nil, nil |
|
} |
|
|
|
// IsOurAddress currently returns a dummy value. |
|
func (w *WalletController) IsOurAddress(a btcutil.Address) bool { |
|
return false |
|
} |
|
|
|
// SendOutputs currently returns dummy values. |
|
func (w *WalletController) SendOutputs(outputs []*wire.TxOut, |
|
_ chainfee.SatPerKWeight, _ int32, _ string) (*wire.MsgTx, error) { |
|
|
|
return nil, nil |
|
} |
|
|
|
// CreateSimpleTx currently returns dummy values. |
|
func (w *WalletController) CreateSimpleTx(outputs []*wire.TxOut, |
|
_ chainfee.SatPerKWeight, _ bool) (*txauthor.AuthoredTx, error) { |
|
|
|
return nil, nil |
|
} |
|
|
|
// ListUnspentWitness is called by the wallet when doing coin selection. We just |
|
// need one unspent for the funding transaction. |
|
func (w *WalletController) ListUnspentWitness(minconfirms, |
|
maxconfirms int32, _ string) ([]*lnwallet.Utxo, error) { |
|
|
|
// If the mock already has a list of utxos, return it. |
|
if w.Utxos != nil { |
|
return w.Utxos, nil |
|
} |
|
|
|
// Otherwise create one to return. |
|
utxo := &lnwallet.Utxo{ |
|
AddressType: lnwallet.WitnessPubKey, |
|
Value: btcutil.Amount(10 * btcutil.SatoshiPerBitcoin), |
|
PkScript: CoinPkScript, |
|
OutPoint: wire.OutPoint{ |
|
Hash: chainhash.Hash{}, |
|
Index: w.index, |
|
}, |
|
} |
|
atomic.AddUint32(&w.index, 1) |
|
var ret []*lnwallet.Utxo |
|
ret = append(ret, utxo) |
|
return ret, nil |
|
} |
|
|
|
// ListTransactionDetails currently returns dummy values. |
|
func (w *WalletController) ListTransactionDetails(_, |
|
_ int32, _ string) ([]*lnwallet.TransactionDetail, error) { |
|
|
|
return nil, nil |
|
} |
|
|
|
// LockOutpoint currently does nothing. |
|
func (w *WalletController) LockOutpoint(o wire.OutPoint) {} |
|
|
|
// UnlockOutpoint currently does nothing. |
|
func (w *WalletController) UnlockOutpoint(o wire.OutPoint) {} |
|
|
|
// LeaseOutput returns the current time and a nil error. |
|
func (w *WalletController) LeaseOutput(wtxmgr.LockID, wire.OutPoint, |
|
time.Duration) (time.Time, error) { |
|
|
|
return time.Now(), nil |
|
} |
|
|
|
// ReleaseOutput currently does nothing. |
|
func (w *WalletController) ReleaseOutput(wtxmgr.LockID, wire.OutPoint) error { |
|
return nil |
|
} |
|
|
|
func (w *WalletController) ListLeasedOutputs() ([]*wtxmgr.LockedOutput, error) { |
|
return nil, nil |
|
} |
|
|
|
// FundPsbt currently does nothing. |
|
func (w *WalletController) FundPsbt(_ *psbt.Packet, |
|
_ chainfee.SatPerKWeight, _ string) (int32, error) { |
|
|
|
return 0, nil |
|
} |
|
|
|
// FinalizePsbt currently does nothing. |
|
func (w *WalletController) FinalizePsbt(_ *psbt.Packet, _ string) error { |
|
return nil |
|
} |
|
|
|
// PublishTransaction sends a transaction to the PublishedTransactions chan. |
|
func (w *WalletController) PublishTransaction(tx *wire.MsgTx, _ string) error { |
|
w.PublishedTransactions <- tx |
|
return nil |
|
} |
|
|
|
// LabelTransaction currently does nothing. |
|
func (w *WalletController) LabelTransaction(_ chainhash.Hash, _ string, |
|
_ bool) error { |
|
|
|
return nil |
|
} |
|
|
|
// SubscribeTransactions currently does nothing. |
|
func (w *WalletController) SubscribeTransactions() (lnwallet.TransactionSubscription, |
|
error) { |
|
|
|
return nil, nil |
|
} |
|
|
|
// IsSynced currently returns dummy values. |
|
func (w *WalletController) IsSynced() (bool, int64, error) { |
|
return true, int64(0), nil |
|
} |
|
|
|
// GetRecoveryInfo currently returns dummy values. |
|
func (w *WalletController) GetRecoveryInfo() (bool, float64, error) { |
|
return true, float64(1), nil |
|
} |
|
|
|
// Start currently does nothing. |
|
func (w *WalletController) Start() error { |
|
return nil |
|
} |
|
|
|
// Stop currently does nothing. |
|
func (w *WalletController) Stop() error { |
|
return nil |
|
}
|
|
|