Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -236,3 +236,6 @@ replace google.golang.org/protobuf => github.com/lightninglabs/protobuf-go-hex-d

// Use local baselib for development and CI.
replace github.com/lightninglabs/wavelength/baselib => ./baselib

// Use the independent creation KDF API until btcwallet PR #1298 merges.
replace github.com/btcsuite/btcwallet => github.com/Roasbeef/btcwallet v0.0.0-20260724000651-fa5ec465bbf7
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,8 @@ github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Roasbeef/btcwallet v0.0.0-20260724000651-fa5ec465bbf7 h1:YU1tt+gw8Fl1O9UHi9MP7OkhZGtnbmvYYEjBp+UQHE4=
github.com/Roasbeef/btcwallet v0.0.0-20260724000651-fa5ec465bbf7/go.mod h1:1ZMc1EEskov+AKKv4kCMZqN8BwVh9rpXwEyxbeWy2A4=
github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344 h1:cDVUiFo+npB0ZASqnw4q90ylaVAbnYyx0JYqK4YcGok=
github.com/Yawning/aez v0.0.0-20211027044916-e49e68abd344/go.mod h1:9pIqrY6SXNL8vjRQE5Hd/OL5GyK/9MrGUWs87z/eFfk=
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY=
Expand Down Expand Up @@ -658,8 +660,6 @@ github.com/btcsuite/btclog v1.0.0 h1:sEkpKJMmfGiyZjADwEIgB1NSwMyfdD1FB8v6+w1T0Ns
github.com/btcsuite/btclog v1.0.0/go.mod h1:w7xnGOhwT3lmrS4H3b/D1XAXxvh+tbhUm8xeHN2y3TQ=
github.com/btcsuite/btclog/v2 v2.0.1-0.20250728225537-6090e87c6c5b h1:MQ+Q6sDy37V1wP1Yu79A5KqJutolqUGwA99UZWQDWZM=
github.com/btcsuite/btclog/v2 v2.0.1-0.20250728225537-6090e87c6c5b/go.mod h1:XItGUfVOxotJL8kkuk2Hj3EVow5KCugXl3wWfQ6K0AE=
github.com/btcsuite/btcwallet v0.18.0 h1:VSRClNLT7NX0wmJEGALz3jOZRRjWPpUdp7VI1Akie1o=
github.com/btcsuite/btcwallet v0.18.0/go.mod h1:1ZMc1EEskov+AKKv4kCMZqN8BwVh9rpXwEyxbeWy2A4=
github.com/btcsuite/btcwallet/wallet/txauthor v1.4.0 h1:oIkGj32YK1CvWaJGlVwZA1f+y/KVHkfrd2PoST0ZpQs=
github.com/btcsuite/btcwallet/wallet/txauthor v1.4.0/go.mod h1:sGrBjcqQ8UPexuRajFs72+o544CJn3Pavv/5H0VAWVk=
github.com/btcsuite/btcwallet/wallet/txrules v1.3.0 h1:D5aGMwWIxdqek3xEJs4eOdMoh6iga2EI2xSlaXCdnNo=
Expand Down
4 changes: 2 additions & 2 deletions lwwallet/wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ func New(cfg Config) (*Wallet, error) {
walletcore.DefaultBlockCacheSize,
)

loaderOptions, loaderCleanup, err := newWalletLoaderOptions(cfg)
baseWallet, loaderOptions, loaderCleanup, err := newWalletBootstrap(cfg)
if err != nil {
return nil, fmt.Errorf("create wallet loader options: %w", err)
}
Expand All @@ -170,6 +170,7 @@ func New(cfg Config) (*Wallet, error) {
CoinType: coinType,
RecoveryWindow: cfg.RecoveryWindow,
LoaderOptions: loaderOptions,
Wallet: baseWallet,
}, blockCache)
if err != nil {
// On failure the wallet never adopted the loader's
Expand All @@ -179,7 +180,6 @@ func New(cfg Config) (*Wallet, error) {

return nil, fmt.Errorf("create btcwallet: %w", err)
}

// Create the keyring from btcwallet's internal wallet. This
// provides HD key derivation using the same m/1017'/coinType'
// scope as LND.
Expand Down
14 changes: 14 additions & 0 deletions lwwallet/walletdb_native.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,23 @@ package lwwallet
import (
"time"

base "github.com/btcsuite/btcwallet/wallet"
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
)

// newWalletBootstrap leaves wallet creation and opening to lnd's native
// btcwallet loader.
func newWalletBootstrap(cfg Config) (*base.Wallet, []btcwallet.LoaderOption,
func(), error) {

opts, cleanup, err := newWalletLoaderOptions(cfg)
if err != nil {
return nil, nil, nil, err
}

return nil, opts, cleanup, nil
}

// newWalletLoaderOptions returns the native btcwallet bbolt loader
// options. The cleanup func is a no-op: the local database is opened
// (and closed on failure) by btcwallet's own loader.
Expand Down
58 changes: 58 additions & 0 deletions lwwallet/walletdb_wasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ import (
"strings"
"time"

"github.com/btcsuite/btcwallet/waddrmgr"
base "github.com/btcsuite/btcwallet/wallet"
"github.com/btcsuite/btcwallet/walletdb"
_ "github.com/lightninglabs/go-wasmsqlite"
"github.com/lightninglabs/wavelength/internal/sqlbase"
"github.com/lightninglabs/wavelength/walletcore"
"github.com/lightningnetwork/lnd/lnwallet/btcwallet"
)

Expand All @@ -26,6 +29,61 @@ const (
wasmWalletDBFileNamePattern = "/wallet-%016x.db"
)

var browserPublicScrypt = waddrmgr.ScryptOptions{
N: 16,
R: 8,
P: 1,
}

// newWalletBootstrap opens the browser wallet directly so Wavelength can
// select independent public and private KDF profiles. The public passphrase is
// fixed and protects non-secret metadata, so it uses the fast profile. The
// private passphrase keeps btcwallet's default profile.
func newWalletBootstrap(cfg Config) (*base.Wallet,
[]btcwallet.LoaderOption, func(), error) {

opts, cleanup, err := newWalletLoaderOptions(cfg)
if err != nil {
return nil, nil, nil, err
}
loader, err := btcwallet.NewWalletLoader(
cfg.ChainParams, cfg.RecoveryWindow, opts...,
)
if err != nil {
cleanup()

return nil, nil, nil, err
}
err = loader.SetCreateScryptOptions(
&browserPublicScrypt,
&waddrmgr.DefaultScryptOptions,
)
if err != nil {
cleanup()

return nil, nil, nil, err
}

var wallet *base.Wallet
if cfg.Seed != nil {
wallet, err = loader.CreateNewWallet(
walletcore.PublicWalletPassphrase, cfg.WalletPassword,
cfg.Seed, cfg.Birthday,
)
} else {
wallet, err = loader.OpenExistingWallet(
walletcore.PublicWalletPassphrase, false,
)
}
if err != nil {
cleanup()

return nil, nil, nil, err
}

return wallet, nil, cleanup, nil
}

// newWalletLoaderOptions opens btcwallet through an OPFS-backed SQLite
// walletdb implementation for browser builds. The cleanup func closes
// the just-opened database handle: btcwallet's loader only closes
Expand Down
Loading