From 101e49f79f3bf7ca9a5cdfcba2fd64af22a9f43d Mon Sep 17 00:00:00 2001 From: JoeGruff Date: Wed, 29 May 2024 15:47:17 +0900 Subject: [PATCH] sync: Add birth state. --- asset/dcr/config.go | 2 +- asset/dcr/loader.go | 14 +++++- asset/dcr/log.go | 10 ++--- asset/dcr/sync.go | 15 ++++--- asset/dcr/transactions.go | 8 ++-- asset/dcr/utils.go | 4 +- asset/dcr/wallet.go | 4 +- cgo/addresses.go | 8 ++-- cgo/cgo.go | 10 ++--- cgo/sync.go | 44 +++++++++++++------ cgo/transactions.go | 2 +- cgo/types.go | 11 ++++- cgo/walletloader.go | 6 +-- go.mod | 44 ++++++++++--------- go.sum | 90 ++++++++++++++++++++------------------- 15 files changed, 158 insertions(+), 114 deletions(-) diff --git a/asset/dcr/config.go b/asset/dcr/config.go index 9f7c05b..f3a1a35 100644 --- a/asset/dcr/config.go +++ b/asset/dcr/config.go @@ -1,7 +1,7 @@ package dcr import ( - "decred.org/dcrwallet/v3/wallet" + "decred.org/dcrwallet/v4/wallet" "github.com/decred/dcrd/chaincfg/v3" ) diff --git a/asset/dcr/loader.go b/asset/dcr/loader.go index 9687d8e..a99d0d2 100644 --- a/asset/dcr/loader.go +++ b/asset/dcr/loader.go @@ -7,8 +7,9 @@ import ( "path/filepath" "time" - "decred.org/dcrwallet/v3/wallet" - _ "decred.org/dcrwallet/v3/wallet/drivers/bdb" + "decred.org/dcrwallet/v4/wallet" + _ "decred.org/dcrwallet/v4/wallet/drivers/bdb" + "decred.org/dcrwallet/v4/wallet/udb" "github.com/decred/dcrd/hdkeychain/v3" "github.com/decred/libwallet/asset" ) @@ -100,6 +101,15 @@ func CreateWallet(ctx context.Context, params asset.CreateWalletParams, recovery return nil, fmt.Errorf("wallet.Open error: %w", err) } + birthState := &udb.BirthdayState{ + Time: birthday.Add(time.Hour * -24), + SetFromTime: true, + } + + if err := w.SetBirthState(ctx, birthState); err != nil { + return nil, fmt.Errorf("wallet.SetBirthState error: %w", err) + } + // Upgrade the coin type if this is not a wallet recovery. If it's a // recovery, extend the internal and external address indices. if recovery == nil { diff --git a/asset/dcr/log.go b/asset/dcr/log.go index a707218..5665536 100644 --- a/asset/dcr/log.go +++ b/asset/dcr/log.go @@ -4,11 +4,11 @@ import ( "fmt" "sync/atomic" - "decred.org/dcrwallet/v3/chain" - "decred.org/dcrwallet/v3/p2p" - "decred.org/dcrwallet/v3/spv" - "decred.org/dcrwallet/v3/wallet" - "decred.org/dcrwallet/v3/wallet/udb" + "decred.org/dcrwallet/v4/chain" + "decred.org/dcrwallet/v4/p2p" + "decred.org/dcrwallet/v4/spv" + "decred.org/dcrwallet/v4/wallet" + "decred.org/dcrwallet/v4/wallet/udb" "github.com/decred/dcrd/connmgr/v3" "github.com/decred/libwallet/assetlog" "github.com/decred/slog" diff --git a/asset/dcr/sync.go b/asset/dcr/sync.go index 484cb32..f61d361 100644 --- a/asset/dcr/sync.go +++ b/asset/dcr/sync.go @@ -5,9 +5,9 @@ import ( "net" "time" - "decred.org/dcrwallet/v3/p2p" - "decred.org/dcrwallet/v3/spv" - dcrwallet "decred.org/dcrwallet/v3/wallet" + "decred.org/dcrwallet/v4/p2p" + "decred.org/dcrwallet/v4/spv" + dcrwallet "decred.org/dcrwallet/v4/wallet" "github.com/decred/dcrd/addrmgr/v2" ) @@ -66,8 +66,8 @@ func (w *Wallet) StartSync(ctx context.Context, ntfns *spv.Notifications, connec // IsSyncing returns true if the wallet is catching up to the mainchain's best // block. -func (w *Wallet) IsSyncing() bool { - if w.IsSynced() { +func (w *Wallet) IsSyncing(ctx context.Context) bool { + if w.IsSynced(ctx) { return false } return w.IsSyncingOrSynced() @@ -75,9 +75,10 @@ func (w *Wallet) IsSyncing() bool { // IsSynced returns true if the wallet has synced up to the best block on the // mainchain. -func (w *Wallet) IsSynced() bool { +func (w *Wallet) IsSynced(ctx context.Context) bool { if w.syncer != nil { - return w.syncer.Synced() + synced, _ := w.syncer.Synced(ctx) + return synced } return false } diff --git a/asset/dcr/transactions.go b/asset/dcr/transactions.go index 93821e6..c38d14f 100644 --- a/asset/dcr/transactions.go +++ b/asset/dcr/transactions.go @@ -8,10 +8,10 @@ import ( "math" "math/rand" - wallettypes "decred.org/dcrwallet/v3/rpc/jsonrpc/types" - "decred.org/dcrwallet/v3/wallet" - "decred.org/dcrwallet/v3/wallet/txauthor" - "decred.org/dcrwallet/v3/wallet/txsizes" + wallettypes "decred.org/dcrwallet/v4/rpc/jsonrpc/types" + "decred.org/dcrwallet/v4/wallet" + "decred.org/dcrwallet/v4/wallet/txauthor" + "decred.org/dcrwallet/v4/wallet/txsizes" "github.com/decred/dcrd/chaincfg/chainhash" "github.com/decred/dcrd/dcrutil/v4" "github.com/decred/dcrd/txscript/v4" diff --git a/asset/dcr/utils.go b/asset/dcr/utils.go index ce10ecf..e2fe242 100644 --- a/asset/dcr/utils.go +++ b/asset/dcr/utils.go @@ -5,8 +5,8 @@ import ( "fmt" "os" - "decred.org/dcrwallet/v3/wallet" - "decred.org/dcrwallet/v3/wallet/udb" + "decred.org/dcrwallet/v4/wallet" + "decred.org/dcrwallet/v4/wallet/udb" "github.com/decred/dcrd/chaincfg/v3" "github.com/decred/libwallet/asset" ) diff --git a/asset/dcr/wallet.go b/asset/dcr/wallet.go index f4cedfa..f533424 100644 --- a/asset/dcr/wallet.go +++ b/asset/dcr/wallet.go @@ -5,8 +5,8 @@ import ( "fmt" "path/filepath" - "decred.org/dcrwallet/v3/spv" - "decred.org/dcrwallet/v3/wallet" + "decred.org/dcrwallet/v4/spv" + "decred.org/dcrwallet/v4/wallet" "github.com/decred/dcrd/chaincfg/v3" "github.com/decred/libwallet/asset" "github.com/decred/slog" diff --git a/cgo/addresses.go b/cgo/addresses.go index f847667..3a2bc5e 100644 --- a/cgo/addresses.go +++ b/cgo/addresses.go @@ -5,7 +5,7 @@ import ( "encoding/base64" "encoding/json" - "decred.org/dcrwallet/v3/wallet/udb" + "decred.org/dcrwallet/v4/wallet/udb" "github.com/decred/dcrd/txscript/v4/stdaddr" ) @@ -17,7 +17,7 @@ func currentReceiveAddress(cName *C.char) *C.char { } // Don't return an address if not synced! - if !w.IsSynced() { + if !w.IsSynced(w.ctx) { return errCResponseWithCode(ErrCodeNotSynced, "currentReceiveAddress requested on an unsynced wallet") } @@ -37,7 +37,7 @@ func newExternalAddress(cName *C.char) *C.char { } // Don't return an address if not synced! - if !w.IsSynced() { + if !w.IsSynced(w.ctx) { return errCResponseWithCode(ErrCodeNotSynced, "newExternalAddress requested on an unsynced wallet") } @@ -95,7 +95,7 @@ func addresses(cName *C.char) *C.char { } // w.AddressesByAccount does not include the current address. - if w.IsSynced() { + if w.IsSynced(w.ctx) { addr, err := w.CurrentAddress(udb.DefaultAccountNum) if err != nil { return errCResponse("w.CurrentAddress error: %v", err) diff --git a/cgo/cgo.go b/cgo/cgo.go index 9ee2311..2b88dbe 100644 --- a/cgo/cgo.go +++ b/cgo/cgo.go @@ -19,9 +19,9 @@ import ( ) var ( - ctx context.Context - cancelCtx context.CancelFunc - wg sync.WaitGroup + mainCtx context.Context + cancelMainCtx context.CancelFunc + wg sync.WaitGroup logBackend *parentLogger logMtx sync.RWMutex @@ -58,7 +58,7 @@ func initialize(cLogDir *C.char) *C.char { log.SetLevel(slog.LevelTrace) logMtx.Unlock() - ctx, cancelCtx = context.WithCancel(context.Background()) + mainCtx, cancelMainCtx = context.WithCancel(context.Background()) initialized = true return successCResponse("libwallet cgo initialized") @@ -82,7 +82,7 @@ func shutdown() *C.char { wallets = make(map[string]*wallet) // Stop all remaining background processes and wait for them to stop. - cancelCtx() + cancelMainCtx() wg.Wait() // Close the logger backend as the last step. diff --git a/cgo/sync.go b/cgo/sync.go index 94630ce..239fd55 100644 --- a/cgo/sync.go +++ b/cgo/sync.go @@ -6,8 +6,8 @@ import ( "strconv" "strings" - "decred.org/dcrwallet/v3/spv" - dcrwallet "decred.org/dcrwallet/v3/wallet" + "decred.org/dcrwallet/v4/spv" + dcrwallet "decred.org/dcrwallet/v4/wallet" ) //export syncWallet @@ -129,22 +129,14 @@ func syncWalletStatus(cName *C.char) *C.char { var ssc, cfh, hh, rh, np = w.syncStatusCode, w.cfiltersHeight, w.headersHeight, w.rescanHeight, w.numPeers w.syncStatusMtx.RUnlock() - nb, err := w.NetworkBackend() - if err != nil { - return errCResponse("unable to get network backend: %v", err) - } - spvSyncer, is := nb.(*spv.Syncer) - if !is { - return errCResponse("backend is not an spv syncer") - } - targetHeight := spvSyncer.EstimateMainChainTip(w.ctx) + _, targetHeight := w.MainWallet().MainChainTip(w.ctx) // Sometimes it appears we miss a notification during start up. This is // a bandaid to put us as synced in that case. // // TODO: Figure out why we would miss a notification. w.syncStatusMtx.Lock() - if ssc != SSCComplete && w.IsSynced() && !w.rescanning { + if ssc != SSCComplete && w.IsSynced(w.ctx) && !w.rescanning { ssc = SSCComplete w.syncStatusCode = ssc } @@ -182,7 +174,7 @@ func rescanFromHeight(cName, cHeight *C.char) *C.char { if !exists { return errCResponse("wallet with name %q does not exist", name) } - if !w.IsSynced() { + if !w.IsSynced(w.ctx) { return errCResponseWithCode(ErrCodeNotSynced, "rescanFromHeight requested on an unsynced wallet") } w.syncStatusMtx.Lock() @@ -227,3 +219,29 @@ func rescanFromHeight(cName, cHeight *C.char) *C.char { }() return successCResponse("rescan from height %d for wallet %q started", height, name) } + +//export birthState +func birthState(cName *C.char) *C.char { + w, ok := loadedWallet(cName) + if !ok { + return errCResponse("wallet with name %q is not loaded", goString(cName)) + } + + bs, err := w.MainWallet().BirthState(w.ctx) + if err != nil { + return errCResponse("wallet.BirthState error: %v", err) + } + + bsRes := &BirthdayState{ + Hash: bs.Hash.String(), + Height: bs.Height, + Time: bs.Time, + SetFromHeight: bs.SetFromHeight, + SetFromTime: bs.SetFromTime, + } + b, err := json.Marshal(bsRes) + if err != nil { + return errCResponse("unable to marshal birth state result: %v", err) + } + return successCResponse(string(b)) +} diff --git a/cgo/transactions.go b/cgo/transactions.go index c29f9df..1dc3a2a 100644 --- a/cgo/transactions.go +++ b/cgo/transactions.go @@ -8,7 +8,7 @@ import ( "math" "strconv" - dcrwallet "decred.org/dcrwallet/v3/wallet" + dcrwallet "decred.org/dcrwallet/v4/wallet" "github.com/decred/dcrd/txscript/v4/stdaddr" "github.com/decred/libwallet/asset/dcr" ) diff --git a/cgo/types.go b/cgo/types.go index 5b4769e..a9de37c 100644 --- a/cgo/types.go +++ b/cgo/types.go @@ -4,8 +4,9 @@ import "C" import ( "encoding/json" "fmt" + "time" - wallettypes "decred.org/dcrwallet/v3/rpc/jsonrpc/types" + wallettypes "decred.org/dcrwallet/v4/rpc/jsonrpc/types" ) const ( @@ -137,3 +138,11 @@ type ListTransactionRes struct { Time int64 `json:"time"` TxID string `json:"txid"` } + +type BirthdayState struct { + Hash string `json:"hash"` + Height uint32 `json:"height"` + Time time.Time `json:"time"` + SetFromHeight bool `json:"setfromheight"` + SetFromTime bool `json:"setfromtime"` +} diff --git a/cgo/walletloader.go b/cgo/walletloader.go index 7837568..cf449a0 100644 --- a/cgo/walletloader.go +++ b/cgo/walletloader.go @@ -71,7 +71,7 @@ func createWallet(cName, cDataDir, cNet, cPass, cMnemonic *C.char) *C.char { Birthday: birthday, } } - walletCtx, cancel := context.WithCancel(ctx) + walletCtx, cancel := context.WithCancel(mainCtx) w, err := dcr.CreateWallet(walletCtx, params, recoveryConfig) if err != nil { @@ -117,7 +117,7 @@ func createWatchOnlyWallet(cName, cDataDir, cNet, cPub *C.char) *C.char { }, } - walletCtx, cancel := context.WithCancel(ctx) + walletCtx, cancel := context.WithCancel(mainCtx) w, err := dcr.CreateWatchOnlyWallet(walletCtx, goString(cPub), params) if err != nil { @@ -161,7 +161,7 @@ func loadWallet(cName, cDataDir, cNet *C.char) *C.char { Logger: logger, } - walletCtx, cancel := context.WithCancel(ctx) + walletCtx, cancel := context.WithCancel(mainCtx) w, err := dcr.LoadWallet(walletCtx, params) if err != nil { diff --git a/go.mod b/go.mod index 6d6abed..6c3699d 100644 --- a/go.mod +++ b/go.mod @@ -2,49 +2,51 @@ module github.com/decred/libwallet require ( decred.org/dcrdex v0.0.0-20240415203145-79c4689fd164 - decred.org/dcrwallet/v3 v3.1.0 + decred.org/dcrwallet/v4 v4.1.1 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f - github.com/decred/dcrd/addrmgr/v2 v2.0.2 + github.com/decred/dcrd/addrmgr/v2 v2.0.4 github.com/decred/dcrd/chaincfg/chainhash v1.0.4 - github.com/decred/dcrd/chaincfg/v3 v3.2.0 - github.com/decred/dcrd/connmgr/v3 v3.1.1 - github.com/decred/dcrd/dcrutil/v4 v4.0.1 - github.com/decred/dcrd/hdkeychain/v3 v3.1.1 - github.com/decred/dcrd/txscript/v4 v4.1.0 - github.com/decred/dcrd/wire v1.6.0 + github.com/decred/dcrd/chaincfg/v3 v3.2.1 + github.com/decred/dcrd/connmgr/v3 v3.1.2 + github.com/decred/dcrd/dcrutil/v4 v4.0.2 + github.com/decred/dcrd/hdkeychain/v3 v3.1.2 + github.com/decred/dcrd/txscript/v4 v4.1.1 + github.com/decred/dcrd/wire v1.7.0 github.com/decred/slog v1.2.0 github.com/jrick/logrotate v1.0.0 github.com/kevinburke/nacl v0.0.0-20210405173606-cd9060f5f776 - golang.org/x/crypto v0.7.0 + golang.org/x/crypto v0.23.0 ) require ( - decred.org/cspp/v2 v2.1.0 // indirect + decred.org/cspp/v2 v2.2.0 // indirect github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect github.com/companyzero/sntrup4591761 v0.0.0-20220309191932-9e0f3af2f07a // indirect github.com/dchest/siphash v1.2.3 // indirect github.com/decred/base58 v1.0.5 // indirect - github.com/decred/dcrd/blockchain/stake/v5 v5.0.0 // indirect - github.com/decred/dcrd/blockchain/standalone/v2 v2.2.0 // indirect + github.com/decred/dcrd/blockchain/stake/v5 v5.0.1 // indirect + github.com/decred/dcrd/blockchain/standalone/v2 v2.2.1 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/decred/dcrd/crypto/ripemd160 v1.0.2 // indirect - github.com/decred/dcrd/database/v3 v3.0.1 // indirect + github.com/decred/dcrd/database/v3 v3.0.2 // indirect github.com/decred/dcrd/dcrec v1.0.1 // indirect github.com/decred/dcrd/dcrec/edwards/v2 v2.0.3 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/decred/dcrd/dcrjson/v4 v4.0.1 // indirect - github.com/decred/dcrd/gcs/v4 v4.0.0 // indirect - github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/decred/dcrd/dcrjson/v4 v4.1.0 // indirect + github.com/decred/dcrd/gcs/v4 v4.1.0 // indirect + github.com/decred/dcrd/mixing v0.3.0 // indirect + github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.3.0 // indirect github.com/decred/go-socks v1.1.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/jrick/bitset v1.0.0 // indirect github.com/jrick/wsrpc/v2 v2.3.5 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/stretchr/testify v1.8.2 // indirect go.etcd.io/bbolt v1.3.8 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.12.0 // indirect - lukechampine.com/blake3 v1.2.1 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + lukechampine.com/blake3 v1.3.0 // indirect ) go 1.19 diff --git a/go.sum b/go.sum index 44fa790..f395333 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,9 @@ -decred.org/cspp/v2 v2.1.0 h1:HeHb9+BFqrBaAPc6CsPiUpPFmC1uyBM2mJZUAbUXkRw= -decred.org/cspp/v2 v2.1.0/go.mod h1:9nO3bfvCheOPIFZw5f6sRQ42CjBFB5RKSaJ9Iq6G4MA= +decred.org/cspp/v2 v2.2.0 h1:VSOUC1w0Wo+QOGS0r1XO6TLnO16X67KuvpDmRRYyr08= +decred.org/cspp/v2 v2.2.0/go.mod h1:9nO3bfvCheOPIFZw5f6sRQ42CjBFB5RKSaJ9Iq6G4MA= decred.org/dcrdex v0.0.0-20240415203145-79c4689fd164 h1:ImD+Zui9lnZhVYacX0x9ki1M95hTYxwASl2PvVoAc2M= decred.org/dcrdex v0.0.0-20240415203145-79c4689fd164/go.mod h1:rvIXDCS3B3gbu8b0tKDvNU664nC+/zVl3ivs6AeA2V8= -decred.org/dcrwallet/v3 v3.1.0 h1:JCPnF6ENtkeyWLLhyR6d6hzPAFccbbD0u2Fv2E2mA00= -decred.org/dcrwallet/v3 v3.1.0/go.mod h1:KYWzL2R6ghBLSvB7XXU9S29QwgcqnApCvONMDJ6KCR0= +decred.org/dcrwallet/v4 v4.1.1 h1:imwPBboytp1PH6V8q7/JLTHiKgj/Scq9a3I1WmnJv0Y= +decred.org/dcrwallet/v4 v4.1.1/go.mod h1:WxerkRcUGVreJsAI0ptCBPUujPUmWncbdYbme8Kl5r0= github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI= github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= @@ -17,52 +17,54 @@ github.com/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA= github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc= github.com/decred/base58 v1.0.5 h1:hwcieUM3pfPnE/6p3J100zoRfGkQxBulZHo7GZfOqic= github.com/decred/base58 v1.0.5/go.mod h1:s/8lukEHFA6bUQQb/v3rjUySJ2hu+RioCzLukAVkrfw= -github.com/decred/dcrd/addrmgr/v2 v2.0.2 h1:h7PF1FoWcGUBcOhon7hK4Du7gT4KJb2/dCC4SVVnvgI= -github.com/decred/dcrd/addrmgr/v2 v2.0.2/go.mod h1:lMupOhByAzVJN7EFWSGLeGTrlvvx38uCY4D+bPf2AT4= -github.com/decred/dcrd/blockchain/stake/v5 v5.0.0 h1:WyxS8zMvTMpC5qYC9uJY+UzuV/x9ko4z20qBtH5Hzzs= -github.com/decred/dcrd/blockchain/stake/v5 v5.0.0/go.mod h1:5sSjMq9THpnrLkW0SjEqIBIo8qq2nXzc+m7k9oFVVmY= -github.com/decred/dcrd/blockchain/standalone/v2 v2.2.0 h1:v3yfo66axjr3oLihct+5tLEeM9YUzvK3i/6e2Im6RO0= -github.com/decred/dcrd/blockchain/standalone/v2 v2.2.0/go.mod h1:JsOpl2nHhW2D2bWMEtbMuAE+mIU/Pdd1i1pmYR+2RYI= -github.com/decred/dcrd/blockchain/v5 v5.0.0 h1:eAI9zbNpCFR6Xik6RLUEijAL3BO4QVJQ0Az3sz7ZGqk= +github.com/decred/dcrd/addrmgr/v2 v2.0.4 h1:3MWJiO2STogQwNRF3W4yjCzSJtaxqtw+UI3x2+bYeOg= +github.com/decred/dcrd/addrmgr/v2 v2.0.4/go.mod h1:661DIS/De2iLNLMwIKazUQfQypUqJ5om7PXNX0fEMms= +github.com/decred/dcrd/blockchain/stake/v5 v5.0.1 h1:KDm6myUPi8j2TTL7LZ+iT+R/pIbxd8qG89fjJNitzx0= +github.com/decred/dcrd/blockchain/stake/v5 v5.0.1/go.mod h1:y1tMD1TssTlPmKDYbSrF3Ujznj+STkXFfYPwoVfe+xA= +github.com/decred/dcrd/blockchain/standalone/v2 v2.2.1 h1:zeI9CHkLM9be4QOBmIAtoPfs6NCgJM1lpmRUYE61I8o= +github.com/decred/dcrd/blockchain/standalone/v2 v2.2.1/go.mod h1:yXZz/EgWdGw5nqMEvyKj/iXZ9I2VSyO95xKj6mRUMIM= +github.com/decred/dcrd/blockchain/v5 v5.0.1 h1:IGr8rJsgBVKDBI8STzeuGF6Mej0xbIX4gVVBA9yEMRU= github.com/decred/dcrd/chaincfg/chainhash v1.0.4 h1:zRCv6tdncLfLTKYqu7hrXvs7hW+8FO/NvwoFvGsrluU= github.com/decred/dcrd/chaincfg/chainhash v1.0.4/go.mod h1:hA86XxlBWwHivMvxzXTSD0ZCG/LoYsFdWnCekkTMCqY= -github.com/decred/dcrd/chaincfg/v3 v3.2.0 h1:6WxA92AGBkycEuWvxtZMvA76FbzbkDRoK8OGbsR2muk= -github.com/decred/dcrd/chaincfg/v3 v3.2.0/go.mod h1:2rHW1TKyFmwZTVBLoU/Cmf0oxcpBjUEegbSlBfrsriI= -github.com/decred/dcrd/connmgr/v3 v3.1.1 h1:si7bgYlyeSbB0Ewe+bfoO/RAzxuPwPkL40DDZhyITmo= -github.com/decred/dcrd/connmgr/v3 v3.1.1/go.mod h1:YlRGPagi/6SJbG9CFq2ZnorX9+deRNb6+m0ovkNDcKY= +github.com/decred/dcrd/chaincfg/v3 v3.2.1 h1:x9zKJaU24WAKbxAR1UyFKHlM3oJgP0H9LodokM4X5lM= +github.com/decred/dcrd/chaincfg/v3 v3.2.1/go.mod h1:SDCWDtY7BLj0leXc9FuoA1YjSVKyCIBVAyxwZn6+sXc= +github.com/decred/dcrd/connmgr/v3 v3.1.2 h1:+xNopie2L3YYwwkz51k0h/pASATOBzHtl2O8eodGg04= +github.com/decred/dcrd/connmgr/v3 v3.1.2/go.mod h1:tdbErFiNOuy/sHrX2mwaOk+r1HLs3EBz2EGxsocMPe4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/crypto/ripemd160 v1.0.2 h1:TvGTmUBHDU75OHro9ojPLK+Yv7gDl2hnUvRocRCjsys= github.com/decred/dcrd/crypto/ripemd160 v1.0.2/go.mod h1:uGfjDyePSpa75cSQLzNdVmWlbQMBuiJkvXw/MNKRY4M= -github.com/decred/dcrd/database/v3 v3.0.1 h1:oaklASAsUBwDoRgaS961WYqecFMZNhI1k+BmGgeW7/U= -github.com/decred/dcrd/database/v3 v3.0.1/go.mod h1:IErr/Z62pFLoPZTMPGxedbcIuseGk0w3dszP3AFbXyw= +github.com/decred/dcrd/database/v3 v3.0.2 h1:rgP7XNZemTs8ZC7bnTKO8JO79Woj5nq+yQYmB9ry7yM= +github.com/decred/dcrd/database/v3 v3.0.2/go.mod h1:3Ge1yoxEOsqd72V5LTA9g0B7mlY0MGbpxeE1fniIXsQ= github.com/decred/dcrd/dcrec v1.0.1 h1:gDzlndw0zYxM5BlaV17d7ZJV6vhRe9njPBFeg4Db2UY= github.com/decred/dcrd/dcrec v1.0.1/go.mod h1:CO+EJd8eHFb8WHa84C7ZBkXsNUIywaTHb+UAuI5uo6o= github.com/decred/dcrd/dcrec/edwards/v2 v2.0.3 h1:l/lhv2aJCUignzls81+wvga0TFlyoZx8QxRMQgXpZik= github.com/decred/dcrd/dcrec/edwards/v2 v2.0.3/go.mod h1:AKpV6+wZ2MfPRJnTbQ6NPgWrKzbe9RCIlCF/FKzMtM8= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/decred/dcrd/dcrjson/v4 v4.0.1 h1:vyQuB1miwGqbCVNm8P6br3V65WQ6wyrh0LycMkvaBBg= -github.com/decred/dcrd/dcrjson/v4 v4.0.1/go.mod h1:2qVikafVF9/X3PngQVmqkbUbyAl32uik0k/kydgtqMc= -github.com/decred/dcrd/dcrutil/v4 v4.0.1 h1:E+d2TNbpOj0f1L9RqkZkEm1QolFjajvkzxWC5WOPf1s= -github.com/decred/dcrd/dcrutil/v4 v4.0.1/go.mod h1:7EXyHYj8FEqY+WzMuRkF0nh32ueLqhutZDoW4eQ+KRc= -github.com/decred/dcrd/gcs/v4 v4.0.0 h1:bet+Ax1ZFUqn2M0g1uotm0b8F6BZ9MmblViyJ088E8k= -github.com/decred/dcrd/gcs/v4 v4.0.0/go.mod h1:9z+EBagzpEdAumwS09vf/hiGaR8XhNmsBgaVq6u7/NI= -github.com/decred/dcrd/hdkeychain/v3 v3.1.1 h1:4WhyHNBy7ec6qBUC7Fq7JFVGSd7bpuR5H+AJRID8Lyk= -github.com/decred/dcrd/hdkeychain/v3 v3.1.1/go.mod h1:HaabrLc27lnny5/Ph9+6I3szp0op5MCb7smEwlzfD60= -github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.1.0 h1:kQFK7FMTmMDX9amyhh8IR0vwwI8dH0KCBm42C64bWVs= -github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.1.0/go.mod h1:dDHO7ivrPAhZjFD3LoOJN/kdq5gi0sxie6zCsWHAiUo= -github.com/decred/dcrd/txscript/v4 v4.1.0 h1:uEdcibIOl6BuWj3AqmXZ9xIK/qbo6lHY9aNk29FtkrU= -github.com/decred/dcrd/txscript/v4 v4.1.0/go.mod h1:OVguPtPc4YMkgssxzP8B6XEMf/J3MB6S1JKpxgGQqi0= -github.com/decred/dcrd/wire v1.6.0 h1:YOGwPHk4nzGr6OIwUGb8crJYWDiVLpuMxfDBCCF7s/o= -github.com/decred/dcrd/wire v1.6.0/go.mod h1:XQ8Xv/pN/3xaDcb7sH8FBLS9cdgVctT7HpBKKGsIACk= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/dcrjson/v4 v4.1.0 h1:WJVogRnYnNxB5hWoGHODvP4fNTG1JycTuHHKt/XucHk= +github.com/decred/dcrd/dcrjson/v4 v4.1.0/go.mod h1:2qVikafVF9/X3PngQVmqkbUbyAl32uik0k/kydgtqMc= +github.com/decred/dcrd/dcrutil/v4 v4.0.2 h1:eIl3E6gGln54qE8nk5o5lLtjh2/9C2Rz63OpD662h+8= +github.com/decred/dcrd/dcrutil/v4 v4.0.2/go.mod h1:iS3JB1ac3R3FgfpTF1kBD+SPNet8TmiW3Br+/Jc5MC8= +github.com/decred/dcrd/gcs/v4 v4.1.0 h1:tpW7JW53yJZlgNwl/n2NL1b8NxHaIPRUyNuLMkB/Hks= +github.com/decred/dcrd/gcs/v4 v4.1.0/go.mod h1:nPTbGM/I3Ihe5KFvUmxZEqQP/jDZQjQ63+WEi/f4lqU= +github.com/decred/dcrd/hdkeychain/v3 v3.1.2 h1:x25WuuE7zM/20EynuVMyOhL0K8BwGBBsexGq8xTiHFA= +github.com/decred/dcrd/hdkeychain/v3 v3.1.2/go.mod h1:FnNJmZ7jqUDeAo6/c/xkQi5cuxh3EWtJeMmW6/Z8lcc= +github.com/decred/dcrd/mixing v0.3.0 h1:eUHpTdwTqXUllnn1ZYLfxucW/2UOkMmx4CyztipTJ9g= +github.com/decred/dcrd/mixing v0.3.0/go.mod h1:W3K7yJKmoI03G2U5Yw+HSRNe6lLBegi63ZR6fFLnM9c= +github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.3.0 h1:l0DnCcILTNrpy8APF3FLN312ChpkQaAuW30aC/RgBaw= +github.com/decred/dcrd/rpc/jsonrpc/types/v4 v4.3.0/go.mod h1:j+kkRPXPJB5S9VFOsx8SQLcU7PTFkPKRc1aCHN4ENzA= +github.com/decred/dcrd/txscript/v4 v4.1.1 h1:R4M2+jMujgQA91899SkL0cW66d6DC76Gx+1W1oEHjc0= +github.com/decred/dcrd/txscript/v4 v4.1.1/go.mod h1:7ybmJoI+b6dxvQ+0aXdZpkyrj0PbnylJCzFxD1g8+/A= +github.com/decred/dcrd/wire v1.7.0 h1:5JHiDjEQeS4XUl4PfnTZYLwAD/E/+LwBmPRec/fP76o= +github.com/decred/dcrd/wire v1.7.0/go.mod h1:lAqrzV0SU4kyV6INLEJgDtUjJaTaVKrbF4LHtaYl+zU= github.com/decred/go-socks v1.1.0 h1:dnENcc0KIqQo3HSXdgboXAHgqsCIutkqq6ntQjYtm2U= github.com/decred/go-socks v1.1.0/go.mod h1:sDhHqkZH0X4JjSa02oYOGhcGHYp12FsY1jQ/meV8md0= github.com/decred/slog v1.2.0 h1:soHAxV52B54Di3WtKLfPum9OFfWqwtf/ygf9njdfnPM= github.com/decred/slog v1.2.0/go.mod h1:kVXlGnt6DHy2fV5OjSeuvCJ0OmlmTF6LFpEPMu/fOY0= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/jrick/bitset v1.0.0 h1:Ws0PXV3PwXqWK2n7Vz6idCdrV/9OrBXgHEJi27ZB9Dw= github.com/jrick/bitset v1.0.0/go.mod h1:ZOYB5Uvkla7wIEY4FEssPVi3IQXa02arznRaYaAEPe4= github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= @@ -85,16 +87,18 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= -lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= +lukechampine.com/blake3 v1.3.0 h1:sJ3XhFINmHSrYCgl958hscfIa3bw8x4DqMP3u1YvoYE= +lukechampine.com/blake3 v1.3.0/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=