diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..42d74e6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,26 @@ +on: [push, pull_request] +name: Test +jobs: + test-nocache: + strategy: + matrix: + go-version: [1.22.x] + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go-version }} + cache: false + - run: go test ./... + + run: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: 1.22.x + - run: go install ./... + - run: rpc-crawler https://rpc-cosmoshub.goldenratiostaking.net:443 diff --git a/go.mod b/go.mod index ea729b1..4c58244 100644 --- a/go.mod +++ b/go.mod @@ -21,126 +21,48 @@ replace ( require ( github.com/cometbft/cometbft v0.37.5 - github.com/cosmos/cosmos-sdk v0.47.10 github.com/fatih/color v1.14.1 - google.golang.org/grpc v1.60.1 ) require ( - cosmossdk.io/errors v1.0.1 // indirect - cosmossdk.io/math v1.3.0 // indirect - filippo.io/edwards25519 v1.0.0 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect - github.com/DataDog/zstd v1.4.5 // indirect - github.com/armon/go-metrics v0.4.1 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.3 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/confio/ics23/go v0.9.0 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.4 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect - github.com/cosmos/iavl v0.20.1 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect - github.com/dgraph-io/badger/v4 v4.2.0 // indirect - github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/flatbuffers v1.12.1 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-uuid v1.0.1 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.1.0 // indirect - github.com/huandu/skiplist v1.2.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.0 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/spf13/cobra v1.8.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.1 // indirect github.com/stretchr/testify v1.9.0 // indirect - github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.6.0 // indirect - github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect - go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/net v0.23.0 // indirect golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect + google.golang.org/grpc v1.62.1 // indirect google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - pgregory.net/rapid v1.1.0 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 30ae62f..42237aa 100644 --- a/go.sum +++ b/go.sum @@ -1,65 +1,19 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= -cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= -cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= -cosmossdk.io/log v1.3.1 h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI= -cosmossdk.io/log v1.3.1/go.mod h1:2/dIomt8mKdk6vl3OWJcPk2be3pGOS8OQaLUM/3/tCM= -cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= -cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= -cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= -cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= -github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/btcsuite/btcd/btcec/v2 v2.3.3 h1:6+iXlDKE8RMtKsvK0gshlXIuPbyWM/h84Ensb7o3sC0= github.com/btcsuite/btcd/btcec/v2 v2.3.3/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= @@ -70,209 +24,85 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= -github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.5 h1:/U/TlgMh4NdnXNo+YU9T2NMCWyhXNDF34Mx582jlvq0= github.com/cometbft/cometbft v0.37.5/go.mod h1:QC+mU0lBhKn8r9qvmnq53Dmf3DWBt4VtkcKw2C81wxY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= -github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/cosmos-proto v1.0.0-beta.4 h1:aEL7tU/rLOmxZQ9z4i7mzxcLbSCY48OdY7lIWTLG7oU= -github.com/cosmos/cosmos-proto v1.0.0-beta.4/go.mod h1:oeB+FyVzG3XrQJbJng0EnV8Vljfk9XvTIpGILNU/9Co= -github.com/cosmos/cosmos-sdk v0.47.10 h1:Wxf5yEN3jZbG4fftxAMKB6rpd8ME0mxuCVihpz65dt0= -github.com/cosmos/cosmos-sdk v0.47.10/go.mod h1:UWpgWkhcsBIATS68uUC0del7IiBN4hPv/vqg8Zz23uw= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= -github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= -github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= -github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= -github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= -github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= -github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= 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/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= -github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -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.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/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= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= 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/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= -github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -281,16 +111,11 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= 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= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= @@ -298,309 +123,101 @@ github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0Em github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= -github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= -github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= -github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= -github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo= go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/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-20210819135213-f52c844e1c1c/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-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 h1:nz5NESFLZbJGPFxDT/HCn+V1mZ8JGNoY4nUpmW/Y2eg= -google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0= -google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o= -google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 h1:gphdwh0npgs8elJ4T6J+DQJHPVF7RsuJHCfwztUb4J4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 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= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/javascript/crawl.js b/javascript/crawl.js new file mode 100644 index 0000000..08fe268 --- /dev/null +++ b/javascript/crawl.js @@ -0,0 +1,69 @@ +const axios = require('axios'); + +const visitedNodes = new Set(); +const timeout = 3000; // Timeout for requests in milliseconds + +async function fetchNetInfo(url) { + try { + const response = await axios.get(url, { timeout }); + return response.data.result; + } catch (error) { + console.error(`Error fetching ${url}:`, error.message); + return null; + } +} + +async function fetchStatus(url) { + try { + const response = await axios.get(url, { timeout }); + return response.data.result; + } catch (error) { + console.error(`Error fetching ${url}:`, error.message); + return null; + } +} + +async function crawlNetwork(url, maxDepth, currentDepth = 0) { + if (currentDepth > maxDepth) { + return; + } + + const netInfo = await fetchNetInfo(url); + if (!netInfo) { + return; + } + + const statusUrl = url.replace('/net_info', '/status'); + const statusInfo = await fetchStatus(statusUrl); + if (statusInfo) { + const earliestBlockHeight = statusInfo.sync_info.earliest_block_height; + const earliestBlockTime = statusInfo.sync_info.earliest_block_time; + console.log(`Node: ${url}`); + console.log(`Earliest Block Height: ${earliestBlockHeight}`); + console.log(`Earliest Block Time: ${earliestBlockTime}`); + } + + const peers = netInfo.peers; + const crawlPromises = peers.map(async (peer) => { + const remoteIp = peer.remote_ip; + const rpcAddress = peer.node_info.other.rpc_address.replace('tcp://', 'http://').replace('0.0.0.0', remoteIp); + + if (!visitedNodes.has(rpcAddress)) { + visitedNodes.add(rpcAddress); + console.log(`Crawling: ${rpcAddress}`); + await crawlNetwork(`${rpcAddress}/net_info`, maxDepth, currentDepth + 1); + } + }); + + await Promise.all(crawlPromises); +} + +const initialUrl = 'https://sifchain-rpc.polkachu.com:443/net_info'; +const maxDepth = 3; // Set the maximum depth for recursion + +crawlNetwork(initialUrl, maxDepth).then(() => { + console.log('Crawling complete.'); +}).catch((error) => { + console.error('Error during crawling:', error); +}); + diff --git a/lib/checknode.go b/lib/checknode.go deleted file mode 100644 index 70c7919..0000000 --- a/lib/checknode.go +++ /dev/null @@ -1,119 +0,0 @@ -package lib - -import ( - "context" - "strings" - "sync" - "time" - - coretypes "github.com/cometbft/cometbft/rpc/core/types" - "github.com/fatih/color" -) - -var ( - earliestBlock map[string]int - rpcAddr map[string]bool - grpcAddr map[string]bool - apiAddr map[string]bool - moniker map[string]string - initialNode string - nodeAddrGRPC string - totalNodesChecked int - initialChainID string - archiveNodes map[string]bool -) - -func CheckNode(nodeAddr string) { - if IsNodeVisited(nodeAddr) { - return - } - MarkNodeAsVisited(nodeAddr) - // Check if the node is the initial node - if initialNode == "" { - earliestBlock = map[string]int{} - rpcAddr = map[string]bool{} - grpcAddr = map[string]bool{} - apiAddr = map[string]bool{} - archiveNodes = map[string]bool{} - moniker = map[string]string{} - initialNode = nodeAddr - client, err := FetchClient(nodeAddr) - if err != nil { - color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - return - } - ctx := context.TODO() - status, err := client.Status(ctx) - if err != nil { - color.Red("[%s] cannot fetch status\n", time.Now().Format("2006-01-02 15:04:05")) - } - initialChainID = status.NodeInfo.Network - moniker[nodeAddr] = status.NodeInfo.Moniker - } - // Skip if the node address is localhost and it's not the initial node - if nodeAddr != initialNode && strings.Contains(nodeAddr, "localhost") { - return - } - // Increment total nodes - totalNodesChecked++ - client, err := FetchClient(nodeAddr) - if err != nil { - color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - return - } - netinfo, err := FetchNetInfo(client) - if err == nil { - color.Green("[%s] Got net info from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - CheckNodeGRPC(nodeAddr) - ctx := context.TODO() - status, err := client.Status(ctx) - moniker[nodeAddr] = status.NodeInfo.Moniker - if err != nil { - color.Red("[%s] Failed to fetch client from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - return - } - // Verify chain_id - if status.NodeInfo.Network != initialChainID { - color.Red("[%s] Node %s is on a different chain_id\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - return - } - // Add to successful nodes - earliestBlock[nodeAddr] = int(status.SyncInfo.EarliestBlockHeight) - rpcAddr[nodeAddr] = true - // If the node has block 1, it's an archive node - if int(status.SyncInfo.EarliestBlockHeight) == 1 { - archiveNodes[nodeAddr] = true - } - var wg sync.WaitGroup - for _, peer := range netinfo.Peers { - wg.Add(1) - go func(peer coretypes.Peer) { - defer wg.Done() - ProcessPeer(peer) - }(peer) - } - wg.Wait() - } else { - color.Red("[%s] Failed to fetch net_info from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) - CheckNodeGRPC(nodeAddr) - // Add to unsuccessful nodes - rpcAddr[nodeAddr] = false - return - } -} - -func CheckNodeGRPC(nodeAddr string) { - nodeAddrGRPC = strings.Replace(nodeAddr, "26657", "9090", 1) - nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "http://", "", 1) - nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "https://", "", 1) - err := FetchNodeInfoGRPC(nodeAddrGRPC) - if err == nil { - color.Green("[%s] Got node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) - // Add to successful nodes - grpcAddr[nodeAddr] = true - } else { - color.Red("[%s] Failed to fetch node info GRPC from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddrGRPC) - // Add to unsuccessful nodes - grpcAddr[nodeAddr] = false - } -} diff --git a/lib/lib.go b/lib/lib.go deleted file mode 100644 index c2ca272..0000000 --- a/lib/lib.go +++ /dev/null @@ -1,182 +0,0 @@ -package lib - -import ( - "context" - "fmt" - "os" - "strings" - "sync" - "time" - - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" - - "github.com/cometbft/cometbft/rpc/client/http" - coretypes "github.com/cometbft/cometbft/rpc/core/types" - "github.com/cosmos/cosmos-sdk/client/grpc/tmservice" - "github.com/fatih/color" -) - -var visited = struct { - sync.RWMutex - nodes map[string]bool -}{nodes: make(map[string]bool)} - -func FetchClient(nodeAddr string) (client *http.HTTP, err error) { - client, err = http.NewWithTimeout(nodeAddr, "websocket", 500) - if err != nil { - return nil, err - } - return client, err -} - -func BuildRPCAddress(peer coretypes.Peer) string { - rpcAddr := peer.NodeInfo.Other.RPCAddress - rpcAddr = strings.TrimPrefix(rpcAddr, "tcp://") - if len(rpcAddr) >= 9 && (rpcAddr[:9] == "0.0.0.0:" || rpcAddr[:9] == "127.0.0.1:") { - rpcAddr = peer.RemoteIP + rpcAddr[8:] - } - return rpcAddr -} - -func WriteSectionToToml(file *os.File, nodeAddr string) { - nodeAddrGRPC := strings.Replace(nodeAddr, "26657", "9090", 1) - nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "http://", "", 1) - nodeAddrGRPC = strings.Replace(nodeAddrGRPC, "https://", "", 1) - sectionName, ok := moniker[nodeAddr] - if !ok || sectionName == "" { - sectionName = "default" - } - _, err := file.WriteString("[[nodes]]\n") - if err != nil { - color.Red("[%s] cannot write section to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - _, err = file.WriteString(fmt.Sprintf("name = \"%s\"\n", sectionName)) - if err != nil { - color.Red("[%s] cannot write section to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - _, err = file.WriteString(fmt.Sprintf("earliest_block = %d\n", earliestBlock[nodeAddr])) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - writeStatus := func(service string, addr string, statusMap map[string]bool) { - status := "unsuccessful" - if statusMap[nodeAddr] { - status = "successful" - } - _, err = file.WriteString(fmt.Sprintf("%s = \"%s\"\n", service, addr)) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - _, err = file.WriteString(fmt.Sprintf("%s_status = \"%s\"\n", service, status)) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - } - writeStatus("rpc", nodeAddr, rpcAddr) - writeStatus("grpc", nodeAddrGRPC, grpcAddr) - _, err = file.WriteString("\n") - if err != nil { - color.Red("[%s] cannot write escape sequence to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } -} - -func ProcessPeer(peer coretypes.Peer) { - rpcAddr := BuildRPCAddress(peer) - rpcAddr = NormalizeAddressWithRemoteIP(rpcAddr, peer.RemoteIP) - CheckNode("http://" + rpcAddr) -} - -func FetchNodeInfoGRPC(nodeAddr string) error { - grpcConn, err := grpc.Dial( - nodeAddr, - grpc.WithTransportCredentials(insecure.NewCredentials()), - ) - if err != nil { - return err - } - defer grpcConn.Close() - serviceClient := tmservice.NewServiceClient(grpcConn) - _, err = serviceClient.GetNodeInfo( - context.Background(), - &tmservice.GetNodeInfoRequest{}, - ) - if err != nil { - color.Red("[%s] %v\n", time.Now().Format("2006-01-02 15:04:05"), err) - return err - } - return err -} - -func FetchNetInfo(client *http.HTTP) (*coretypes.ResultNetInfo, error) { - ctx := context.Background() - netinfo, err := client.NetInfo(ctx) - return netinfo, err -} - -func NormalizeAddressWithRemoteIP(nodeAddr string, remoteIP string) string { - nodeAddr = strings.ReplaceAll(nodeAddr, "0.0.0.0", remoteIP) - nodeAddr = strings.ReplaceAll(nodeAddr, "127.0.0.1", remoteIP) - return nodeAddr -} - -func IsNodeVisited(nodeAddr string) bool { - visited.RLock() - defer visited.RUnlock() - _, ok := visited.nodes[nodeAddr] - return ok -} - -func MarkNodeAsVisited(nodeAddr string) { - visited.Lock() - defer visited.Unlock() - visited.nodes[nodeAddr] = true -} - -func WriteNodesToToml(initialNode string) { - file, err := os.Create("nodes.toml") - if err != nil { - color.Red("[%s] Error creating .toml file: %v\n", time.Now().Format("2006-01-02 15:04:05"), err) - return - } - defer file.Close() - // Write the source node to the file - _, err = file.WriteString(fmt.Sprintf("source_node = \"%s\"\n\n", initialNode)) - if err != nil { - color.Red("[%s] cannot write source node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - _, err = file.WriteString(fmt.Sprintf("total_nodes_checked = %d\n\n", totalNodesChecked)) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - // Write sections to the file - for key := range rpcAddr { - WriteSectionToToml(file, key) - } - WriteSectionToTomlSlice(file, "successful_rpc_nodes", rpcAddr, true) - WriteSectionToTomlSlice(file, "unsuccessful_rpc_nodes", rpcAddr, false) - WriteSectionToTomlSlice(file, "successful_grpc_nodes", grpcAddr, true) - WriteSectionToTomlSlice(file, "unsuccessful_grpc_nodes", grpcAddr, false) - WriteSectionToTomlSlice(file, "successful_api_nodes", apiAddr, true) - WriteSectionToTomlSlice(file, "unsuccessful_api_nodes", apiAddr, false) - color.Green("[%s] .toml file created with node details.\n", time.Now().Format("2006-01-02 15:04:05")) -} - -func WriteSectionToTomlSlice(file *os.File, sectionName string, nodes map[string]bool, status bool) { - _, err := file.WriteString(fmt.Sprintf("%s = [\n", sectionName)) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - for key, val := range nodes { - if val == status { - _, err = file.WriteString(fmt.Sprintf(" \"%s\",\n", key)) - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } - } - } - _, err = file.WriteString("]\n\n") - if err != nil { - color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) - } -} diff --git a/main.go b/main.go index 71e837f..6255492 100644 --- a/main.go +++ b/main.go @@ -1,26 +1,355 @@ package main import ( + "context" + "fmt" "os" + "strings" + "sync" "time" + "github.com/cometbft/cometbft/rpc/client/http" + coretypes "github.com/cometbft/cometbft/rpc/core/types" "github.com/fatih/color" - "github.com/notional-labs/rpc-crawler/lib" +) + +var ( + uniquePeers map[string]bool + uniquePeersMu sync.RWMutex + visited = struct { + sync.RWMutex + nodes map[string]bool + }{nodes: make(map[string]bool)} + earliestBlock map[string]int + earliestBlockMu sync.RWMutex + rpcAddr map[string]bool + rpcAddrMu sync.RWMutex + moniker map[string]string + monikerMu sync.RWMutex + initialNode string + totalNodesChecked int + initialChainID string + archiveNodes map[string]bool + archiveNodesMu sync.RWMutex ) func main() { - initialNode := "http://localhost:26657" + initialNodes := []string{"http://localhost:26657"} if len(os.Args) > 1 { - initialNode = os.Args[1] + initialNodes = strings.Split(os.Args[1], " ") } + uniquePeersMu.Lock() + uniquePeers = make(map[string]bool) + uniquePeersMu.Unlock() + start := time.Now() color.Green("[%s] Starting RPC crawler...\n", start.Format("2006-01-02 15:04:05")) - lib.CheckNode(initialNode) + for _, initialNode := range initialNodes { + go CheckNode(initialNode) + } + + // Wait for all goroutines to finish + time.Sleep(60 * time.Second) elapsed := time.Since(start) color.Green("[%s] RPC crawler completed in %s\n", time.Now().Format("2006-01-02 15:04:05"), elapsed) - lib.WriteNodesToToml(initialNode) + WriteNodesToToml(initialNodes[0]) +} + +func CheckNode(nodeAddr string) { + commonRPCPorts := []string{ + "26657", + "36657", + "22257", + "14657", + "58657", + "33657", + "53657", + "37657", + "31657", + "10157", + "27957", + "2401", + "15957", + } + + if IsNodeVisited(nodeAddr) { + return + } + MarkNodeAsVisited(nodeAddr) + // Check if the node is the initial node + if initialNode == "" { + earliestBlockMu.Lock() + earliestBlock = map[string]int{} + earliestBlockMu.Unlock() + + rpcAddrMu.Lock() + rpcAddr = map[string]bool{} + rpcAddrMu.Unlock() + + archiveNodesMu.Lock() + archiveNodes = map[string]bool{} + archiveNodesMu.Unlock() + + monikerMu.Lock() + moniker = map[string]string{} + monikerMu.Unlock() + + initialNode = nodeAddr + client, err := FetchClient(nodeAddr) + if err != nil { + color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + + // Iterate through common RPC ports if the initial connection attempt fails + for _, port := range commonRPCPorts { + altNodeAddr := fmt.Sprintf("%s:%s", strings.Split(nodeAddr, ":")[0], port) + client, err = FetchClient(altNodeAddr) + if err == nil { + nodeAddr = altNodeAddr + break + } + } + + if err != nil { + return + } + } + + ctx := context.TODO() + status, err := client.Status(ctx) + if err != nil { + color.Red("[%s] cannot fetch status\n", time.Now().Format("2006-01-02 15:04:05")) + return + } + if status == nil { + color.Red("[%s] Status is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + initialChainID = status.NodeInfo.Network + moniker[nodeAddr] = status.NodeInfo.Moniker + } + // Skip if the node address is localhost and it's not the initial node + if nodeAddr != initialNode && strings.Contains(nodeAddr, "localhost") { + return + } + // Increment total nodes + totalNodesChecked++ + client, err := FetchClient(nodeAddr) + if err != nil { + color.Red("[%s] Failed to fetch status from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + if client == nil { + color.Red("[%s] Client is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + netinfo, err := FetchNetInfo(client) + if err == nil { + newPeers := 0 + for _, peer := range netinfo.Peers { + rpcAddr := BuildRPCAddress(peer) + rpcAddr = NormalizeAddressWithRemoteIP(rpcAddr, peer.RemoteIP) + uniquePeersMu.Lock() + if !uniquePeers[rpcAddr] { + uniquePeers[rpcAddr] = true + newPeers++ + } + uniquePeersMu.Unlock() + } + uniquePeersMu.RLock() + totalUniquePeers := len(uniquePeers) + uniquePeersMu.RUnlock() + color.Green("[%s] Got net info from %s with %d peers, and %d new peers for a total of %d unique peers in the network\n", + time.Now().Format("2006-01-02 15:04:05"), nodeAddr, len(netinfo.Peers), newPeers, totalUniquePeers) + + ctx := context.TODO() + status, err := client.Status(ctx) + moniker[nodeAddr] = status.NodeInfo.Moniker + if err != nil { + color.Red("[%s] Failed to fetch client from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + if status == nil { + color.Red("[%s] Status is nil for %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + // Verify chain_id + if status.NodeInfo.Network != initialChainID { + color.Red("[%s] Node %s is on a different chain_id\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + return + } + // Add to successful nodes + earliestBlock[nodeAddr] = int(status.SyncInfo.EarliestBlockHeight) + rpcAddr[nodeAddr] = true + // If the node has block 1, it's an archive node + if int(status.SyncInfo.EarliestBlockHeight) == 1 { + archiveNodes[nodeAddr] = true + } + var wg sync.WaitGroup + for _, peer := range netinfo.Peers { + wg.Add(1) + go func(peer coretypes.Peer) { + defer wg.Done() + ProcessPeer(peer) + }(peer) + } + wg.Wait() + } else { + color.Red("[%s] Failed to fetch net_info from %s\n", time.Now().Format("2006-01-02 15:04:05"), nodeAddr) + // Add to unsuccessful nodes + rpcAddr[nodeAddr] = false + return + } +} + +func FetchClient(nodeAddr string) (client *http.HTTP, err error) { + client, err = http.NewWithTimeout(nodeAddr, "websocket", 500) + if err != nil { + return nil, err + } + return client, err +} + +func BuildRPCAddress(peer coretypes.Peer) string { + rpcAddr := peer.NodeInfo.Other.RPCAddress + rpcAddr = strings.TrimPrefix(rpcAddr, "tcp://") + if len(rpcAddr) >= 9 && (rpcAddr[:9] == "0.0.0.0:" || rpcAddr[:9] == "127.0.0.1:") { + rpcAddr = peer.RemoteIP + rpcAddr[8:] + } + return rpcAddr +} + +func WriteSectionToToml(file *os.File, nodeAddr string) { + sectionName, ok := moniker[nodeAddr] + if !ok || sectionName == "" { + sectionName = "default" + } + _, err := file.WriteString("[[nodes]]\n") + if err != nil { + color.Red("[%s] cannot write section to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + _, err = file.WriteString(fmt.Sprintf("name = \"%s\"\n", sectionName)) + if err != nil { + color.Red("[%s] cannot write section to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + _, err = file.WriteString(fmt.Sprintf("earliest_block = %d\n", earliestBlock[nodeAddr])) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + writeStatus := func(service string, addr string, statusMap map[string]bool) { + status := "unsuccessful" + if statusMap[nodeAddr] { + status = "successful" + } + _, err = file.WriteString(fmt.Sprintf("%s = \"%s\"\n", service, addr)) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + _, err = file.WriteString(fmt.Sprintf("%s_status = \"%s\"\n", service, status)) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + } + writeStatus("rpc", nodeAddr, rpcAddr) + _, err = file.WriteString("\n") + if err != nil { + color.Red("[%s] cannot write escape sequence to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } +} + +func ProcessPeer(peer coretypes.Peer) { + commonRPCPorts := []string{ + "26657", + "36657", + "22257", + "14657", + "58657", + "33657", + "53657", + "37657", + "31657", + "10157", + "27957", + "2401", + "15957", + } + rpcAddr := BuildRPCAddress(peer) + rpcAddr = NormalizeAddressWithRemoteIP(rpcAddr, peer.RemoteIP) + + // Extract the IP address and port from the rpcAddr + parts := strings.Split(rpcAddr, ":") + ipAddr := parts[0] + + // Iterate through common RPC ports and check each port + for _, port := range commonRPCPorts { + nodeAddr := fmt.Sprintf("%s:%s", ipAddr, port) + CheckNode("http://" + nodeAddr) + } +} + +func FetchNetInfo(client *http.HTTP) (*coretypes.ResultNetInfo, error) { + ctx := context.Background() + netinfo, err := client.NetInfo(ctx) + return netinfo, err +} + +func NormalizeAddressWithRemoteIP(nodeAddr string, remoteIP string) string { + nodeAddr = strings.ReplaceAll(nodeAddr, "0.0.0.0", remoteIP) + nodeAddr = strings.ReplaceAll(nodeAddr, "127.0.0.1", remoteIP) + return nodeAddr +} + +func IsNodeVisited(nodeAddr string) bool { + visited.RLock() + defer visited.RUnlock() + _, ok := visited.nodes[nodeAddr] + return ok +} + +func MarkNodeAsVisited(nodeAddr string) { + visited.Lock() + defer visited.Unlock() + visited.nodes[nodeAddr] = true +} + +func WriteNodesToToml(initialNode string) { + file, err := os.Create("nodes.toml") + if err != nil { + color.Red("[%s] Error creating .toml file: %v\n", time.Now().Format("2006-01-02 15:04:05"), err) + return + } + defer file.Close() + // Write the source node to the file + _, err = file.WriteString(fmt.Sprintf("source_node = \"%s\"\n\n", initialNode)) + if err != nil { + color.Red("[%s] cannot write source node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + _, err = file.WriteString(fmt.Sprintf("total_nodes_checked = %d\n\n", totalNodesChecked)) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + WriteSectionToTomlSlice(file, "successful_rpc_nodes", rpcAddr, true) + color.Green("[%s] .toml file created with node details.\n", time.Now().Format("2006-01-02 15:04:05")) +} + +func WriteSectionToTomlSlice(file *os.File, sectionName string, nodes map[string]bool, status bool) { + _, err := file.WriteString(fmt.Sprintf("%s = [\n", sectionName)) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + for key, val := range nodes { + if val == status { + _, err = file.WriteString(fmt.Sprintf(" \"%s\",\n", key)) + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } + } + } + _, err = file.WriteString("]\n\n") + if err != nil { + color.Red("[%s] cannot write node to toml file\n", time.Now().Format("2006-01-02 15:04:05")) + } } diff --git a/nodes.toml b/nodes.toml index 11bd2ee..128096b 100644 --- a/nodes.toml +++ b/nodes.toml @@ -1,1562 +1,15 @@ -source_node = "https://r-terra--a1f4bb74a50728120e4f8c8054a8bb4c.gw.notionalapi.net:443" +source_node = "https://rpc-celestia-ia.cosmosia.notional.ventures:443" -total_nodes_checked = 154 - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://51.222.10.128:26657" -rpc_status = "unsuccessful" -grpc = "51.222.10.128:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://23.88.66.187:26657" -rpc_status = "unsuccessful" -grpc = "23.88.66.187:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://18.183.203.5:26657" -rpc_status = "unsuccessful" -grpc = "18.183.203.5:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "SP" -earliest_block = 14639495 -rpc = "http://213.246.39.167:26657" -rpc_status = "successful" -grpc = "213.246.39.167:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.109.106.164:26657" -rpc_status = "unsuccessful" -grpc = "65.109.106.164:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://195.201.63.87:26657" -rpc_status = "unsuccessful" -grpc = "195.201.63.87:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://54.199.153.43:26657" -rpc_status = "unsuccessful" -grpc = "54.199.153.43:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "cp-test" -earliest_block = 16423473 -rpc = "http://65.21.134.243:26673" -rpc_status = "successful" -grpc = "65.21.134.243:26673" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://103.241.24.66:26657" -rpc_status = "unsuccessful" -grpc = "103.241.24.66:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://172.255.98.36:36657" -rpc_status = "unsuccessful" -grpc = "172.255.98.36:36657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "sanctions" -earliest_block = 16099854 -rpc = "http://168.119.75.88:26657" -rpc_status = "successful" -grpc = "168.119.75.88:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://157.90.212.31:26657" -rpc_status = "unsuccessful" -grpc = "157.90.212.31:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://103.87.94.132:26657" -rpc_status = "unsuccessful" -grpc = "103.87.94.132:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "node" -earliest_block = 16481090 -rpc = "http://136.243.88.91:1421" -rpc_status = "successful" -grpc = "136.243.88.91:1421" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://54.199.229.124:26657" -rpc_status = "unsuccessful" -grpc = "54.199.229.124:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://142.132.193.150:26657" -rpc_status = "unsuccessful" -grpc = "142.132.193.150:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://34.249.177.43:26657" -rpc_status = "unsuccessful" -grpc = "34.249.177.43:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://13.213.121.179:26657" -rpc_status = "unsuccessful" -grpc = "13.213.121.179:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.168.155:26657" -rpc_status = "unsuccessful" -grpc = "169.155.168.155:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://13.209.60.161:26657" -rpc_status = "unsuccessful" -grpc = "13.209.60.161:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://47.242.54.248:26657" -rpc_status = "unsuccessful" -grpc = "47.242.54.248:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "frag_node" -earliest_block = 16972322 -rpc = "http://51.222.11.146:26657" -rpc_status = "successful" -grpc = "51.222.11.146:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://178.162.165.203:26657" -rpc_status = "unsuccessful" -grpc = "178.162.165.203:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.109.93.35:61657" -rpc_status = "unsuccessful" -grpc = "65.109.93.35:61657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://35.161.85.155:26657" -rpc_status = "unsuccessful" -grpc = "35.161.85.155:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "tera-bitz" -earliest_block = 14513401 -rpc = "http://81.183.230.170:26657" -rpc_status = "successful" -grpc = "81.183.230.170:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://34.87.32.135:26657" -rpc_status = "unsuccessful" -grpc = "34.87.32.135:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://103.234.71.245:26657" -rpc_status = "unsuccessful" -grpc = "103.234.71.245:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.97.229:26657" -rpc_status = "unsuccessful" -grpc = "65.108.97.229:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://212.32.245.96:26657" -rpc_status = "unsuccessful" -grpc = "212.32.245.96:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://68.206.160.142:26657" -rpc_status = "unsuccessful" -grpc = "68.206.160.142:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://88.198.35.12:26657" -rpc_status = "unsuccessful" -grpc = "88.198.35.12:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.109.182.72:36657" -rpc_status = "unsuccessful" -grpc = "65.109.182.72:36657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://89.149.218.95:26657" -rpc_status = "unsuccessful" -grpc = "89.149.218.95:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.209.115:26657" -rpc_status = "unsuccessful" -grpc = "65.108.209.115:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.109.92.72:26657" -rpc_status = "unsuccessful" -grpc = "65.109.92.72:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://168.119.138.109:26657" -rpc_status = "unsuccessful" -grpc = "168.119.138.109:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://10.254.254.92:26657" -rpc_status = "unsuccessful" -grpc = "10.254.254.92:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://141.95.145.63:26657" -rpc_status = "unsuccessful" -grpc = "141.95.145.63:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://173.234.26.146:27004" -rpc_status = "unsuccessful" -grpc = "173.234.26.146:27004" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://15.235.42.151:26668" -rpc_status = "unsuccessful" -grpc = "15.235.42.151:26668" -grpc_status = "unsuccessful" - -[[nodes]] -name = "OneStar" -earliest_block = 14639495 -rpc = "http://136.243.82.69:26657" -rpc_status = "successful" -grpc = "136.243.82.69:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.232.150:26657" -rpc_status = "unsuccessful" -grpc = "65.108.232.150:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://152.53.21.159:26657" -rpc_status = "unsuccessful" -grpc = "152.53.21.159:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://136.243.40.22:26657" -rpc_status = "unsuccessful" -grpc = "136.243.40.22:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "w2c0ooF1Mr" -earliest_block = 14639495 -rpc = "http://167.114.172.227:26657" -rpc_status = "successful" -grpc = "167.114.172.227:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://142.132.205.94:26657" -rpc_status = "unsuccessful" -grpc = "142.132.205.94:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://80.190.129.50:26657" -rpc_status = "unsuccessful" -grpc = "80.190.129.50:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://10.133.0.65:26657" -rpc_status = "unsuccessful" -grpc = "10.133.0.65:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.45.74:26657" -rpc_status = "unsuccessful" -grpc = "169.155.45.74:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://164.132.200.52:26657" -rpc_status = "unsuccessful" -grpc = "164.132.200.52:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://195.14.6.2:26657" -rpc_status = "unsuccessful" -grpc = "195.14.6.2:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.181.18.206:26657" -rpc_status = "unsuccessful" -grpc = "135.181.18.206:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://44.214.37.79:26657" -rpc_status = "unsuccessful" -grpc = "44.214.37.79:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.44.125:26657" -rpc_status = "unsuccessful" -grpc = "169.155.44.125:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "coinbevy" -earliest_block = 8966776 -rpc = "http://155.138.150.217:26657" -rpc_status = "successful" -grpc = "155.138.150.217:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.47.207:26657" -rpc_status = "unsuccessful" -grpc = "169.155.47.207:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://47.251.3.223:26657" -rpc_status = "unsuccessful" -grpc = "47.251.3.223:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "terra1" -earliest_block = 14639495 -rpc = "http://116.202.224.210:26657" -rpc_status = "successful" -grpc = "116.202.224.210:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://213.32.7.59:26657" -rpc_status = "unsuccessful" -grpc = "213.32.7.59:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.6.121:26677" -rpc_status = "unsuccessful" -grpc = "65.108.6.121:26677" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://185.16.39.158:26657" -rpc_status = "unsuccessful" -grpc = "185.16.39.158:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://85.244.128.10:26657" -rpc_status = "unsuccessful" -grpc = "85.244.128.10:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://47.147.226.147:38657" -rpc_status = "unsuccessful" -grpc = "47.147.226.147:38657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.46.88:26657" -rpc_status = "unsuccessful" -grpc = "169.155.46.88:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://51.103.108.114:26657" -rpc_status = "unsuccessful" -grpc = "51.103.108.114:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.74.96:26657" -rpc_status = "unsuccessful" -grpc = "65.108.74.96:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://37.122.252.18:26657" -rpc_status = "unsuccessful" -grpc = "37.122.252.18:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://185.16.39.137:26657" -rpc_status = "unsuccessful" -grpc = "185.16.39.137:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://23.224.235.122:26657" -rpc_status = "unsuccessful" -grpc = "23.224.235.122:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://5.10.19.53:26657" -rpc_status = "unsuccessful" -grpc = "5.10.19.53:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://51.83.238.114:26657" -rpc_status = "unsuccessful" -grpc = "51.83.238.114:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.109.96.173:26657" -rpc_status = "unsuccessful" -grpc = "65.109.96.173:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.21.196.250:26657" -rpc_status = "unsuccessful" -grpc = "65.21.196.250:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.46.196:26657" -rpc_status = "unsuccessful" -grpc = "169.155.46.196:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://93.115.25.15:26659" -rpc_status = "unsuccessful" -grpc = "93.115.25.15:26659" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://95.214.53.215:26657" -rpc_status = "unsuccessful" -grpc = "95.214.53.215:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://88.198.12.91:26657" -rpc_status = "unsuccessful" -grpc = "88.198.12.91:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://35.179.76.165:26657" -rpc_status = "unsuccessful" -grpc = "35.179.76.165:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://148.113.8.138:26657" -rpc_status = "unsuccessful" -grpc = "148.113.8.138:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.181.141.100:26657" -rpc_status = "unsuccessful" -grpc = "135.181.141.100:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://89.149.218.60:26657" -rpc_status = "unsuccessful" -grpc = "89.149.218.60:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://18.180.93.129:26657" -rpc_status = "unsuccessful" -grpc = "18.180.93.129:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://20.76.242.200:26657" -rpc_status = "unsuccessful" -grpc = "20.76.242.200:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://3.112.138.57:26657" -rpc_status = "unsuccessful" -grpc = "3.112.138.57:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.125.189.12:26657" -rpc_status = "unsuccessful" -grpc = "135.125.189.12:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://164.152.163.83:26657" -rpc_status = "unsuccessful" -grpc = "164.152.163.83:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://54.229.85.145:26657" -rpc_status = "unsuccessful" -grpc = "54.229.85.145:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://20.31.165.114:26657" -rpc_status = "unsuccessful" -grpc = "20.31.165.114:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://35.78.176.215:26657" -rpc_status = "unsuccessful" -grpc = "35.78.176.215:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://162.19.58.101:26657" -rpc_status = "unsuccessful" -grpc = "162.19.58.101:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://162.55.97.44:26657" -rpc_status = "unsuccessful" -grpc = "162.55.97.44:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://142.132.251.243:26657" -rpc_status = "unsuccessful" -grpc = "142.132.251.243:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://212.23.222.183:26657" -rpc_status = "unsuccessful" -grpc = "212.23.222.183:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://46.137.227.37:8000" -rpc_status = "unsuccessful" -grpc = "46.137.227.37:8000" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://23.88.0.170:26657" -rpc_status = "unsuccessful" -grpc = "23.88.0.170:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://208.181.131.107:26657" -rpc_status = "unsuccessful" -grpc = "208.181.131.107:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://3.217.47.126:26657" -rpc_status = "unsuccessful" -grpc = "3.217.47.126:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.181.2.20:36657" -rpc_status = "unsuccessful" -grpc = "135.181.2.20:36657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://54.74.229.47:26657" -rpc_status = "unsuccessful" -grpc = "54.74.229.47:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.125.67.229:26657" -rpc_status = "unsuccessful" -grpc = "135.125.67.229:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://54.218.152.11:26657" -rpc_status = "unsuccessful" -grpc = "54.218.152.11:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://74.118.136.119:26657" -rpc_status = "unsuccessful" -grpc = "74.118.136.119:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://74.80.183.130:27004" -rpc_status = "unsuccessful" -grpc = "74.80.183.130:27004" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://188.40.72.97:26657" -rpc_status = "unsuccessful" -grpc = "188.40.72.97:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://89.117.56.203:26657" -rpc_status = "unsuccessful" -grpc = "89.117.56.203:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://223.119.49.60:26657" -rpc_status = "unsuccessful" -grpc = "223.119.49.60:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://35.78.61.71:26657" -rpc_status = "unsuccessful" -grpc = "35.78.61.71:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://134.65.194.142:26657" -rpc_status = "unsuccessful" -grpc = "134.65.194.142:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://47.75.104.62:26657" -rpc_status = "unsuccessful" -grpc = "47.75.104.62:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://95.216.36.141:26657" -rpc_status = "unsuccessful" -grpc = "95.216.36.141:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://93.189.30.102:26657" -rpc_status = "unsuccessful" -grpc = "93.189.30.102:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://34.81.39.139:26657" -rpc_status = "unsuccessful" -grpc = "34.81.39.139:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://34.195.124.95:26657" -rpc_status = "unsuccessful" -grpc = "34.195.124.95:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://52.194.8.37:26657" -rpc_status = "unsuccessful" -grpc = "52.194.8.37:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.168.82:26657" -rpc_status = "unsuccessful" -grpc = "169.155.168.82:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://157.90.128.50:26657" -rpc_status = "unsuccessful" -grpc = "157.90.128.50:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://128.199.3.109:26657" -rpc_status = "unsuccessful" -grpc = "128.199.3.109:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://134.65.194.139:26657" -rpc_status = "unsuccessful" -grpc = "134.65.194.139:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://95.217.197.100:27004" -rpc_status = "unsuccessful" -grpc = "95.217.197.100:27004" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://185.181.103.140:26657" -rpc_status = "unsuccessful" -grpc = "185.181.103.140:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://134.65.192.182:26657" -rpc_status = "unsuccessful" -grpc = "134.65.192.182:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://88.198.5.137:26657" -rpc_status = "unsuccessful" -grpc = "88.198.5.137:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "test" -earliest_block = 16931401 -rpc = "https://r-terra--a1f4bb74a50728120e4f8c8054a8bb4c.gw.notionalapi.net:443" -rpc_status = "successful" -grpc = "r-terra--a1f4bb74a50728120e4f8c8054a8bb4c.gw.notionalapi.net:443" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://35.212.211.176:26657" -rpc_status = "unsuccessful" -grpc = "35.212.211.176:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://86.111.48.95:26657" -rpc_status = "unsuccessful" -grpc = "86.111.48.95:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://88.99.30.118:26657" -rpc_status = "unsuccessful" -grpc = "88.99.30.118:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://51.79.231.89:26657" -rpc_status = "unsuccessful" -grpc = "51.79.231.89:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://85.10.192.155:26657" -rpc_status = "unsuccessful" -grpc = "85.10.192.155:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://82.217.63.115:26657" -rpc_status = "unsuccessful" -grpc = "82.217.63.115:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://82.113.38.40:26657" -rpc_status = "unsuccessful" -grpc = "82.113.38.40:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://52.73.168.104:26657" -rpc_status = "unsuccessful" -grpc = "52.73.168.104:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.82.247:26657" -rpc_status = "unsuccessful" -grpc = "65.108.82.247:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://169.155.169.137:26657" -rpc_status = "unsuccessful" -grpc = "169.155.169.137:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://18.235.35.236:26657" -rpc_status = "unsuccessful" -grpc = "18.235.35.236:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://51.210.154.21:26657" -rpc_status = "unsuccessful" -grpc = "51.210.154.21:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://57.128.22.71:26657" -rpc_status = "unsuccessful" -grpc = "57.128.22.71:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://95.217.122.252:26657" -rpc_status = "unsuccessful" -grpc = "95.217.122.252:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://218.102.97.67:26657" -rpc_status = "unsuccessful" -grpc = "218.102.97.67:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://5.9.97.174:26657" -rpc_status = "unsuccessful" -grpc = "5.9.97.174:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://162.55.3.28:26657" -rpc_status = "unsuccessful" -grpc = "162.55.3.28:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://10.254.254.80:26657" -rpc_status = "unsuccessful" -grpc = "10.254.254.80:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://52.198.63.225:26657" -rpc_status = "unsuccessful" -grpc = "52.198.63.225:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://164.152.161.131:26657" -rpc_status = "unsuccessful" -grpc = "164.152.161.131:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://3.109.149.102:26657" -rpc_status = "unsuccessful" -grpc = "3.109.149.102:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://157.90.129.15:26657" -rpc_status = "unsuccessful" -grpc = "157.90.129.15:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://135.181.19.45:26657" -rpc_status = "unsuccessful" -grpc = "135.181.19.45:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://65.108.35.20:26657" -rpc_status = "unsuccessful" -grpc = "65.108.35.20:9090" -grpc_status = "successful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://162.19.18.115:26657" -rpc_status = "unsuccessful" -grpc = "162.19.18.115:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://153.139.245.106:26657" -rpc_status = "unsuccessful" -grpc = "153.139.245.106:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://46.4.78.177:26657" -rpc_status = "unsuccessful" -grpc = "46.4.78.177:9090" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://37.27.96.181:26641" -rpc_status = "unsuccessful" -grpc = "37.27.96.181:26641" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://10.254.254.84:36657" -rpc_status = "unsuccessful" -grpc = "10.254.254.84:36657" -grpc_status = "unsuccessful" - -[[nodes]] -name = "default" -earliest_block = 0 -rpc = "http://113.99.98.81:26657" -rpc_status = "unsuccessful" -grpc = "113.99.98.81:9090" -grpc_status = "unsuccessful" +total_nodes_checked = 818 successful_rpc_nodes = [ - "http://65.21.134.243:26673", - "http://136.243.88.91:1421", - "http://168.119.75.88:26657", - "http://51.222.11.146:26657", - "http://81.183.230.170:26657", - "http://136.243.82.69:26657", - "http://167.114.172.227:26657", - "http://116.202.224.210:26657", - "http://155.138.150.217:26657", - "https://r-terra--a1f4bb74a50728120e4f8c8054a8bb4c.gw.notionalapi.net:443", - "http://213.246.39.167:26657", -] - -unsuccessful_rpc_nodes = [ - "http://103.241.24.66:26657", - "http://172.255.98.36:36657", - "http://157.90.212.31:26657", - "http://103.87.94.132:26657", - "http://13.213.121.179:26657", - "http://169.155.168.155:26657", - "http://54.199.229.124:26657", - "http://142.132.193.150:26657", - "http://34.249.177.43:26657", - "http://13.209.60.161:26657", - "http://47.242.54.248:26657", - "http://178.162.165.203:26657", - "http://65.109.93.35:61657", - "http://35.161.85.155:26657", - "http://212.32.245.96:26657", - "http://34.87.32.135:26657", - "http://103.234.71.245:26657", - "http://65.108.97.229:26657", - "http://89.149.218.95:26657", - "http://65.108.209.115:26657", - "http://65.109.92.72:26657", - "http://168.119.138.109:26657", - "http://10.254.254.92:26657", - "http://68.206.160.142:26657", - "http://88.198.35.12:26657", - "http://65.109.182.72:36657", - "http://141.95.145.63:26657", - "http://173.234.26.146:27004", - "http://15.235.42.151:26668", - "http://65.108.232.150:26657", - "http://152.53.21.159:26657", - "http://136.243.40.22:26657", - "http://10.133.0.65:26657", - "http://142.132.205.94:26657", - "http://80.190.129.50:26657", - "http://135.181.18.206:26657", - "http://44.214.37.79:26657", - "http://169.155.44.125:26657", - "http://169.155.45.74:26657", - "http://164.132.200.52:26657", - "http://195.14.6.2:26657", - "http://169.155.47.207:26657", - "http://47.251.3.223:26657", - "http://85.244.128.10:26657", - "http://47.147.226.147:38657", - "http://169.155.46.88:26657", - "http://213.32.7.59:26657", - "http://65.108.6.121:26677", - "http://185.16.39.158:26657", - "http://185.16.39.137:26657", - "http://23.224.235.122:26657", - "http://5.10.19.53:26657", - "http://51.83.238.114:26657", - "http://51.103.108.114:26657", - "http://65.108.74.96:26657", - "http://37.122.252.18:26657", - "http://65.21.196.250:26657", - "http://65.109.96.173:26657", - "http://88.198.12.91:26657", - "http://35.179.76.165:26657", - "http://169.155.46.196:26657", - "http://93.115.25.15:26659", - "http://95.214.53.215:26657", - "http://18.180.93.129:26657", - "http://20.76.242.200:26657", - "http://3.112.138.57:26657", - "http://135.125.189.12:26657", - "http://164.152.163.83:26657", - "http://148.113.8.138:26657", - "http://135.181.141.100:26657", - "http://89.149.218.60:26657", - "http://20.31.165.114:26657", - "http://54.229.85.145:26657", - "http://142.132.251.243:26657", - "http://212.23.222.183:26657", - "http://46.137.227.37:8000", - "http://35.78.176.215:26657", - "http://162.19.58.101:26657", - "http://162.55.97.44:26657", - "http://135.181.2.20:36657", - "http://23.88.0.170:26657", - "http://208.181.131.107:26657", - "http://3.217.47.126:26657", - "http://135.125.67.229:26657", - "http://54.74.229.47:26657", - "http://74.118.136.119:26657", - "http://54.218.152.11:26657", - "http://223.119.49.60:26657", - "http://35.78.61.71:26657", - "http://134.65.194.142:26657", - "http://74.80.183.130:27004", - "http://188.40.72.97:26657", - "http://89.117.56.203:26657", - "http://34.81.39.139:26657", - "http://34.195.124.95:26657", - "http://52.194.8.37:26657", - "http://169.155.168.82:26657", - "http://47.75.104.62:26657", - "http://95.216.36.141:26657", - "http://93.189.30.102:26657", - "http://95.217.197.100:27004", - "http://185.181.103.140:26657", - "http://134.65.192.182:26657", - "http://88.198.5.137:26657", - "http://157.90.128.50:26657", - "http://128.199.3.109:26657", - "http://134.65.194.139:26657", - "http://86.111.48.95:26657", - "http://35.212.211.176:26657", - "http://82.217.63.115:26657", - "http://82.113.38.40:26657", - "http://52.73.168.104:26657", - "http://65.108.82.247:26657", - "http://169.155.169.137:26657", - "http://88.99.30.118:26657", - "http://51.79.231.89:26657", - "http://85.10.192.155:26657", - "http://18.235.35.236:26657", - "http://57.128.22.71:26657", - "http://51.210.154.21:26657", - "http://162.55.3.28:26657", - "http://10.254.254.80:26657", - "http://95.217.122.252:26657", - "http://218.102.97.67:26657", - "http://5.9.97.174:26657", - "http://3.109.149.102:26657", - "http://52.198.63.225:26657", - "http://164.152.161.131:26657", - "http://162.19.18.115:26657", - "http://153.139.245.106:26657", - "http://46.4.78.177:26657", - "http://37.27.96.181:26641", - "http://10.254.254.84:36657", - "http://157.90.129.15:26657", - "http://135.181.19.45:26657", - "http://65.108.35.20:26657", - "http://113.99.98.81:26657", - "http://51.222.10.128:26657", - "http://23.88.66.187:26657", - "http://18.183.203.5:26657", - "http://65.109.106.164:26657", - "http://195.201.63.87:26657", - "http://54.199.153.43:26657", -] - -successful_grpc_nodes = [ - "http://103.241.24.66:26657", - "http://88.99.30.118:26657", - "http://65.108.35.20:26657", - "http://167.114.172.227:26657", - "http://136.243.82.69:26657", - "http://51.222.10.128:26657", - "http://157.90.129.15:26657", - "http://51.79.231.89:26657", - "http://135.181.19.45:26657", - "http://164.132.200.52:26657", - "http://95.217.122.252:26657", - "http://213.246.39.167:26657", -] - -unsuccessful_grpc_nodes = [ - "http://65.109.96.173:26657", - "http://54.199.153.43:26657", - "http://169.155.168.155:26657", - "http://157.90.212.31:26657", - "http://169.155.168.82:26657", - "http://142.132.205.94:26657", - "http://23.88.66.187:26657", - "http://18.180.93.129:26657", - "http://169.155.46.88:26657", - "http://135.181.2.20:36657", - "http://213.32.7.59:26657", - "http://188.40.72.97:26657", - "http://20.31.165.114:26657", - "http://103.234.71.245:26657", - "http://35.78.61.71:26657", - "http://10.133.0.65:26657", - "http://5.9.97.174:26657", - "http://162.55.97.44:26657", - "http://65.108.74.96:26657", - "http://136.243.88.91:1421", - "http://85.244.128.10:26657", - "http://89.117.56.203:26657", - "http://65.109.182.72:36657", - "http://208.181.131.107:26657", - "http://88.198.5.137:26657", - "http://141.95.145.63:26657", - "http://10.254.254.92:26657", - "http://169.155.46.196:26657", - "http://54.74.229.47:26657", - "http://51.222.11.146:26657", - "http://81.183.230.170:26657", - "http://10.254.254.80:26657", - "http://65.108.209.115:26657", - "http://116.202.224.210:26657", - "http://57.128.22.71:26657", - "http://65.109.93.35:61657", - "http://47.75.104.62:26657", - "http://47.242.54.248:26657", - "http://155.138.150.217:26657", - "http://212.23.222.183:26657", - "http://173.234.26.146:27004", - "http://93.115.25.15:26659", - "http://18.183.203.5:26657", - "http://162.55.3.28:26657", - "http://218.102.97.67:26657", - "http://136.243.40.22:26657", - "http://168.119.138.109:26657", - "http://185.16.39.137:26657", - "http://44.214.37.79:26657", - "http://65.21.134.243:26673", - "http://135.125.67.229:26657", - "http://23.88.0.170:26657", - "http://95.214.53.215:26657", - "http://52.73.168.104:26657", - "http://54.229.85.145:26657", - "http://89.149.218.60:26657", - "http://35.179.76.165:26657", - "http://135.125.189.12:26657", - "http://88.198.12.91:26657", - "http://172.255.98.36:36657", - "http://153.139.245.106:26657", - "http://15.235.42.151:26668", - "http://3.217.47.126:26657", - "http://162.19.18.115:26657", - "http://195.14.6.2:26657", - "http://68.206.160.142:26657", - "http://34.249.177.43:26657", - "http://80.190.129.50:26657", - "http://34.195.124.95:26657", - "http://52.194.8.37:26657", - "http://103.87.94.132:26657", - "http://134.65.192.182:26657", - "http://3.109.149.102:26657", - "http://65.108.97.229:26657", - "http://169.155.44.125:26657", - "http://168.119.75.88:26657", - "http://74.80.183.130:27004", - "http://46.137.227.37:8000", - "http://18.235.35.236:26657", - "http://65.109.106.164:26657", - "http://51.83.238.114:26657", - "http://65.108.6.121:26677", - "http://135.181.18.206:26657", - "http://82.113.38.40:26657", - "http://134.65.194.142:26657", - "http://35.161.85.155:26657", - "http://169.155.169.137:26657", - "http://134.65.194.139:26657", - "http://95.216.36.141:26657", - "http://34.81.39.139:26657", - "http://51.210.154.21:26657", - "http://113.99.98.81:26657", - "https://r-terra--a1f4bb74a50728120e4f8c8054a8bb4c.gw.notionalapi.net:443", - "http://148.113.8.138:26657", - "http://152.53.21.159:26657", - "http://54.199.229.124:26657", - "http://3.112.138.57:26657", - "http://13.213.121.179:26657", - "http://65.21.196.250:26657", - "http://128.199.3.109:26657", - "http://169.155.47.207:26657", - "http://46.4.78.177:26657", - "http://185.181.103.140:26657", - "http://212.32.245.96:26657", - "http://95.217.197.100:27004", - "http://65.108.232.150:26657", - "http://85.10.192.155:26657", - "http://195.201.63.87:26657", - "http://35.78.176.215:26657", - "http://162.19.58.101:26657", - "http://47.251.3.223:26657", - "http://93.189.30.102:26657", - "http://54.218.152.11:26657", - "http://142.132.251.243:26657", - "http://34.87.32.135:26657", - "http://47.147.226.147:38657", - "http://157.90.128.50:26657", - "http://88.198.35.12:26657", - "http://89.149.218.95:26657", - "http://185.16.39.158:26657", - "http://23.224.235.122:26657", - "http://5.10.19.53:26657", - "http://82.217.63.115:26657", - "http://20.76.242.200:26657", - "http://51.103.108.114:26657", - "http://37.27.96.181:26641", - "http://164.152.163.83:26657", - "http://169.155.45.74:26657", - "http://135.181.141.100:26657", - "http://74.118.136.119:26657", - "http://142.132.193.150:26657", - "http://13.209.60.161:26657", - "http://86.111.48.95:26657", - "http://37.122.252.18:26657", - "http://65.108.82.247:26657", - "http://52.198.63.225:26657", - "http://164.152.161.131:26657", - "http://10.254.254.84:36657", - "http://178.162.165.203:26657", - "http://65.109.92.72:26657", - "http://35.212.211.176:26657", - "http://223.119.49.60:26657", -] - -successful_api_nodes = [ -] - -unsuccessful_api_nodes = [ + "http://37.120.245.32:26657", + "https://rpc-celestia-ia.cosmosia.notional.ventures:443", + "http://176.9.10.245:26657", + "http://167.235.114.157:26657", + "http://46.166.170.207:26657", + "http://185.182.186.202:26657", + "http://159.203.143.94:26657", + "http://221.149.114.194:26657", ]