diff --git a/chainstate/interface.go b/chainstate/interface.go index d64787d4..473b4c1c 100644 --- a/chainstate/interface.go +++ b/chainstate/interface.go @@ -7,7 +7,6 @@ import ( "github.com/BuxOrg/bux/utils" "github.com/bitcoin-sv/go-broadcast-client/broadcast" - "github.com/centrifugal/centrifuge-go" "github.com/tonicpow/go-minercraft/v2" ) @@ -53,22 +52,3 @@ type ClientInterface interface { QueryTimeout() time.Duration FeeUnit() *utils.FeeUnit } - -// SocketHandler is composite interface of centrifuge handlers interfaces -type SocketHandler interface { - OnConnect(*centrifuge.Client, centrifuge.ConnectEvent) - OnDisconnect(*centrifuge.Client, centrifuge.DisconnectEvent) - OnError(*centrifuge.Client, centrifuge.ErrorEvent) - OnJoin(*centrifuge.Subscription, centrifuge.JoinEvent) - OnLeave(*centrifuge.Subscription, centrifuge.LeaveEvent) - OnMessage(*centrifuge.Client, centrifuge.MessageEvent) - OnPublish(*centrifuge.Subscription, centrifuge.PublishEvent) - OnServerJoin(*centrifuge.Client, centrifuge.ServerJoinEvent) - OnServerLeave(*centrifuge.Client, centrifuge.ServerLeaveEvent) - OnServerPublish(*centrifuge.Client, centrifuge.ServerPublishEvent) - OnServerSubscribe(*centrifuge.Client, centrifuge.ServerSubscribeEvent) - OnServerUnsubscribe(*centrifuge.Client, centrifuge.ServerUnsubscribeEvent) - OnSubscribeError(*centrifuge.Subscription, centrifuge.SubscribeErrorEvent) - OnSubscribeSuccess(*centrifuge.Subscription, centrifuge.SubscribeSuccessEvent) - OnUnsubscribe(*centrifuge.Subscription, centrifuge.UnsubscribeEvent) -} diff --git a/chainstate/processor.go b/chainstate/processor.go deleted file mode 100644 index 618bf86f..00000000 --- a/chainstate/processor.go +++ /dev/null @@ -1,269 +0,0 @@ -package chainstate - -import ( - "bytes" - "crypto/sha256" - "encoding/hex" - "encoding/json" - "errors" - "regexp" - "strings" - - "github.com/rs/zerolog" - boom "github.com/tylertreat/BoomFilters" -) - -// BloomProcessor bloom filter processor -type BloomProcessor struct { - debug bool - falsePositiveRate float64 - filters map[string]*BloomProcessorFilter - logger *zerolog.Logger - maxCells uint -} - -// BloomProcessorFilter struct -type BloomProcessorFilter struct { - Filter *boom.StableBloomFilter - regex *regexp.Regexp -} - -// NewBloomProcessor initialize a new bloom processor -func NewBloomProcessor(maxCells uint, falsePositiveRate float64) *BloomProcessor { - return &BloomProcessor{ - filters: make(map[string]*BloomProcessorFilter), - maxCells: maxCells, - falsePositiveRate: falsePositiveRate, - } -} - -// Debug set debugging -func (p *BloomProcessor) Debug(debug bool) { - p.debug = debug -} - -// IsDebug return whether debugging is on/off -func (p *BloomProcessor) IsDebug() bool { - return p.debug -} - -// SetLogger set the logger -func (p *BloomProcessor) SetLogger(logger *zerolog.Logger) { - p.logger = logger -} - -// Logger return the logger -func (p *BloomProcessor) Logger() *zerolog.Logger { - return p.logger -} - -// GetHash get the hash of the current filter -func (p *BloomProcessor) GetHash() string { - h := sha256.New() - for _, f := range p.filters { - if _, err := f.Filter.WriteTo(h); err != nil { - return "" - } - } - hash := h.Sum(nil) - return hex.EncodeToString(hash) -} - -// GetFilters get all filters from the bloom processor -func (p *BloomProcessor) GetFilters() map[string]*BloomProcessorFilter { - return p.filters -} - -// SetFilter replace and set a filter -func (p *BloomProcessor) SetFilter(regex string, filter []byte) error { - filterBuffer := bytes.NewBuffer(filter) - r, err := regexp.Compile(regex) - if err != nil { - return err - } - - bloomFilter := &BloomProcessorFilter{ - Filter: boom.NewDefaultStableBloomFilter(p.maxCells, p.falsePositiveRate), - regex: r, - } - _, err = bloomFilter.Filter.ReadFrom(filterBuffer) - if err != nil { - return err - } - - p.filters[regex] = bloomFilter - return nil -} - -// Add a new item to the bloom filter -func (p *BloomProcessor) Add(regexString, item string) error { - - // check whether this regex filter already exists, otherwise initialize it - if p.filters[regexString] == nil { - r, err := regexp.Compile(regexString) - if err != nil { - return err - } - p.filters[regexString] = &BloomProcessorFilter{ - Filter: boom.NewDefaultStableBloomFilter(p.maxCells, p.falsePositiveRate), - regex: r, - } - } - p.filters[regexString].Filter.Add([]byte(item)) - - return nil -} - -// Test checks whether the item is in the bloom filter -func (p *BloomProcessor) Test(regexString, item string) bool { - if p.filters[regexString] == nil { - return false - } - return p.filters[regexString].Filter.Test([]byte(item)) -} - -// Reload the bloom filter from the DB -func (p *BloomProcessor) Reload(regexString string, items []string) (err error) { - for _, item := range items { - if err = p.Add(regexString, item); err != nil { - return - } - } - - return -} - -// FilterTransactionPublishEvent check whether a filter matches a tx event -func (p *BloomProcessor) FilterTransactionPublishEvent(eData []byte) (string, error) { - transaction := TxInfo{} - if err := json.Unmarshal(eData, &transaction); err != nil { - return "", err - } - - if transaction.Error != "" { - return "", errors.New(transaction.Error) - } - - for _, f := range p.filters { - lockingScripts := f.regex.FindAllString(string(eData), -1) - for _, ls := range lockingScripts { - if passes := f.Filter.Test([]byte(ls)); passes { - return transaction.Hex, nil - } - } - } - - return "", nil -} - -// FilterTransaction check whether a filter matches a tx event -func (p *BloomProcessor) FilterTransaction(txHex string) (string, error) { - - for _, f := range p.filters { - lockingScripts := f.regex.FindAllString(txHex, -1) - for _, ls := range lockingScripts { - if passes := f.Filter.Test([]byte(ls)); passes { - return txHex, nil - } - } - } - - return "", nil -} - -// RegexProcessor simple regex processor -// This processor just uses regex checks to see if a raw hex string exists in a tx -// This is bound to have some false positives but is somewhat performant when filter set is small -type RegexProcessor struct { - debug bool - filter []string - logger *zerolog.Logger -} - -// NewRegexProcessor initialize a new regex processor -func NewRegexProcessor() *RegexProcessor { - return &RegexProcessor{ - filter: []string{}, - } -} - -// Debug set debugging -func (p *RegexProcessor) Debug(debug bool) { - p.debug = debug -} - -// IsDebug return whether debugging is on/off -func (p *RegexProcessor) IsDebug() bool { - return p.debug -} - -// SetLogger set the logger -func (p *RegexProcessor) SetLogger(logger *zerolog.Logger) { - p.logger = logger -} - -// Logger return the logger -func (p *RegexProcessor) Logger() *zerolog.Logger { - return p.logger -} - -// Add a new item to the processor -func (p *RegexProcessor) Add(regex string, _ string) error { - p.filter = append(p.filter, regex) - return nil -} - -// Test checks whether the item matches an item in the processor -func (p *RegexProcessor) Test(_ string, item string) bool { - for _, f := range p.filter { - if strings.Contains(item, f) { - return true - } - } - return false -} - -// Reload the items of the processor to match against -func (p *RegexProcessor) Reload(_ string, items []string) (err error) { - for _, i := range items { - if err = p.Add(i, ""); err != nil { - return - } - } - return -} - -// FilterTransactionPublishEvent check whether a filter matches a tx event -func (p *RegexProcessor) FilterTransactionPublishEvent(eData []byte) (string, error) { - transaction := TxInfo{} - if err := json.Unmarshal(eData, &transaction); err != nil { - return "", err - } - if passes := p.Test("", transaction.Hex); !passes { - return "", nil - } - return transaction.Hex, nil -} - -// FilterTransaction filters transaction -func (p *RegexProcessor) FilterTransaction(hex string) (string, error) { - if passes := p.Test("", hex); passes { - return hex, nil - } - return "", nil -} - -// GetHash get the hash of the filter -func (p *RegexProcessor) GetHash() string { - return "" -} - -// GetFilters get all filters from the bloom processor -func (p *RegexProcessor) GetFilters() map[string]*BloomProcessorFilter { - return nil -} - -// SetFilter replace and set a filter -func (p *RegexProcessor) SetFilter(_ string, _ []byte) error { - return nil -} diff --git a/chainstate/processor_test.go b/chainstate/processor_test.go deleted file mode 100644 index 366906eb..00000000 --- a/chainstate/processor_test.go +++ /dev/null @@ -1,244 +0,0 @@ -package chainstate - -import ( - "fmt" - "testing" - - "github.com/BuxOrg/bux/utils" - "github.com/bitcoinschema/go-bitcoin/v2" - "github.com/centrifugal/centrifuge-go" - "github.com/libsv/go-bt/v2/bscript" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - boom "github.com/tylertreat/BoomFilters" -) - -const testTransactionHex = `0100000001979f9f1033357ab26d71381d40d94069fe2e795aed3b1bc9f28de57c57b278ed030000006a47304402207122f4592d4ddae3214bbafa9b25dd86516bc25698228a3ec1caf8d7b5fabf23022054c1347b421c55cc362227e00c5d18660271b670f2af2484ca1cb31f0ac405f2412102069a1aa13ed2c8f2d1bb7b4c3bee2e8333594ee0c0e2e9188157e8d08b8ceac9ffffffff0123020000000000001976a914a9041707efa4c2edea3e3b93c83330b55c6497d088ac00000000` - -// const testTransactionID = `512a47f5cfd2e7e22e3d440d3e8c445e41eba55b23ff5f3f696c7f106c22eab3` -const testTransaction = `{ - "txid": "512a47f5cfd2e7e22e3d440d3e8c445e41eba55b23ff5f3f696c7f106c22eab3", - "hash": "512a47f5cfd2e7e22e3d440d3e8c445e41eba55b23ff5f3f696c7f106c22eab3", - "hex": "0100000001979f9f1033357ab26d71381d40d94069fe2e795aed3b1bc9f28de57c57b278ed030000006a47304402207122f4592d4ddae3214bbafa9b25dd86516bc25698228a3ec1caf8d7b5fabf23022054c1347b421c55cc362227e00c5d18660271b670f2af2484ca1cb31f0ac405f2412102069a1aa13ed2c8f2d1bb7b4c3bee2e8333594ee0c0e2e9188157e8d08b8ceac9ffffffff0123020000000000001976a914a9041707efa4c2edea3e3b93c83330b55c6497d088ac00000000", - "size": 191, - "version": 1, - "locktime": 0, - "vin": [ - { - "n": 0, - "txid": "ed78b2577ce58df2c91b3bed5a792efe6940d9401d38716db27a3533109f9f97", - "vout": 3, - "scriptSig": { - "asm": "304402207122f4592d4ddae3214bbafa9b25dd86516bc25698228a3ec1caf8d7b5fabf23022054c1347b421c55cc362227e00c5d18660271b670f2af2484ca1cb31f0ac405f241 02069a1aa13ed2c8f2d1bb7b4c3bee2e8333594ee0c0e2e9188157e8d08b8ceac9", - "hex": "47304402207122f4592d4ddae3214bbafa9b25dd86516bc25698228a3ec1caf8d7b5fabf23022054c1347b421c55cc362227e00c5d18660271b670f2af2484ca1cb31f0ac405f2412102069a1aa13ed2c8f2d1bb7b4c3bee2e8333594ee0c0e2e9188157e8d08b8ceac9" - }, - "sequence": 4294967295, - "voutDetails": { - "value": 0.000007, - "n": 3, - "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 c98e4e2e5ee8ebcd3aad180dd1a95c464e56461f OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914c98e4e2e5ee8ebcd3aad180dd1a95c464e56461f88ac", - "reqSigs": 1, - "type": "pubkeyhash", - "addresses": [ - "1KNjJ7PPYT4hjtT19H3dezLgFp6wWSqab5" - ], - "isTruncated": false - }, - "scripthash": "8fa0ad201f31ef61df517873040da99b696bceb49c0f519a656c3c51c0e8bcb9" - } - } - ], - "vout": [ - { - "value": 0.00000547, - "n": 0, - "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 a9041707efa4c2edea3e3b93c83330b55c6497d0 OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914a9041707efa4c2edea3e3b93c83330b55c6497d088ac", - "reqSigs": 1, - "type": "pubkeyhash", - "addresses": [ - "1GQg6bWrJyBtdsi34eByLMvu4iRNvJsyxX" - ], - "isTruncated": false - }, - "scripthash": "58fe5b3fbca38ce38e5a1aeba202af70c39c2da7f8899812d5a5e42cf43ece83" - } - ], - "blockhash": "0000000000000000075e74d06bddd5a92cd64c738fe2e4ee71a09fc52bdce984", - "confirmations": 74, - "time": 1649037156, - "blocktime": 1649037156, - "blockheight": 733617, - "vincount": 1, - "voutcount": 1, - "vinvalue": 0.000007, - "voutvalue": 0.00000547 -}` - -func TestBloomProcessor(t *testing.T) { - type fields struct { - filter *boom.StableBloomFilter - filterType string - } - type args struct { - item string - txJSON string - passes bool - } - tests := []struct { - name string - fields fields - args args - }{ - { - name: "valid address locking script with proper tx", - fields: fields{ - filter: boom.NewDefaultStableBloomFilter(uint(1000), float64(0.001)), - filterType: utils.P2PKHRegexpString, - }, - args: args{ - item: "76a914a9041707efa4c2edea3e3b93c83330b55c6497d088ac", - txJSON: testTransaction, - passes: true, - }, - }, - { - name: "bad address locking script with tx", - fields: fields{ - filter: boom.NewDefaultStableBloomFilter(uint(1000), float64(0.001)), - filterType: utils.P2PKHRegexpString, - }, - args: args{ - item: "efefefefefef", - txJSON: testTransaction, - passes: false, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - m := &BloomProcessor{ - filters: map[string]*BloomProcessorFilter{ - tt.fields.filterType: { - Filter: tt.fields.filter, - regex: utils.P2PKHSubstringRegexp, - }, - }, - } - err := m.Add(utils.P2PKHRegexpString, tt.args.item) - require.NoError(t, err) - event := centrifuge.ServerPublishEvent{ - Publication: centrifuge.Publication{ - Data: []byte(tt.args.txJSON), - }, - } - var tx string - tx, err = m.FilterTransactionPublishEvent(event.Data) - assert.NoError(t, err, "%s - mempool Filter unexpectedly failed", tt.name) - if tt.args.passes { - assert.NotEqualf(t, tx, "", "%s - expected tx to pass processor and didn't", tt.name) - } else { - assert.Equalf(t, tx, "", "%s - expected tx to not pass processor and did", tt.name) - } - }) - } -} - -// BENCHMARKS - -func setupBenchmarkData() *BloomProcessor { - m := NewBloomProcessor(100000, 0.001) - - for i := 0; i < 100000; i++ { - priv, _ := bitcoin.CreatePrivateKey() - p2pkh, _ := bscript.NewP2PKHFromPubKeyEC(priv.PubKey()) - _ = m.Add(utils.P2PKHRegexpString, p2pkh.String()) - } - - return m -} - -func getEvent(i int) centrifuge.ServerPublishEvent { - return centrifuge.ServerPublishEvent{ - Publication: centrifuge.Publication{ - Data: []byte(testTransactionHex + string(rune(i))), - }, - } -} - -// always record the result of the function call to prevent the compiler eliminating it -var txResult []int - -func BenchmarkBloomProcessor(b *testing.B) { - m := setupBenchmarkData() - b.ResetTimer() - - for i := 0; i < b.N; i++ { - tx, _ := m.FilterTransactionPublishEvent(getEvent(i).Data) - txResult = append(txResult, len(tx)) - } -} - -func TestBloomProcessor_FilterMempoolTx(t *testing.T) { - txHex := "01000000013c78aba57467f8cdb6270f171ab0c67df0ecfe65dfce7a0aeeaa5774f6e0f6e3040000006a473044022064b81316db2fe23c598fd6ace8e11ce5668f1006bbdf1a660acf8773852ece29022014a31aee48f007fb4c78014a01e9595dd81f6cae39591901921f30465c2149764121022d6799224389f3764f7610080f06745d87c7296d27db034a98923242cdb280cfffffffff0750c30000000000001976a91481c80d970b24fb03362be1c65145544892cebe5688ac8d160000000000001976a91447f73f8a7807d8ab2e321c76e321d69598343fb188ac400d0300000000001976a914b1a1ffb7a9a78aae58940c73cd2a6c7c170c44f188ac400d0300000000001976a914b762ca8682f2110a540ea8795a2e72c608b6606288ac204e0000000000001976a914455525dda77e409082c691deee061c1fb6b0082088ac204e0000000000001976a914087e1729fe365716080a452bec0103bd7204021c88acbc0f0000000000001976a914f063c2a5c290c525abba30d8085cd9c661ba091288ac00000000" - - type fields struct { - maxCells uint - falsePositiveRate float64 - } - type args struct { - txHex string - } - tests := []struct { - name string - fields fields - args args - want string - wantErr assert.ErrorAssertionFunc - }{ - { - name: "Real tx", - fields: fields{ - maxCells: 100, - falsePositiveRate: 0.01, - }, - args: args{ - txHex: txHex, - }, - want: txHex, - wantErr: assert.NoError, - }, - { - name: "No match", - fields: fields{ - maxCells: 100, - falsePositiveRate: 0.01, - }, - args: args{ - txHex: "test string", - }, - want: "", - wantErr: assert.NoError, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - p := NewBloomProcessor( - tt.fields.maxCells, - tt.fields.falsePositiveRate, - ) - err := p.Add(utils.P2PKHRegexpString, "76a91481c80d970b24fb03362be1c65145544892cebe5688ac") - require.NoError(t, err) - - var got string - got, err = p.FilterTransaction(tt.args.txHex) - if !tt.wantErr(t, err, fmt.Sprintf("FilterMempoolTx(%v)", tt.args.txHex)) { - return - } - assert.Equalf(t, tt.want, got, "FilterMempoolTx(%v)", tt.args.txHex) - }) - } -} diff --git a/go.mod b/go.mod index d6f7d27b..a1f0ea3a 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,6 @@ require ( github.com/bitcoin-sv/go-paymail v0.12.1 github.com/bitcoinschema/go-bitcoin/v2 v2.0.5 github.com/bitcoinschema/go-map v0.1.0 - github.com/centrifugal/centrifuge-go v0.10.2 github.com/coocood/freecache v1.2.4 github.com/dolthub/go-mysql-server v0.17.0 github.com/fergusstrange/embedded-postgres v1.25.0 @@ -32,7 +31,6 @@ require ( github.com/stretchr/testify v1.8.4 github.com/tonicpow/go-minercraft/v2 v2.0.8 github.com/tryvium-travels/memongo v0.11.0 - github.com/tylertreat/BoomFilters v0.0.0-20210315201527-1a82519a3e43 github.com/vmihailenco/taskq/v3 v3.2.9 go.elastic.co/ecszerolog v0.2.0 go.mongodb.org/mongo-driver v1.13.1 @@ -48,10 +46,8 @@ require ( github.com/bitcoinsv/bsvutil v0.0.0-20181216182056-1d77cf353ea9 // indirect github.com/bsm/redislock v0.9.4 // indirect github.com/capnm/sysinfo v0.0.0-20130621111458-5909a53897f3 // indirect - github.com/centrifugal/protocol v0.11.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/d4l3k/messagediff v1.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect @@ -68,7 +64,6 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/websocket v1.5.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect @@ -78,14 +73,11 @@ require ( github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect - github.com/josharian/intern v1.0.0 // indirect - github.com/jpillora/backoff v1.0.0 // indirect github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/klauspost/compress v1.17.6 // indirect github.com/lestrrat-go/strftime v1.0.6 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libsv/go-p2p v0.1.5 // indirect - github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect @@ -101,8 +93,6 @@ require ( github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/segmentio/asm v1.2.0 // indirect - github.com/segmentio/encoding v0.4.0 // indirect github.com/shopspring/decimal v1.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sosodev/duration v1.2.0 // indirect @@ -114,7 +104,6 @@ require ( github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/vektah/gqlparser/v2 v2.5.11 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect @@ -149,12 +138,6 @@ replace github.com/bsm/redislock => github.com/bsm/redislock v0.7.2 // Issue with using wrong version of Redigo replace github.com/gomodule/redigo => github.com/gomodule/redigo v1.8.9 -// Breaking changes - needs a full refactor in WOC and BUX -replace github.com/centrifugal/centrifuge-go => github.com/centrifugal/centrifuge-go v0.8.3 - -// Breaking changes - needs a full refactor in WOC and BUX -replace github.com/centrifugal/protocol => github.com/centrifugal/protocol v0.9.1 - // Issue: go.mongodb.org/mongo-driver/x/bsonx: cannot find module providing package go.mongodb.org/mongo-driver/x/bsonx // Need to convert bsonx to bsoncore replace go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.11.7 diff --git a/go.sum b/go.sum index 2b93e63d..d3faaccd 100644 --- a/go.sum +++ b/go.sum @@ -41,10 +41,6 @@ github.com/bsm/redislock v0.7.2/go.mod h1:kS2g0Yvlymc9Dz8V3iVYAtLAaSVruYbAFdYBDr github.com/cactus/go-statsd-client/statsd v0.0.0-20200423205355-cb0885a1018c/go.mod h1:l/bIBLeOl9eX+wxJAzxS4TveKRtAqlyDpHjhkfO0MEI= github.com/capnm/sysinfo v0.0.0-20130621111458-5909a53897f3 h1:IHZ1Le1ejzkmS7Si7dIzJvYDWe+BIoNmqMnfWHBZSVw= github.com/capnm/sysinfo v0.0.0-20130621111458-5909a53897f3/go.mod h1:M5XHQLu90v2JNm/bW2tdsYar+5vhV0gEcBcmDBNAN1Y= -github.com/centrifugal/centrifuge-go v0.8.3 h1:kZ0AZaaSbrDJuMH+Hp5RiCKZyUsKmUmNv8h0tMlij78= -github.com/centrifugal/centrifuge-go v0.8.3/go.mod h1:HkBuiQLwdLdauVtiqig2wgzLsDKp9As72w01WDat+ow= -github.com/centrifugal/protocol v0.9.1 h1:DCoZvYtblUotGrM7GrpIvKtZYhjT03chvhEN9tyWZMY= -github.com/centrifugal/protocol v0.9.1/go.mod h1:qpYrxz4cDj+rlgC6giSADkf7XDN1K7aFmkkFwt/bayQ= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -53,8 +49,6 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/coocood/freecache v1.2.4 h1:UdR6Yz/X1HW4fZOuH0Z94KwG851GWOSknua5VUbb/5M= github.com/coocood/freecache v1.2.4/go.mod h1:RBUWa/Cy+OHdfTGFEhEuE1pMCMX51Ncizj7rthiQ3vk= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U= -github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -132,9 +126,6 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.2/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/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -161,10 +152,6 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -196,8 +183,6 @@ github.com/libsv/go-bt/v2 v2.2.5 h1:VoggBLMRW9NYoFujqe5bSYKqnw5y+fYfufgERSoubog= github.com/libsv/go-bt/v2 v2.2.5/go.mod h1:cV45+jDlPOLfhJLfpLmpQoWzrIvVth9Ao2ZO1f6CcqU= github.com/libsv/go-p2p v0.1.5 h1:zbUE1UQ73J7LN/s3gruQBTh3Sz0DSSmj3cWhC1ZQVM0= github.com/libsv/go-p2p v0.1.5/go.mod h1:9KhX8e+3oEmGiYQSeF/CrHj22YNHqiof3TH77VqcMCs= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -272,13 +257,6 @@ github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= -github.com/segmentio/asm v1.1.4/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= -github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= -github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= -github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= -github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= @@ -327,10 +305,6 @@ github.com/tonicpow/go-minercraft/v2 v2.0.8 h1:gDjHOpmD0P5qRLpgRLUHDcDR39DdT5c/X github.com/tonicpow/go-minercraft/v2 v2.0.8/go.mod h1:mfr1fgOpnu2GkTmPDT4Sanoh4wOfV6kcwOrjVdo8vPk= github.com/tryvium-travels/memongo v0.11.0 h1:VpFkeigK7bge9aXH+oVG+H3OI2ih12riTROk0CvERrk= github.com/tryvium-travels/memongo v0.11.0/go.mod h1:riRUHKRQ5JbeX2ryzFfmr7P2EYXIkNwgloSQJPpBikA= -github.com/tylertreat/BoomFilters v0.0.0-20210315201527-1a82519a3e43 h1:QEePdg0ty2r0t1+qwfZmQ4OOl/MB2UXIeJSpIZv56lg= -github.com/tylertreat/BoomFilters v0.0.0-20210315201527-1a82519a3e43/go.mod h1:OYRfF6eb5wY9VRFkXJH8FFBi3plw2v+giaIu7P054pM= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= @@ -422,8 +396,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -480,7 +452,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=