multi: update due to latest API changes

This commit is contained in:
Olaoluwa Osuntokun 2018-05-23 18:59:31 -07:00
parent e22bcf88df
commit b0b64d3bbd
8 changed files with 44 additions and 77 deletions

View file

@ -14,11 +14,11 @@ import (
"runtime"
"sync"
"github.com/lightninglabs/neutrino"
"github.com/btcsuite/btcwallet/chain"
"github.com/btcsuite/btcwallet/rpc/legacyrpc"
"github.com/btcsuite/btcwallet/wallet"
"github.com/btcsuite/btcwallet/walletdb"
"github.com/lightninglabs/neutrino"
)
var (
@ -69,7 +69,7 @@ func walletMain() error {
}
dbDir := networkDir(cfg.AppDataDir.Value, activeNet.Params)
loader := wallet.NewLoader(activeNet.Params, dbDir)
loader := wallet.NewLoader(activeNet.Params, dbDir, 250)
// Create and start HTTP server to serve wallet client connections.
// This will be updated with the wallet and chain server RPC client
@ -179,7 +179,7 @@ func rpcClientConnectLoop(legacyRPCServer *legacyrpc.Server, loader *wallet.Load
log.Errorf("Couldn't create Neutrino ChainService: %s", err)
continue
}
chainClient = chain.NewNeutrinoClient(chainService)
chainClient = chain.NewNeutrinoClient(activeNet.Params, chainService)
err = chainClient.Start()
if err != nil {
log.Errorf("Couldn't start Neutrino client: %s", err)

55
log.go
View file

@ -10,6 +10,7 @@ import (
"os"
"path/filepath"
"github.com/btcsuite/btcd/rpcclient"
"github.com/btcsuite/btclog"
"github.com/btcsuite/btcwallet/chain"
"github.com/btcsuite/btcwallet/rpc/legacyrpc"
@ -26,7 +27,7 @@ type logWriter struct{}
func (logWriter) Write(p []byte) (n int, err error) {
os.Stdout.Write(p)
logRotator.Write(p)
logRotatorPipe.Write(p)
return len(p), nil
}
@ -48,6 +49,10 @@ var (
// application shutdown.
logRotator *rotator.Rotator
// logRotatorPipe is the write-end pipe for writing to the log rotator. It
// is written to by the Write method of the logWriter type.
logRotatorPipe *io.PipeWriter
log = backendLog.Logger("BTCW")
walletLog = backendLog.Logger("WLLT")
txmgrLog = backendLog.Logger("TMGR")
@ -88,54 +93,7 @@ func initLogRotator(logFile string) {
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create log directory: %v\n", err)
os.Exit(1)
// logClosure is used to provide a closure over expensive logging operations
// so don't have to be performed when the logging level doesn't warrant it.
type logClosure func() string
// String invokes the underlying function and returns the result.
func (c logClosure) String() string {
return c()
}
// newLogClosure returns a new closure over a function that returns a string
// which itself provides a Stringer interface so that it can be used with the
// logging system.
func newLogClosure(c func() string) logClosure {
return logClosure(c)
}
// useLogger updates the logger references for subsystemID to logger. Invalid
// subsystems are ignored.
func useLogger(subsystemID string, logger btclog.Logger) {
if _, ok := subsystemLoggers[subsystemID]; !ok {
return
}
subsystemLoggers[subsystemID] = logger
switch subsystemID {
case "BTCW":
log = logger
case "WLLT":
walletLog = logger
wallet.UseLogger(logger)
case "TXST":
txmgrLog = logger
wtxmgr.UseLogger(logger)
case "CHNS":
chainLog = logger
chain.UseLogger(logger)
btcrpcclient.UseLogger(logger)
case "GRPC":
grpcLog = logger
rpcserver.UseLogger(logger)
case "RPCS":
legacyRPCLog = logger
legacyrpc.UseLogger(logger)
case "BTCN":
btcnLog = logger
neutrino.UseLogger(logger)
}
r, err := rotator.New(logFile, 10*1024, false, 3)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create file rotator: %v\n", err)
@ -146,6 +104,7 @@ func useLogger(subsystemID string, logger btclog.Logger) {
go r.Run(pr)
logRotator = r
logRotatorPipe = pw
}
// setLogLevel sets the logging level for provided subsystem. Invalid

View file

@ -1711,7 +1711,7 @@ func signRawTransaction(icmd interface{}, w *wallet.Wallet, chainClient *chain.R
// `complete' denotes that we successfully signed all outputs and that
// all scripts will run to completion. This is returned as part of the
// reply.
signErrs, err := w.SignTransaction(tx, hashType, inputs, keys, scripts)
signErrs, err := w.SignTransaction(&tx, hashType, inputs, keys, scripts)
if err != nil {
return nil, err
}

View file

@ -722,7 +722,9 @@ func (s *loaderServer) CreateWallet(ctx context.Context, req *pb.CreateWalletReq
pubPassphrase = []byte(wallet.InsecurePubPassphrase)
}
wallet, err := s.loader.CreateNewWallet(pubPassphrase, req.PrivatePassphrase, req.Seed)
wallet, err := s.loader.CreateNewWallet(
pubPassphrase, req.PrivatePassphrase, req.Seed, time.Now(),
)
if err != nil {
return nil, translateError(err)
}

View file

@ -735,7 +735,11 @@ func (p *Pool) addUsedAddr(ns, addrmgrNs walletdb.ReadWriteBucket, seriesID uint
// to have it in the used addresses DB but not in the address manager.
// TODO: Decide how far back we want the addr manager to rescan and set the
// BlockStamp height according to that.
_, err = p.manager.ImportScript(addrmgrNs, script, &waddrmgr.BlockStamp{})
manager, err := p.manager.FetchScopedKeyManager(waddrmgr.KeyScopeBIP0044)
if err != nil {
return err
}
_, err = manager.ImportScript(addrmgrNs, script, &waddrmgr.BlockStamp{})
if err != nil && err.(waddrmgr.ManagerError).ErrorCode != waddrmgr.ErrDuplicateAddress {
return err
}

View file

@ -368,7 +368,7 @@ func (tx *withdrawalTx) toMsgTx() *wire.MsgTx {
}
for _, i := range tx.inputs {
msgtx.AddTxIn(wire.NewTxIn(&i.OutPoint, []byte{}))
msgtx.AddTxIn(wire.NewTxIn(&i.OutPoint, []byte{}, nil))
}
return msgtx
}
@ -983,7 +983,7 @@ func signMultiSigUTXO(mgr *waddrmgr.Manager, addrmgrNs walletdb.ReadBucket, tx *
// given index, returning an error if it fails.
func validateSigScript(msgtx *wire.MsgTx, idx int, pkScript []byte) error {
vm, err := txscript.NewEngine(pkScript, msgtx, idx,
txscript.StandardVerifyFlags, nil)
txscript.StandardVerifyFlags, nil, nil, 0)
if err != nil {
return newError(ErrTxSigning, "cannot create script engine", err)
}

View file

@ -28,15 +28,17 @@ func makeInputSource(unspents []*wire.TxOut) InputSource {
// Return outputs in order.
currentTotal := btcutil.Amount(0)
currentInputs := make([]*wire.TxIn, 0, len(unspents))
f := func(target btcutil.Amount) (btcutil.Amount, []*wire.TxIn, [][]byte, error) {
currentInputValues := make([]btcutil.Amount, 0, len(unspents))
f := func(target btcutil.Amount) (btcutil.Amount, []*wire.TxIn, []btcutil.Amount, [][]byte, error) {
for currentTotal < target && len(unspents) != 0 {
u := unspents[0]
unspents = unspents[1:]
nextInput := wire.NewTxIn(&wire.OutPoint{}, nil)
nextInput := wire.NewTxIn(&wire.OutPoint{}, nil, nil)
currentTotal += btcutil.Amount(u.Value)
currentInputs = append(currentInputs, nextInput)
currentInputValues = append(currentInputValues, btcutil.Amount(u.Value))
}
return currentTotal, currentInputs, make([][]byte, len(currentInputs)), nil
return currentTotal, currentInputs, currentInputValues, make([][]byte, len(currentInputs)), nil
}
return InputSource(f)
}
@ -61,7 +63,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
Outputs: p2pkhOutputs(1e6),
RelayFee: 1e3,
ChangeAmount: 1e8 - 1e6 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(1e6), true)),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(1e6), true)),
InputCount: 1,
},
2: {
@ -69,7 +71,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
Outputs: p2pkhOutputs(1e6),
RelayFee: 1e4,
ChangeAmount: 1e8 - 1e6 - txrules.FeeForSerializeSize(1e4,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(1e6), true)),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(1e6), true)),
InputCount: 1,
},
3: {
@ -77,7 +79,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
Outputs: p2pkhOutputs(1e6, 1e6, 1e6),
RelayFee: 1e4,
ChangeAmount: 1e8 - 3e6 - txrules.FeeForSerializeSize(1e4,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(1e6, 1e6, 1e6), true)),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(1e6, 1e6, 1e6), true)),
InputCount: 1,
},
4: {
@ -85,7 +87,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
Outputs: p2pkhOutputs(1e6, 1e6, 1e6),
RelayFee: 2.55e3,
ChangeAmount: 1e8 - 3e6 - txrules.FeeForSerializeSize(2.55e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(1e6, 1e6, 1e6), true)),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(1e6, 1e6, 1e6), true)),
InputCount: 1,
},
@ -93,15 +95,15 @@ func TestNewUnsignedTransaction(t *testing.T) {
5: {
UnspentOutputs: p2pkhOutputs(1e8),
Outputs: p2pkhOutputs(1e8 - 545 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 1e3,
ChangeAmount: 0,
ChangeAmount: 545,
InputCount: 1,
},
6: {
UnspentOutputs: p2pkhOutputs(1e8),
Outputs: p2pkhOutputs(1e8 - 546 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 1e3,
ChangeAmount: 546,
InputCount: 1,
@ -111,15 +113,15 @@ func TestNewUnsignedTransaction(t *testing.T) {
7: {
UnspentOutputs: p2pkhOutputs(1e8),
Outputs: p2pkhOutputs(1e8 - 1392 - txrules.FeeForSerializeSize(2.55e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 2.55e3,
ChangeAmount: 0,
ChangeAmount: 1392,
InputCount: 1,
},
8: {
UnspentOutputs: p2pkhOutputs(1e8),
Outputs: p2pkhOutputs(1e8 - 1393 - txrules.FeeForSerializeSize(2.55e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 2.55e3,
ChangeAmount: 1393,
InputCount: 1,
@ -131,7 +133,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
9: {
UnspentOutputs: p2pkhOutputs(1e8, 1e8),
Outputs: p2pkhOutputs(1e8 - 546 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 1e3,
ChangeAmount: 546,
InputCount: 1,
@ -145,9 +147,9 @@ func TestNewUnsignedTransaction(t *testing.T) {
10: {
UnspentOutputs: p2pkhOutputs(1e8, 1e8),
Outputs: p2pkhOutputs(1e8 - 545 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(1, p2pkhOutputs(0), true))),
txsizes.EstimateVirtualSize(1, 0, 0, p2pkhOutputs(0), true))),
RelayFee: 1e3,
ChangeAmount: 0,
ChangeAmount: 545,
InputCount: 1,
},
@ -157,7 +159,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
Outputs: p2pkhOutputs(1e8),
RelayFee: 1e3,
ChangeAmount: 1e8 - txrules.FeeForSerializeSize(1e3,
txsizes.EstimateSerializeSize(2, p2pkhOutputs(1e8), true)),
txsizes.EstimateVirtualSize(2, 0, 0, p2pkhOutputs(1e8), true)),
InputCount: 2,
},
@ -174,7 +176,7 @@ func TestNewUnsignedTransaction(t *testing.T) {
changeSource := func() ([]byte, error) {
// Only length matters for these tests.
return make([]byte, txsizes.P2PKHPkScriptSize), nil
return make([]byte, txsizes.P2WPKHPkScriptSize), nil
}
for i, test := range tests {

View file

@ -102,7 +102,7 @@ func convertLegacyKeystore(legacyKeyStore *keystore.Store, w *wallet.Wallet) err
// provided path.
func createWallet(cfg *config) error {
dbDir := networkDir(cfg.AppDataDir.Value, activeNet.Params)
loader := wallet.NewLoader(activeNet.Params, dbDir)
loader := wallet.NewLoader(activeNet.Params, dbDir, 250)
// When there is a legacy keystore, open it now to ensure any errors
// don't end up exiting the process after the user has spent time
@ -193,7 +193,7 @@ func createWallet(cfg *config) error {
}
fmt.Println("Creating the wallet...")
w, err := loader.CreateNewWallet(pubPass, privPass, seed)
w, err := loader.CreateNewWallet(pubPass, privPass, seed, time.Now())
if err != nil {
return err
}
@ -226,7 +226,7 @@ func createSimulationWallet(cfg *config) error {
defer db.Close()
// Create the wallet.
err = wallet.Create(db, pubPass, privPass, nil, activeNet.Params)
err = wallet.Create(db, pubPass, privPass, nil, activeNet.Params, time.Now())
if err != nil {
return err
}