diff --git a/.gitignore b/.gitignore index 3b906367f5..72cf1674e2 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ server/cmd/dcrdex/evm-protocol-overrides.json client/bworg/bworg tatanka/cmd/tatanka/tatanka dex/politeia/politeia_test.db +dex/lexi/cmd/lexidbexplorer/lexidbexplorer diff --git a/client/asset/btc/txdb.go b/client/asset/btc/txdb.go index 7125e3169f..3d71e35b84 100644 --- a/client/asset/btc/txdb.go +++ b/client/asset/btc/txdb.go @@ -20,7 +20,8 @@ import ( "decred.org/dcrdex/client/asset" "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + "decred.org/dcrdex/dex/lexi" + "github.com/dgraph-io/badger/v4" ) type ExtendedWalletTx struct { @@ -119,21 +120,26 @@ func (db *BadgerTxDB) Connect(ctx context.Context) (*sync.WaitGroup, error) { // .WithValueLogLoadingMode(options.FileIO) // default options.MemoryMap // .WithMaxTableSize(sz int64); // bytes, default 6MB // .WithValueLogFileSize(sz int64), bytes, default 1 GB, must be 1MB <= sz <= 1GB - opts := badger.DefaultOptions(db.filePath).WithLogger(&badgerLoggerWrapper{db.log}) - var err error - db.DB, err = badger.Open(opts) - if err == badger.ErrTruncateNeeded { - // Probably a Windows thing. - // https://github.com/dgraph-io/badger/issues/744 - db.log.Warnf("newTxHistoryStore badger db: %v", err) - // Try again with value log truncation enabled. - opts.Truncate = true - db.log.Warnf("Attempting to reopen badger DB with the Truncate option set...") - db.DB, err = badger.Open(opts) - } + v4Path, needs, err := lexi.NeedsV1toV4Update(db.filePath) if err != nil { return nil, err } + opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{db.log}) + if needs { + db.DB, err = lexi.BadgerV1Update(db.filePath, v4Path, db.log, opts) + if err != nil { + db.log.Warnf("Unable to update old db, creating new one: %v", err) + db.DB, err = badger.Open(opts) + if err != nil { + return nil, err + } + } + } else { + db.DB, err = badger.Open(opts) + if err != nil { + return nil, err + } + } db.ctx = ctx db.seq, err = db.GetSequence([]byte("seq"), 10) if err != nil { diff --git a/client/asset/eth/txdb.go b/client/asset/eth/txdb.go index df92835c7a..5a4d3a7f63 100644 --- a/client/asset/eth/txdb.go +++ b/client/asset/eth/txdb.go @@ -15,7 +15,7 @@ import ( "decred.org/dcrdex/dex" "decred.org/dcrdex/dex/encode" "decred.org/dcrdex/dex/lexi" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" ) diff --git a/client/asset/eth/txdb_legacy.go b/client/asset/eth/txdb_legacy.go index ff43867dbf..26129f8ab3 100644 --- a/client/asset/eth/txdb_legacy.go +++ b/client/asset/eth/txdb_legacy.go @@ -11,7 +11,7 @@ import ( "time" "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger" // Keep version 1 "github.com/ethereum/go-ethereum/common" ) diff --git a/client/asset/kvdb/kvdb.go b/client/asset/kvdb/kvdb.go index 1b21201314..c9b3b07f0e 100644 --- a/client/asset/kvdb/kvdb.go +++ b/client/asset/kvdb/kvdb.go @@ -10,7 +10,8 @@ import ( "time" "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + "decred.org/dcrdex/dex/lexi" + "github.com/dgraph-io/badger/v4" ) type KeyValueDB interface { @@ -31,20 +32,27 @@ func NewFileDB(filePath string, log dex.Logger) (KeyValueDB, error) { // .WithValueLogLoadingMode(options.FileIO) // default options.MemoryMap // .WithMaxTableSize(sz int64); // bytes, default 6MB // .WithValueLogFileSize(sz int64), bytes, default 1 GB, must be 1MB <= sz <= 1GB - opts := badger.DefaultOptions(filePath).WithLogger(&badgerLoggerWrapper{log}) - db, err := badger.Open(opts) - if err == badger.ErrTruncateNeeded { - // Probably a Windows thing. - // https://github.com/dgraph-io/badger/issues/744 - log.Warnf("NewFileDB badger db: %v", err) - // Try again with value log truncation enabled. - opts.Truncate = true - log.Warnf("Attempting to reopen badger DB with the Truncate option set...") - db, err = badger.Open(opts) - } + v4Path, needs, err := lexi.NeedsV1toV4Update(filePath) if err != nil { return nil, err } + opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{log}) + var db *badger.DB + if needs { + db, err = lexi.BadgerV1Update(filePath, v4Path, log, opts) + if err != nil { + log.Warnf("Unable to update old db, creating new one: %v", err) + db, err = badger.Open(opts) + if err != nil { + return nil, err + } + } + } else { + db, err = badger.Open(opts) + if err != nil { + return nil, err + } + } return &kvDB{db, log}, nil } diff --git a/client/cmd/bisonw-desktop/go.mod b/client/cmd/bisonw-desktop/go.mod index 195f5f55c1..4773e184ef 100644 --- a/client/cmd/bisonw-desktop/go.mod +++ b/client/cmd/bisonw-desktop/go.mod @@ -13,6 +13,7 @@ require ( require ( filippo.io/edwards25519 v1.0.0 // indirect + github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/BurntSushi/toml v1.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect @@ -23,6 +24,7 @@ require ( github.com/bisoncraft/neutrino-bch v1.0.1 // indirect github.com/bisoncraft/op-geth v0.0.0-20250729074358-3cfe4f15e91c // indirect github.com/bits-and-blooms/bitset v1.22.0 // indirect + github.com/cespare/xxhash v1.1.0 // indirect github.com/consensys/gnark-crypto v0.18.0 // indirect github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect @@ -33,14 +35,22 @@ require ( github.com/decred/dcrd/mixing v0.6.1 // indirect github.com/decred/vspd/client/v4 v4.0.2 // indirect github.com/decred/vspd/types/v3 v3.0.0 // indirect + github.com/dgraph-io/badger v1.6.2 // indirect + github.com/dgraph-io/badger/v4 v4.9.0 // indirect + github.com/dgraph-io/ristretto v0.0.2 // indirect + github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ethereum/go-verkle v0.2.2 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db // indirect - github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/ltcsuite/lnd/tlv v0.0.0-20240222214433-454d35886119 // indirect github.com/ltcsuite/ltcd/chaincfg/chainhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.0 // indirect @@ -48,11 +58,16 @@ require ( github.com/naoina/go-stringutil v0.1.0 // indirect github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -63,7 +78,6 @@ replace github.com/btcsuite/btcd/btcec/v2 v2.3.4 => github.com/martonp/btcd/btce require ( decred.org/cspp/v2 v2.4.0 // indirect decred.org/dcrwallet/v5 v5.0.3 // indirect - github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/aead/siphash v1.0.1 // indirect @@ -83,7 +97,6 @@ require ( github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd // indirect github.com/btcsuite/golangcrypto v0.0.0-20150304025918-53f62d9b43e8 // indirect github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/companyzero/sntrup4591761 v0.0.0-20220309191932-9e0f3af2f07a // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -115,8 +128,6 @@ require ( github.com/decred/go-socks v1.1.0 // indirect github.com/decred/slog v1.2.0 // indirect github.com/decred/vspd/types/v2 v2.1.0 // indirect - github.com/dgraph-io/badger v1.6.2 // indirect - github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/ethereum/go-ethereum v1.16.7 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect @@ -128,7 +139,6 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gofrs/flock v0.12.1 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect @@ -158,7 +168,6 @@ require ( github.com/ltcsuite/ltcd/ltcutil/psbt v1.1.1-0.20240131072528-64dfa402637a // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/progrium/darwinkit v0.5.0 github.com/rivo/uniseg v0.4.7 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect diff --git a/client/cmd/bisonw-desktop/go.sum b/client/cmd/bisonw-desktop/go.sum index cba5761161..cc2917e974 100644 --- a/client/cmd/bisonw-desktop/go.sum +++ b/client/cmd/bisonw-desktop/go.sum @@ -339,12 +339,16 @@ github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCF github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= +github.com/dgraph-io/badger/v4 v4.9.0 h1:tpqWb0NewSrCYqTvywbcXOhQdWcqephkVkbBmaaqHzc= +github.com/dgraph-io/badger/v4 v4.9.0/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= +github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de h1:t0UHb5vdojIDUqktM6+xJAfScFBsVpXZmqC9dsgJmeA= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= +github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -429,6 +433,11 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= @@ -531,6 +540,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -714,8 +725,8 @@ github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+ github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -1020,8 +1031,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1179,6 +1190,14 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/dex/lexi/cmd/lexidbexplorer/db.go b/dex/lexi/cmd/lexidbexplorer/db.go index c34d46e877..f4c5fe5f54 100644 --- a/dex/lexi/cmd/lexidbexplorer/db.go +++ b/dex/lexi/cmd/lexidbexplorer/db.go @@ -10,7 +10,7 @@ import ( "strings" "decred.org/dcrdex/dex/lexi" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) // These constants mirror unexported values from the lexi package. diff --git a/dex/lexi/cmd/lexidbexplorer/model.go b/dex/lexi/cmd/lexidbexplorer/model.go index af6663396d..fa1324ea3b 100644 --- a/dex/lexi/cmd/lexidbexplorer/model.go +++ b/dex/lexi/cmd/lexidbexplorer/model.go @@ -8,7 +8,7 @@ import ( "decred.org/dcrdex/dex/lexi" tea "github.com/charmbracelet/bubbletea" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) // viewState represents the current view in the application. diff --git a/dex/lexi/db_test.go b/dex/lexi/db_test.go index 90561b3ed9..4ae51823c0 100644 --- a/dex/lexi/db_test.go +++ b/dex/lexi/db_test.go @@ -3,6 +3,7 @@ package lexi import ( "bytes" "fmt" + "os" "path/filepath" "reflect" "slices" @@ -12,7 +13,8 @@ import ( "decred.org/dcrdex/dex" "decred.org/dcrdex/dex/encode" - "github.com/dgraph-io/badger" + v1badger "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) func newTestDB(t *testing.T) (*DB, func()) { @@ -826,3 +828,295 @@ func TestTransactionOptions(t *testing.T) { t.Fatalf("Expected key not found error, got: %v", err) } } + +func TestNeedsV1toV4Update(t *testing.T) { + tests := []struct { + name, addSuffix string + setupFunc func(t *testing.T, tmpDir string, basePath string) + wantNeedsMigr bool + wantV4Suffix bool + }{ + { + name: "neither directory exists - new db", + setupFunc: func(t *testing.T, tmpDir string, basePath string) {}, + wantNeedsMigr: false, + wantV4Suffix: true, + }, + { + name: "only v1 directory exists - needs migration", + setupFunc: func(t *testing.T, tmpDir string, basePath string) { + if err := os.MkdirAll(basePath, 0755); err != nil { + t.Fatalf("Failed to create v1 directory: %v", err) + } + }, + wantNeedsMigr: true, + wantV4Suffix: true, + }, + { + name: "only v4 directory exists - already migrated", + setupFunc: func(t *testing.T, tmpDir string, basePath string) { + v4Path := basePath + "_v4" + if err := os.MkdirAll(v4Path, 0755); err != nil { + t.Fatalf("Failed to create v4 directory: %v", err) + } + }, + wantNeedsMigr: false, + wantV4Suffix: true, + }, + { + name: "both v1 and v4 directories exist - use v4", + setupFunc: func(t *testing.T, tmpDir string, basePath string) { + if err := os.MkdirAll(basePath, 0755); err != nil { + t.Fatalf("Failed to create v1 directory: %v", err) + } + v4Path := basePath + "_v4" + if err := os.MkdirAll(v4Path, 0755); err != nil { + t.Fatalf("Failed to create v4 directory: %v", err) + } + }, + wantNeedsMigr: false, + wantV4Suffix: true, + }, + { + name: "v4 directory exists - already migrated - base path has version suffix", + setupFunc: func(t *testing.T, tmpDir string, basePath string) { + v4Path := basePath + "_v4" + if err := os.MkdirAll(v4Path, 0755); err != nil { + t.Fatalf("Failed to create v4 directory: %v", err) + } + }, + wantNeedsMigr: false, + wantV4Suffix: true, + addSuffix: "_v4", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tmpDir := t.TempDir() + basePath := filepath.Join(tmpDir, "test.db") + + tt.setupFunc(t, tmpDir, basePath) + + gotPath, gotNeeds, err := NeedsV1toV4Update(basePath + tt.addSuffix) + if err != nil { + t.Fatalf("NeedsV1toV4Update returned error: %v", err) + } + + if gotNeeds != tt.wantNeedsMigr { + t.Errorf("NeedsV1toV4Update() needsMigration = %v, want %v", gotNeeds, tt.wantNeedsMigr) + } + + expectedV4Path := basePath + "_v4" + if tt.wantV4Suffix && gotPath != expectedV4Path { + t.Errorf("NeedsV1toV4Update() path = %v, want %v", gotPath, expectedV4Path) + } + }) + } +} + +func TestBadgerV1Update(t *testing.T) { + tmpDir := t.TempDir() + v1Path := filepath.Join(tmpDir, "v1db") + v4Path := filepath.Join(tmpDir, "v4db") + + logger := dex.StdOutLogger("TEST", dex.LevelWarn) + + // Create a v1 database and populate it with test data. + v1opts := v1badger.DefaultOptions(v1Path).WithLogger(&badgerLoggerWrapper{logger}) + v1db, err := v1badger.Open(v1opts) + if err != nil { + t.Fatalf("Failed to open v1 database: %v", err) + } + + // Insert test data into v1 database. + testData := map[string]string{ + "key1": "value1", + "key2": "value2", + "key3": "value3", + } + + err = v1db.Update(func(txn *v1badger.Txn) error { + for k, v := range testData { + if err := txn.Set([]byte(k), []byte(v)); err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatalf("Failed to insert test data into v1 database: %v", err) + } + + // Close the v1 database before migration. + if err := v1db.Close(); err != nil { + t.Fatalf("Failed to close v1 database: %v", err) + } + + // Perform the migration. + v4opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{logger}) + v4db, err := BadgerV1Update(v1Path, v4Path, logger, v4opts) + if err != nil { + t.Fatalf("BadgerV1Update failed: %v", err) + } + defer v4db.Close() + + // Verify all data was migrated correctly. + err = v4db.View(func(txn *badger.Txn) error { + for k, expectedV := range testData { + item, err := txn.Get([]byte(k)) + if err != nil { + return fmt.Errorf("failed to get key %s: %w", k, err) + } + err = item.Value(func(val []byte) error { + if string(val) != expectedV { + return fmt.Errorf("key %s: expected value %s, got %s", k, expectedV, string(val)) + } + return nil + }) + if err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatalf("Data verification failed: %v", err) + } +} + +func TestBadgerV1UpdateWithLargeData(t *testing.T) { + tmpDir := t.TempDir() + v1Path := filepath.Join(tmpDir, "v1db_large") + v4Path := filepath.Join(tmpDir, "v4db_large") + + logger := dex.StdOutLogger("TEST", dex.LevelWarn) + + // Create a v1 database and populate it with more data. + v1opts := v1badger.DefaultOptions(v1Path).WithLogger(&badgerLoggerWrapper{logger}) + v1db, err := v1badger.Open(v1opts) + if err != nil { + t.Fatalf("Failed to open v1 database: %v", err) + } + + // Insert 100 key-value pairs with varying sizes. + const numEntries = 100 + testData := make(map[string][]byte, numEntries) + + err = v1db.Update(func(txn *v1badger.Txn) error { + for i := 0; i < numEntries; i++ { + key := fmt.Sprintf("key_%04d", i) + value := encode.RandomBytes(100 + i*10) // Varying value sizes + testData[key] = value + if err := txn.Set([]byte(key), value); err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatalf("Failed to insert test data: %v", err) + } + + if err := v1db.Close(); err != nil { + t.Fatalf("Failed to close v1 database: %v", err) + } + + // Perform the migration. + v4opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{logger}) + v4db, err := BadgerV1Update(v1Path, v4Path, logger, v4opts) + if err != nil { + t.Fatalf("BadgerV1Update failed: %v", err) + } + defer v4db.Close() + + // Verify all data was migrated correctly. + var count int + err = v4db.View(func(txn *badger.Txn) error { + for k, expectedV := range testData { + item, err := txn.Get([]byte(k)) + if err != nil { + return fmt.Errorf("failed to get key %s: %w", k, err) + } + err = item.Value(func(val []byte) error { + if !bytes.Equal(val, expectedV) { + return fmt.Errorf("key %s: value mismatch", k) + } + count++ + return nil + }) + if err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatalf("Data verification failed: %v", err) + } + + if count != numEntries { + t.Fatalf("Expected %d entries, but verified %d", numEntries, count) + } +} + +func TestNewWithMigration(t *testing.T) { + tmpDir := t.TempDir() + basePath := filepath.Join(tmpDir, "test.db") + + logger := dex.StdOutLogger("TEST", dex.LevelWarn) + + // Create a v1 database at the base path. + v1opts := v1badger.DefaultOptions(basePath).WithLogger(&badgerLoggerWrapper{logger}) + v1db, err := v1badger.Open(v1opts) + if err != nil { + t.Fatalf("Failed to create v1 database: %v", err) + } + + // Insert some data. + testKey := []byte("migration_test_key") + testValue := []byte("migration_test_value") + err = v1db.Update(func(txn *v1badger.Txn) error { + return txn.Set(testKey, testValue) + }) + if err != nil { + t.Fatalf("Failed to insert data: %v", err) + } + + if err := v1db.Close(); err != nil { + t.Fatalf("Failed to close v1 database: %v", err) + } + + // Open with New() which should trigger migration. + db, err := New(&Config{ + Path: basePath, + Log: logger, + }) + if err != nil { + t.Fatalf("New() failed: %v", err) + } + defer db.Close() + + // Verify the migrated data is accessible. + err = db.View(func(txn *badger.Txn) error { + item, err := txn.Get(testKey) + if err != nil { + return fmt.Errorf("failed to get migrated key: %w", err) + } + return item.Value(func(val []byte) error { + if !bytes.Equal(val, testValue) { + return fmt.Errorf("value mismatch: expected %s, got %s", testValue, val) + } + return nil + }) + }) + if err != nil { + t.Fatalf("Migrated data verification failed: %v", err) + } + + // Verify the v4 directory was created. + v4Path := basePath + "_v4" + if _, err := os.Stat(v4Path); os.IsNotExist(err) { + t.Fatalf("Expected v4 directory to exist at %s", v4Path) + } +} diff --git a/dex/lexi/index.go b/dex/lexi/index.go index 872228c99a..0982fb9d95 100644 --- a/dex/lexi/index.go +++ b/dex/lexi/index.go @@ -9,7 +9,7 @@ import ( "fmt" "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) const ( diff --git a/dex/lexi/keyprefix.go b/dex/lexi/keyprefix.go index 22f9533a37..ba244d7b1f 100644 --- a/dex/lexi/keyprefix.go +++ b/dex/lexi/keyprefix.go @@ -7,7 +7,7 @@ import ( "encoding/binary" "encoding/hex" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) const prefixSize = 2 diff --git a/dex/lexi/lexi.go b/dex/lexi/lexi.go index 068cc454d3..766f8ddcf6 100644 --- a/dex/lexi/lexi.go +++ b/dex/lexi/lexi.go @@ -9,11 +9,14 @@ import ( "encoding/binary" "errors" "fmt" + "os" + "strings" "sync" "time" "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + v1badger "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) // ErrKeyNotFound is an alias for badger.ErrKeyNotFound so that the caller @@ -46,22 +49,109 @@ type Config struct { Log dex.Logger } -// New constructs a new Lexi DB. -func New(cfg *Config) (*DB, error) { - opts := badger.DefaultOptions(cfg.Path).WithLogger(&badgerLoggerWrapper{cfg.Log.SubLogger("BADG")}) - bdb, err := badger.Open(opts) - if err == badger.ErrTruncateNeeded { - // Probably a Windows thing. - // https://github.com/dgraph-io/badger/issues/744 - cfg.Log.Warnf("Error opening badger db: %v", err) - // Try again with value log truncation enabled. - opts.Truncate = true - cfg.Log.Warnf("Attempting to reopen badger DB with the Truncate option set...") - bdb, err = badger.Open(opts) +// BadgerV1Update attempts to update old badger databases from v1 to v4. +func BadgerV1Update(path string, v4Path string, logger dex.Logger, opts badger.Options) (*badger.DB, error) { + // Copy the old db directory as is. + logger.Warnf("Detected incompatible database version at %s. "+ + "Backing up old database and attempting to update.", path) + // Open the old db using v1 badger. + v1opts := v1badger.DefaultOptions(path).WithLogger(&badgerLoggerWrapper{logger}) + oldDB, err := v1badger.Open(v1opts) + if err != nil { + return nil, err + } + defer oldDB.Close() + // Back up values to a temporary file. + tempPath := path + ".temp" + tempF, err := os.OpenFile(tempPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) + if err != nil { + return nil, err } + defer os.Remove(tempPath) + if _, err := oldDB.Backup(tempF, 0); err != nil { + tempF.Close() + return nil, err + } + tempF.Close() + tempF, err = os.OpenFile(tempPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) if err != nil { return nil, err } + defer tempF.Close() + // Open a new database at the v4 path and attempt to load. Delete if that fails. + db, err := badger.Open(opts) + if err != nil { + return nil, err + } + maxPendingWrites := 16 + if err := db.Load(tempF, maxPendingWrites); err != nil { + db.Close() + defer os.Remove(v4Path) + return nil, err + } + return db, nil +} + +const version4Suffix = "_v4" + +// NeedsV1toV4Update returns whether the database needs an upgrade from v1 to +// v4. Works by searching for a directory with the v4 suffix. +func NeedsV1toV4Update(path string) (string, bool, error) { + path = strings.TrimRight(path, "/") + lenDiff := len(path) - len(version4Suffix) + var v4Path string + // May be already pointing to a v4 directory. + if lenDiff >= 0 && path[lenDiff:] == version4Suffix { + v4Path = path + path = path[:len(version4Suffix)] + } else { + v4Path = fmt.Sprintf("%s%s", path, version4Suffix) + } + _, err := os.Stat(v4Path) + if err == nil { + // v4 directory exists where expected + return v4Path, false, nil + } + if !errors.Is(err, os.ErrNotExist) { + return "", false, err + } + _, err = os.Stat(path) + if err == nil { + // v1 directory found, update it + return v4Path, true, nil + } + if !errors.Is(err, os.ErrNotExist) { + return "", false, err + } + // Neither directory exists, new db. + return v4Path, false, nil +} + +// New constructs a new Lexi DB. Starting at badger v4, badger versions are +// appended to the directory path, i.e. "path_v4". +func New(cfg *Config) (*DB, error) { + v4Path, needs, err := NeedsV1toV4Update(cfg.Path) + if err != nil { + return nil, err + } + logger := cfg.Log.SubLogger("BADG") + opts := badger.DefaultOptions(v4Path).WithLogger(&badgerLoggerWrapper{logger}) + var bdb *badger.DB + if needs { + bdb, err = BadgerV1Update(cfg.Path, v4Path, logger, opts) + if err != nil { + logger.Warnf("Unable to update old db, creating new one: %v", err) + bdb, err = badger.Open(opts) + if err != nil { + return nil, err + } + } + } else { + bdb, err = badger.Open(opts) + if err != nil { + return nil, err + } + } idSeq, err := bdb.GetSequence(prefixedKey(primarySequencePrefix, []byte{0x00}), 1000) if err != nil { return nil, fmt.Errorf("error getting constructing primary sequence: %w", err) diff --git a/dex/lexi/log.go b/dex/lexi/log.go index 5184b71993..45bae423c2 100644 --- a/dex/lexi/log.go +++ b/dex/lexi/log.go @@ -2,7 +2,8 @@ package lexi import ( "decred.org/dcrdex/dex" - "github.com/dgraph-io/badger" + v1badger "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) // badgerLoggerWrapper wraps dex.Logger and translates Warnf to Warningf to @@ -13,6 +14,7 @@ type badgerLoggerWrapper struct { } var _ badger.Logger = (*badgerLoggerWrapper)(nil) +var _ v1badger.Logger = (*badgerLoggerWrapper)(nil) // Debugf -> dex.Logger.Tracef func (log *badgerLoggerWrapper) Debugf(s string, a ...any) { diff --git a/dex/lexi/table.go b/dex/lexi/table.go index 41ab04e959..86c2428be9 100644 --- a/dex/lexi/table.go +++ b/dex/lexi/table.go @@ -8,7 +8,7 @@ import ( "errors" "fmt" - "github.com/dgraph-io/badger" + "github.com/dgraph-io/badger/v4" ) // Table is a prefixed section of the k-v DB. A Table can have indexes, such diff --git a/dex/testing/loadbot/go.mod b/dex/testing/loadbot/go.mod index fd47476c13..92a6e1eefc 100644 --- a/dex/testing/loadbot/go.mod +++ b/dex/testing/loadbot/go.mod @@ -91,8 +91,10 @@ require ( github.com/decred/vspd/types/v2 v2.1.0 // indirect github.com/decred/vspd/types/v3 v3.0.0 // indirect github.com/dgraph-io/badger v1.6.2 // indirect + github.com/dgraph-io/badger/v4 v4.9.0 // indirect github.com/dgraph-io/ristretto v0.0.2 // indirect - github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207 // indirect + github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect @@ -104,10 +106,13 @@ require ( github.com/gcash/bchlog v0.0.0-20180913005452-b4f036f92fa6 // indirect github.com/gcash/bchutil v0.0.0-20210113190856-6ea28dff4000 // indirect github.com/go-chi/chi/v5 v5.0.1 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db // indirect @@ -117,7 +122,7 @@ require ( github.com/jrick/logrotate v1.0.0 // indirect github.com/jrick/wsrpc/v2 v2.3.8 // indirect github.com/kkdai/bstream v1.0.0 // indirect - github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/lib/pq v1.10.4 // indirect github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf // indirect @@ -151,6 +156,10 @@ require ( github.com/tklauser/numcpus v0.6.1 // indirect github.com/zquestz/grab v0.0.0-20190224022517-abcee96e61b1 // indirect go.etcd.io/bbolt v1.3.12 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/net v0.48.0 // indirect diff --git a/dex/testing/loadbot/go.sum b/dex/testing/loadbot/go.sum index c932890146..3fbe9c1d44 100644 --- a/dex/testing/loadbot/go.sum +++ b/dex/testing/loadbot/go.sum @@ -337,16 +337,21 @@ github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCF github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= +github.com/dgraph-io/badger/v4 v4.9.0 h1:tpqWb0NewSrCYqTvywbcXOhQdWcqephkVkbBmaaqHzc= +github.com/dgraph-io/badger/v4 v4.9.0/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= +github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207 h1:06VJ6lVl9r9kvzqs3r1gSfUDm6aiMKmyaZyLVc2ShmA= -github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -424,6 +429,11 @@ github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTD github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= @@ -519,6 +529,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -696,8 +708,8 @@ github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+ github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -996,8 +1008,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1149,6 +1161,14 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= diff --git a/go.mod b/go.mod index 46e975a05e..4b16ae2061 100644 --- a/go.mod +++ b/go.mod @@ -53,6 +53,7 @@ require ( github.com/decred/slog v1.2.0 github.com/decred/vspd/types/v2 v2.1.0 github.com/dgraph-io/badger v1.6.2 + github.com/dgraph-io/badger/v4 v4.9.0 github.com/ethereum/go-ethereum v1.16.7 github.com/fatih/color v1.16.0 github.com/gcash/bchd v0.19.0 @@ -86,9 +87,11 @@ require ( require ( decred.org/dcrwallet v1.7.0 // indirect + github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect github.com/asdine/storm/v3 v3.2.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/cespare/xxhash v1.1.0 // indirect github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect github.com/charmbracelet/x/ansi v0.10.1 // indirect github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect @@ -101,9 +104,15 @@ require ( github.com/decred/dcrd/txscript/v3 v3.0.0 // indirect github.com/decred/dcrdata/v7 v7.0.0 // indirect github.com/decred/dcrtime v0.0.0-20191018193024-8d8b4ef0458e // indirect + github.com/dgraph-io/ristretto v0.0.2 // indirect + github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/trillian v1.4.1 // indirect github.com/gorilla/schema v1.1.0 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect @@ -114,13 +123,16 @@ require ( github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.16.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/otel v1.37.0 // indirect + go.opentelemetry.io/otel/metric v1.37.0 // indirect + go.opentelemetry.io/otel/trace v1.37.0 // indirect ) replace github.com/btcsuite/btcd/btcec/v2 v2.3.4 => github.com/martonp/btcd/btcec/v2 v2.0.0-20250528172049-6b252bb1b6a1 require ( decred.org/cspp/v2 v2.4.0 // indirect - github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/BurntSushi/toml v1.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect @@ -132,7 +144,6 @@ require ( github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd // indirect github.com/btcsuite/golangcrypto v0.0.0-20150304025918-53f62d9b43e8 // indirect github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/companyzero/sntrup4591761 v0.0.0-20220309191932-9e0f3af2f07a // indirect github.com/consensys/gnark-crypto v0.18.0 // indirect @@ -149,8 +160,7 @@ require ( github.com/decred/politeia v1.5.0 github.com/decred/vspd/client/v4 v4.0.2 // indirect github.com/decred/vspd/types/v3 v3.0.0 // indirect - github.com/dgraph-io/ristretto v0.0.2 // indirect - github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-verkle v0.2.2 // indirect github.com/ferranbt/fastssz v0.1.4 // indirect @@ -158,7 +168,6 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gofrs/flock v0.12.1 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db // indirect @@ -167,7 +176,7 @@ require ( github.com/jrick/bitset v1.0.0 // indirect github.com/jrick/wsrpc/v2 v2.3.8 // indirect github.com/kkdai/bstream v1.0.0 // indirect - github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf // indirect github.com/lightninglabs/neutrino/cache v1.1.2 // indirect diff --git a/go.sum b/go.sum index b4f2d80b8e..24a3641276 100644 --- a/go.sum +++ b/go.sum @@ -591,17 +591,22 @@ github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFM github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= +github.com/dgraph-io/badger/v4 v4.9.0 h1:tpqWb0NewSrCYqTvywbcXOhQdWcqephkVkbBmaaqHzc= +github.com/dgraph-io/badger/v4 v4.9.0/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= +github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207 h1:06VJ6lVl9r9kvzqs3r1gSfUDm6aiMKmyaZyLVc2ShmA= -github.com/dustin/go-humanize v1.0.1-0.20210705192016-249ff6c91207/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -705,6 +710,11 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= @@ -819,6 +829,8 @@ github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/certificate-transparency-go v1.1.2-0.20210422104406-9f33727a7a18/go.mod h1:6CKh9dscIRoqc2kC6YUFICHZMT9NrClyPrRVFrdw1QQ= github.com/google/certificate-transparency-go v1.1.2-0.20210512142713-bed466244fa6/go.mod h1:aF2dp7Dh81mY8Y/zpzyXps4fQW5zQbDu2CxfpJB6NkI= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1071,8 +1083,8 @@ github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+ github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -1422,8 +1434,8 @@ github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1645,17 +1657,25 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib v1.6.0/go.mod h1:FlyPNX9s4U6MCsWEc5YAK4KzKNHFDsjrDUZijJiXvy8= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=