diff --git a/go.mod b/go.mod index 8c013381..fc5c8144 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f github.com/btcsuite/btcutil v1.0.2 github.com/btcsuite/btcutil/psbt v1.0.3-0.20200826194809-5f93e33af2b0 - github.com/btcsuite/btcwallet v0.11.1-0.20201207233335-415f37ff11a1 + github.com/btcsuite/btcwallet v0.11.1-0.20210312232944-4ec908df9386 github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0 github.com/btcsuite/btcwallet/wallet/txrules v1.0.0 github.com/btcsuite/btcwallet/walletdb v1.3.4 - github.com/btcsuite/btcwallet/wtxmgr v1.2.0 + github.com/btcsuite/btcwallet/wtxmgr v1.2.1-0.20210312232944-4ec908df9386 github.com/coreos/etcd v3.3.22+incompatible github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect diff --git a/go.sum b/go.sum index bb880836..5e6ea543 100644 --- a/go.sum +++ b/go.sum @@ -35,8 +35,8 @@ github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2ut github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil/psbt v1.0.3-0.20200826194809-5f93e33af2b0 h1:3Zumkyl6PWyHuVJ04me0xeD9CnPOhNgeGpapFbzy7O4= github.com/btcsuite/btcutil/psbt v1.0.3-0.20200826194809-5f93e33af2b0/go.mod h1:LVveMu4VaNSkIRTZu2+ut0HDBRuYjqGocxDMNS1KuGQ= -github.com/btcsuite/btcwallet v0.11.1-0.20201207233335-415f37ff11a1 h1:3gvLezYoUkr9MvxocB/vyPNzL+gSqsNT4Q6XTPK+R04= -github.com/btcsuite/btcwallet v0.11.1-0.20201207233335-415f37ff11a1/go.mod h1:P1U4LKSB/bhFQdOM7ab1XqNoBGFyFAe7eKObEBD9mIo= +github.com/btcsuite/btcwallet v0.11.1-0.20210312232944-4ec908df9386 h1:DfZIXWPAm35bW83OtS/AXH9A9pE6dxxIUhf260S9Wmo= +github.com/btcsuite/btcwallet v0.11.1-0.20210312232944-4ec908df9386/go.mod h1:P1U4LKSB/bhFQdOM7ab1XqNoBGFyFAe7eKObEBD9mIo= github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0 h1:KGHMW5sd7yDdDMkCZ/JpP0KltolFsQcB973brBnfj4c= github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0/go.mod h1:VufDts7bd/zs3GV13f/lXc/0lXrPnvxD/NvmpG/FEKU= github.com/btcsuite/btcwallet/wallet/txrules v1.0.0 h1:2VsfS0sBedcM5KmDzRMT3+b6xobqWveZGvjb+jFez5w= @@ -48,8 +48,9 @@ github.com/btcsuite/btcwallet/walletdb v1.3.2/go.mod h1:GZCMPNpUu5KE3ASoVd+k06p/ github.com/btcsuite/btcwallet/walletdb v1.3.4 h1:ExdPQSfYRLoYMEENsjWyl4w0PePLm9w3wg69nsRS2xc= github.com/btcsuite/btcwallet/walletdb v1.3.4/go.mod h1:oJDxAEUHVtnmIIBaa22wSBPTVcs6hUp5NKWmI8xDwwU= github.com/btcsuite/btcwallet/wtxmgr v1.0.0/go.mod h1:vc4gBprll6BP0UJ+AIGDaySoc7MdAmZf8kelfNb8CFY= -github.com/btcsuite/btcwallet/wtxmgr v1.2.0 h1:ZUYPsSv8GjF9KK7lboB2OVHF0uYEcHxgrCfFWqPd9NA= github.com/btcsuite/btcwallet/wtxmgr v1.2.0/go.mod h1:h8hkcKUE3X7lMPzTUoGnNiw5g7VhGrKEW3KpR2r0VnY= +github.com/btcsuite/btcwallet/wtxmgr v1.2.1-0.20210312232944-4ec908df9386 h1:lCSgu8j264LfpszU3NIiTJbtlT/jL+lsfGHWpSUscpE= +github.com/btcsuite/btcwallet/wtxmgr v1.2.1-0.20210312232944-4ec908df9386/go.mod h1:awQsh1n/0ZrEQ+JZgWvHeo153ubzEisf/FyNtwI0dDk= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/golangcrypto v0.0.0-20150304025918-53f62d9b43e8/go.mod h1:tYvUd8KLhm/oXvUeSEs2VlLghFjQt9+ZaF9ghH0JNjc= diff --git a/lnrpc/walletrpc/psbt.go b/lnrpc/walletrpc/psbt.go index e0b41f04..a981a230 100644 --- a/lnrpc/walletrpc/psbt.go +++ b/lnrpc/walletrpc/psbt.go @@ -18,6 +18,11 @@ const ( defaultMaxConf = math.MaxInt32 ) +var ( + // DefaultLockDuration is the default duration used to lock outputs. + DefaultLockDuration = 10 * time.Minute +) + // utxoLock is a type that contains an outpoint of an UTXO and its lock lease // information. type utxoLock struct { @@ -60,7 +65,9 @@ func lockInputs(w lnwallet.WalletController, packet *psbt.Packet) ([]*utxoLock, outpoint: rawInput.PreviousOutPoint, } - expiration, err := w.LeaseOutput(lock.lockID, lock.outpoint) + expiration, err := w.LeaseOutput( + lock.lockID, lock.outpoint, DefaultLockDuration, + ) if err != nil { // If we run into a problem with locking one output, we // should try to unlock those that we successfully diff --git a/lnrpc/walletrpc/walletkit_server.go b/lnrpc/walletrpc/walletkit_server.go index 392c6f30..58596c24 100644 --- a/lnrpc/walletrpc/walletkit_server.go +++ b/lnrpc/walletrpc/walletkit_server.go @@ -372,7 +372,9 @@ func (w *WalletKit) LeaseOutput(ctx context.Context, // other concurrent processes attempting to lease the same UTXO. var expiration time.Time err = w.cfg.CoinSelectionLocker.WithCoinSelectLock(func() error { - expiration, err = w.cfg.Wallet.LeaseOutput(lockID, *op) + expiration, err = w.cfg.Wallet.LeaseOutput( + lockID, *op, DefaultLockDuration, + ) return err }) if err != nil { diff --git a/lntest/mock/walletcontroller.go b/lntest/mock/walletcontroller.go index eaebaf50..37842025 100644 --- a/lntest/mock/walletcontroller.go +++ b/lntest/mock/walletcontroller.go @@ -131,8 +131,8 @@ func (w *WalletController) LockOutpoint(o wire.OutPoint) {} 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.Time, - error) { +func (w *WalletController) LeaseOutput(wtxmgr.LockID, wire.OutPoint, + time.Duration) (time.Time, error) { return time.Now(), nil } diff --git a/lnwallet/btcwallet/btcwallet.go b/lnwallet/btcwallet/btcwallet.go index 1ff5a7e7..67729f6b 100644 --- a/lnwallet/btcwallet/btcwallet.go +++ b/lnwallet/btcwallet/btcwallet.go @@ -393,8 +393,8 @@ func (b *BtcWallet) UnlockOutpoint(o wire.OutPoint) { // wtxmgr.ErrOutputAlreadyLocked is returned. // // NOTE: This method requires the global coin selection lock to be held. -func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time, - error) { +func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint, + duration time.Duration) (time.Time, error) { // Make sure we don't attempt to double lock an output that's been // locked by the in-memory implementation. @@ -402,7 +402,7 @@ func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time, return time.Time{}, wtxmgr.ErrOutputAlreadyLocked } - return b.wallet.LeaseOutput(id, op) + return b.wallet.LeaseOutput(id, op, duration) } // ReleaseOutput unlocks an output, allowing it to be available for coin diff --git a/lnwallet/interface.go b/lnwallet/interface.go index c9935ecc..deba2854 100644 --- a/lnwallet/interface.go +++ b/lnwallet/interface.go @@ -250,7 +250,8 @@ type WalletController interface { // wtxmgr.ErrOutputAlreadyLocked is returned. // // NOTE: This method requires the global coin selection lock to be held. - LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time, error) + LeaseOutput(id wtxmgr.LockID, op wire.OutPoint, + duration time.Duration) (time.Time, error) // ReleaseOutput unlocks an output, allowing it to be available for coin // selection if it remains unspent. The ID should match the one used to