diff --git a/.github/workflows/go-mod-tidy.yml b/.github/workflows/go-mod-tidy.yml new file mode 100644 index 0000000000..4f1340c4d2 --- /dev/null +++ b/.github/workflows/go-mod-tidy.yml @@ -0,0 +1,43 @@ +name: Go mod tidy + +on: + pull_request: + branches: [develop] + +jobs: + build: + name: run go mod tidy + runs-on: ubuntu-latest + # don't run on PRs from forks (it will fail because secrets won't be available), run only on renovate bot PRs + if: github.actor == 'renovate[bot]' + steps: + - name: Set up Go 1.x + uses: actions/setup-go@v4 + with: + go-version: "1.20" + id: go + + - name: Generate token # generate a token to trigger the rest of the CI tasks... https://github.com/tibdex/github-app-token + id: generate_token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.IOTA_GH_APP_ID }} + private_key: ${{ secrets.IOTA_GH_APP_PRIVATE_KEY }} + + - name: Check out code into the Go module directory + uses: actions/checkout@v3 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + token: ${{ steps.generate_token.outputs.token }} + + - name: Run go mod tidy script + run: ./scripts/go_mod_tidy.sh + + - name: Commit changes + uses: EndBug/add-and-commit@v9 + with: + author_name: GitHub Actions + committer_email: actions@github.com + message: "go mod tidy" + add: "." diff --git a/.github/workflows/heavy-tests.yml b/.github/workflows/heavy-tests.yml index db70bc7eda..1fef0dbd95 100644 --- a/.github/workflows/heavy-tests.yml +++ b/.github/workflows/heavy-tests.yml @@ -33,7 +33,7 @@ jobs: args: --timeout 10m0s skip-pkg-cache: true - - name: Run golangci-lint on wasp-cli + - name: Run golangci-lint on wasp-cli uses: golangci/golangci-lint-action@v3 with: working-directory: tools/wasp-cli diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1de48458bd..dfc7255c35 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: retention-days: 1 - name: Set up Node - uses: actions/setup-node@v3.6.0 + uses: actions/setup-node@v3.7.0 with: node-version: '14' diff --git a/components/chains/component.go b/components/chains/component.go index fe6c6ab3c3..2bbd8eccef 100644 --- a/components/chains/component.go +++ b/components/chains/component.go @@ -101,6 +101,7 @@ func provide(c *dig.Container) error { deps.NetworkProvider, deps.TrustedNetworkManager, deps.ChainStateDatabaseManager.ChainStateKVStore, + ParamsWAL.LoadToStore, ParamsWAL.Enabled, ParamsWAL.Path, ParamsStateManager.BlockCacheMaxSize, @@ -111,6 +112,10 @@ func provide(c *dig.Container) error { ParamsStateManager.StateManagerTimerTickPeriod, ParamsStateManager.PruningMinStatesToKeep, ParamsStateManager.PruningMaxStatesToDelete, + ParamsSnapshotManager.Period, + ParamsSnapshotManager.LocalPath, + ParamsSnapshotManager.NetworkPaths, + ParamsSnapshotManager.UpdatePeriod, deps.ChainRecordRegistryProvider, deps.DKShareRegistryProvider, deps.NodeIdentityProvider, diff --git a/components/chains/params.go b/components/chains/params.go index 9543a77bb0..3263316c58 100644 --- a/components/chains/params.go +++ b/components/chains/params.go @@ -17,8 +17,9 @@ type ParametersChains struct { } type ParametersWAL struct { - Enabled bool `default:"true" usage:"whether the \"write-ahead logging\" is enabled"` - Path string `default:"waspdb/wal" usage:"the path to the \"write-ahead logging\" folder"` + LoadToStore bool `default:"false" usage:"load blocks from \"write-ahead log\" to the store on node start-up"` + Enabled bool `default:"true" usage:"whether the \"write-ahead logging\" is enabled"` + Path string `default:"waspdb/wal" usage:"the path to the \"write-ahead logging\" folder"` } type ParametersValidator struct { @@ -36,11 +37,19 @@ type ParametersStateManager struct { PruningMaxStatesToDelete int `default:"1000" usage:"on single store pruning attempt at most this number of states will be deleted"` } +type ParametersSnapshotManager struct { + Period uint32 `default:"0" usage:"how often state snapshots should be made: 1000 meaning \"every 1000th state\", 0 meaning \"making snapshots is disabled\""` + LocalPath string `default:"waspdb/snap" usage:"the path to the snapshots folder in this node's disk"` + NetworkPaths []string `default:"" usage:"the list of paths to the remote (http(s)) snapshot locations; each of listed locations must contain 'INDEX' file with list of snapshot files"` + UpdatePeriod time.Duration `default:"5m" usage:"how often known snapshots list should be updated"` +} + var ( - ParamsChains = &ParametersChains{} - ParamsWAL = &ParametersWAL{} - ParamsValidator = &ParametersValidator{} - ParamsStateManager = &ParametersStateManager{} + ParamsChains = &ParametersChains{} + ParamsWAL = &ParametersWAL{} + ParamsValidator = &ParametersValidator{} + ParamsStateManager = &ParametersStateManager{} + ParamsSnapshotManager = &ParametersSnapshotManager{} ) var params = &app.ComponentParams{ @@ -49,6 +58,7 @@ var params = &app.ComponentParams{ "wal": ParamsWAL, "validator": ParamsValidator, "stateManager": ParamsStateManager, + "snapshots": ParamsSnapshotManager, }, Masked: nil, } diff --git a/contracts/wasm/fairroulette/frontend/src/lib/fairroulette_client/readme.md b/contracts/wasm/fairroulette/frontend/src/lib/fairroulette_client/readme.md index 3f9b774adc..abde10f88c 100644 --- a/contracts/wasm/fairroulette/frontend/src/lib/fairroulette_client/readme.md +++ b/contracts/wasm/fairroulette/frontend/src/lib/fairroulette_client/readme.md @@ -1,6 +1,6 @@ This is the actual client to interact with the fairroulette smart contract. -It uses the wasp_client library for the low level interaction. In the future, this won't be nessecary, +It uses the wasp_client library for the low level interaction. In the future, this won't be necessary, as we will provide an external library at some point. diff --git a/contracts/wasm/fairroulette/frontend/src/lib/wasp_client/binary_models/IOffLedger.ts b/contracts/wasm/fairroulette/frontend/src/lib/wasp_client/binary_models/IOffLedger.ts index 35e52b1fcb..a065ffc4e4 100644 --- a/contracts/wasm/fairroulette/frontend/src/lib/wasp_client/binary_models/IOffLedger.ts +++ b/contracts/wasm/fairroulette/frontend/src/lib/wasp_client/binary_models/IOffLedger.ts @@ -19,7 +19,7 @@ export interface IOffLedger { nonce: bigint; balances: Balance[]; - // Public Key and Signature will get set in the Sign function, so no inital set is required + // Public Key and Signature will get set in the Sign function, so no initial set is required publicKey?: Buffer; signature?: Buffer; } diff --git a/contracts/wasm/testcore/rs/testcoreimpl/src/funcs.rs b/contracts/wasm/testcore/rs/testcoreimpl/src/funcs.rs index b2e3179e5e..addc5fbf71 100644 --- a/contracts/wasm/testcore/rs/testcoreimpl/src/funcs.rs +++ b/contracts/wasm/testcore/rs/testcoreimpl/src/funcs.rs @@ -25,27 +25,38 @@ pub fn func_call_on_chain(ctx: &ScFuncContext, f: &CallOnChainContext) { } let counter = f.state.counter(); - ctx.log(&format!("call depth = {}, hnameContract = {}, hnameEP = {}, counter = {}", - &f.params.n().to_string(), - &hname_contract.to_string(), - &hname_ep.to_string(), - &counter.to_string())); + ctx.log(&format!( + "call depth = {}, hnameContract = {}, hnameEP = {}, counter = {}", + &f.params.n().to_string(), + &hname_contract.to_string(), + &hname_ep.to_string(), + &counter.to_string() + )); counter.set_value(counter.value() + 1); - let parms = ScDict::new(&[]); + let params = ScDict::new(&[]); let key = string_to_bytes(PARAM_N); - parms.set(&key, &uint64_to_bytes(param_int)); - let ret = ctx.call(hname_contract, hname_ep, Some(parms), None); + params.set(&key, &uint64_to_bytes(param_int)); + let ret = ctx.call(hname_contract, hname_ep, Some(params), None); let ret_val = uint64_from_bytes(&ret.get(&key)); f.results.n().set_value(ret_val); } pub fn func_check_context_from_full_ep(ctx: &ScFuncContext, f: &CheckContextFromFullEPContext) { - ctx.require(f.params.agent_id().value() == ctx.account_id(), "fail: agentID"); + ctx.require( + f.params.agent_id().value() == ctx.account_id(), + "fail: agentID", + ); ctx.require(f.params.caller().value() == ctx.caller(), "fail: caller"); - ctx.require(f.params.chain_id().value() == ctx.current_chain_id(), "fail: chainID"); - ctx.require(f.params.chain_owner_id().value() == ctx.chain_owner_id(), "fail: chainOwnerID"); + ctx.require( + f.params.chain_id().value() == ctx.current_chain_id(), + "fail: chainID", + ); + ctx.require( + f.params.chain_owner_id().value() == ctx.chain_owner_id(), + "fail: chainOwnerID", + ); } pub fn func_claim_allowance(ctx: &ScFuncContext, _f: &ClaimAllowanceContext) { @@ -58,7 +69,10 @@ pub fn func_do_nothing(ctx: &ScFuncContext, _f: &DoNothingContext) { ctx.log("doing nothing..."); } -pub fn func_estimate_min_storage_deposit(ctx: &ScFuncContext, _f: &EstimateMinStorageDepositContext) { +pub fn func_estimate_min_storage_deposit( + ctx: &ScFuncContext, + _f: &EstimateMinStorageDepositContext, +) { let provided = ctx.allowance().base_tokens(); let dummy = ScFuncs::estimate_min_storage_deposit(ctx); let required = ctx.estimate_storage_deposit(&dummy.func); @@ -89,13 +103,19 @@ pub fn func_pass_types_full(ctx: &ScFuncContext, f: &PassTypesFullContext) { ctx.require(f.params.int64_zero().value() == 0, "int64-0 wrong"); ctx.require(f.params.string().value() == PARAM_STRING, "string wrong"); ctx.require(f.params.string_zero().value() == "", "string-0 wrong"); - ctx.require(f.params.hname().value() == ScHname::new(PARAM_HNAME), "Hname wrong"); + ctx.require( + f.params.hname().value() == ScHname::new(PARAM_HNAME), + "Hname wrong", + ); ctx.require(f.params.hname_zero().value() == ScHname(0), "Hname-0 wrong"); } pub fn func_ping_allowance_back(ctx: &ScFuncContext, _f: &PingAllowanceBackContext) { let caller = ctx.caller(); - ctx.require(caller.is_address(), "pingAllowanceBack: caller expected to be a L1 address"); + ctx.require( + caller.is_address(), + "pingAllowanceBack: caller expected to be a L1 address", + ); let transfer = wasmlib::ScTransfer::from_balances(&ctx.allowance()); ctx.transfer_allowed(&ctx.account_id(), &transfer); ctx.send(&caller.address(), &transfer); @@ -109,7 +129,10 @@ pub fn func_run_recursion(ctx: &ScFuncContext, f: &RunRecursionContext) { let call_on_chain = ScFuncs::call_on_chain(ctx); call_on_chain.params.n().set_value(depth - 1); - call_on_chain.params.hname_ep().set_value(HFUNC_RUN_RECURSION); + call_on_chain + .params + .hname_ep() + .set_value(HFUNC_RUN_RECURSION); call_on_chain.func.call(); let ret_val = call_on_chain.results.n().value(); f.results.n().set_value(ret_val); @@ -134,7 +157,10 @@ pub fn func_send_to_address(_ctx: &ScFuncContext, _f: &SendToAddressContext) { } pub fn func_set_int(_ctx: &ScFuncContext, f: &SetIntContext) { - f.state.ints().get_int64(&f.params.name().value()).set_value(f.params.int_value().value()); + f.state + .ints() + .get_int64(&f.params.name().value()) + .set_value(f.params.int_value().value()); } pub fn func_spawn(ctx: &ScFuncContext, f: &SpawnContext) { @@ -189,7 +215,10 @@ pub fn func_test_call_panic_full_ep(ctx: &ScFuncContext, _f: &TestCallPanicFullE ScFuncs::test_panic_full_ep(ctx).func.call(); } -pub fn func_test_call_panic_view_ep_from_full(ctx: &ScFuncContext, _f: &TestCallPanicViewEPFromFullContext) { +pub fn func_test_call_panic_view_ep_from_full( + ctx: &ScFuncContext, + _f: &TestCallPanicViewEPFromFullContext, +) { ScFuncs::test_panic_view_ep(ctx).func.call(); } @@ -242,15 +271,25 @@ pub fn func_withdraw_from_chain(ctx: &ScFuncContext, f: &WithdrawFromChainContex // NOTE: make sure you READ THE DOCS before calling this function let xfer = coreaccounts::ScFuncs::transfer_account_to_chain(ctx); xfer.params.gas_reserve().set_value(gas_reserve); - xfer.func.transfer_base_tokens(storage_deposit + gas_fee + gas_reserve). - allowance_base_tokens(withdrawal + storage_deposit + gas_reserve). - post_to_chain(target_chain); + xfer.func + .transfer_base_tokens(storage_deposit + gas_fee + gas_reserve) + .allowance_base_tokens(withdrawal + storage_deposit + gas_reserve) + .post_to_chain(target_chain); } pub fn view_check_context_from_view_ep(ctx: &ScViewContext, f: &CheckContextFromViewEPContext) { - ctx.require(f.params.agent_id().value() == ctx.account_id(), "fail: agentID"); - ctx.require(f.params.chain_id().value() == ctx.current_chain_id(), "fail: chainID"); - ctx.require(f.params.chain_owner_id().value() == ctx.chain_owner_id(), "fail: chainOwnerID"); + ctx.require( + f.params.agent_id().value() == ctx.account_id(), + "fail: agentID", + ); + ctx.require( + f.params.chain_id().value() == ctx.current_chain_id(), + "fail: chainID", + ); + ctx.require( + f.params.chain_owner_id().value() == ctx.chain_owner_id(), + "fail: chainOwnerID", + ); } fn fibonacci(n: u64) -> u64 { @@ -292,7 +331,10 @@ pub fn view_get_counter(_ctx: &ScViewContext, f: &GetCounterContext) { pub fn view_get_int(ctx: &ScViewContext, f: &GetIntContext) { let name = f.params.name().value(); let value = f.state.ints().get_int64(&name); - ctx.require(value.exists(), &("param '".to_string() + &name + "' not found")); + ctx.require( + value.exists(), + &("param '".to_string() + &name + "' not found"), + ); f.results.values().get_int64(&name).set_value(value.value()); } @@ -317,11 +359,17 @@ pub fn view_pass_types_view(ctx: &ScViewContext, f: &PassTypesViewContext) { ctx.require(f.params.int64_zero().value() == 0, "int64-0 wrong"); ctx.require(f.params.string().value() == PARAM_STRING, "string wrong"); ctx.require(f.params.string_zero().value() == "", "string-0 wrong"); - ctx.require(f.params.hname().value() == ScHname::new(PARAM_HNAME), "Hname wrong"); + ctx.require( + f.params.hname().value() == ScHname::new(PARAM_HNAME), + "Hname wrong", + ); ctx.require(f.params.hname_zero().value() == ScHname(0), "Hname-0 wrong"); } -pub fn view_test_call_panic_view_ep_from_view(ctx: &ScViewContext, _f: &TestCallPanicViewEPFromViewContext) { +pub fn view_test_call_panic_view_ep_from_view( + ctx: &ScViewContext, + _f: &TestCallPanicViewEPFromViewContext, +) { ScFuncs::test_panic_view_ep(ctx).func.call(); } @@ -336,5 +384,7 @@ pub fn view_test_panic_view_ep(ctx: &ScViewContext, _f: &TestPanicViewEPContext) pub fn view_test_sandbox_call(ctx: &ScViewContext, f: &TestSandboxCallContext) { let get_chain_info = coregovernance::ScFuncs::get_chain_info(ctx); get_chain_info.func.call(); - f.results.sandbox_call().set_value(&get_chain_info.results.chain_id().value().to_string()); + f.results + .sandbox_call() + .set_value(&get_chain_info.results.chain_id().value().to_string()); } diff --git a/go.mod b/go.mod index 3971be763d..a5e4e04515 100644 --- a/go.mod +++ b/go.mod @@ -14,20 +14,21 @@ require ( github.com/bytecodealliance/wasmtime-go/v9 v9.0.0 github.com/dgraph-io/ristretto v0.1.1 github.com/dgryski/go-clockpro v0.0.0-20140817124034-edc6d3eeb96e + github.com/dustin/go-humanize v1.0.1 github.com/ethereum/go-ethereum v1.12.0 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/hashicorp/golang-lru/v2 v2.0.4 - github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 - github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 + github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 + github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a github.com/iotaledger/inx/go v1.0.0-rc.2 github.com/iotaledger/iota.go/v3 v3.0.0-rc.3 @@ -35,13 +36,13 @@ require ( github.com/labstack/echo/v4 v4.10.2 github.com/labstack/gommon v0.4.0 github.com/libp2p/go-libp2p v0.28.0 - github.com/multiformats/go-multiaddr v0.9.0 + github.com/multiformats/go-multiaddr v0.10.1 github.com/pangpanglabs/echoswagger/v2 v2.4.1 github.com/pingcap/go-ycsb v1.0.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 github.com/samber/lo v1.38.1 - github.com/second-state/WasmEdge-go v0.12.0 + github.com/second-state/WasmEdge-go v0.12.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.4 github.com/wasmerio/wasmer-go v1.0.4 @@ -49,9 +50,9 @@ require ( go.uber.org/atomic v1.11.0 go.uber.org/dig v1.17.0 go.uber.org/zap v1.24.0 - golang.org/x/crypto v0.10.0 - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/net v0.11.0 + golang.org/x/crypto v0.11.0 + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb + golang.org/x/net v0.12.0 gopkg.in/yaml.v3 v3.0.1 nhooyr.io/websocket v1.8.7 pgregory.net/rapid v1.0.0 @@ -64,10 +65,10 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b // indirect - github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -75,7 +76,6 @@ require ( github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect github.com/eclipse/paho.mqtt.golang v1.4.2 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/fatih/structs v1.1.0 // indirect @@ -84,7 +84,7 @@ require ( github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gammazero/deque v0.2.1 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.22.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect @@ -109,7 +109,7 @@ require ( github.com/huin/goupnp v1.2.0 // indirect github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 // indirect - github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 // indirect + github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 // indirect github.com/iotaledger/iota.go v1.0.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect @@ -161,8 +161,8 @@ require ( github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect @@ -175,11 +175,11 @@ require ( github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/status-im/keycard-go v0.2.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e // indirect @@ -194,10 +194,10 @@ require ( go.dedis.ch/protobuf v1.0.11 // indirect go.uber.org/fx v1.19.2 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/mod v0.10.0 // indirect + golang.org/x/mod v0.11.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.1 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/go.sum b/go.sum index 1a2d451288..98ed7e3f5f 100644 --- a/go.sum +++ b/go.sum @@ -11,18 +11,13 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/Yiling-J/theine-go v0.3.1 h1:pNrTp2s/ytpqY7JdzjL9GrzeJOqjvHHqumRiphUAiFU= github.com/Yiling-J/theine-go v0.3.1/go.mod h1:9HtlXa6gjwnqdhqW0R/0BDHxGF4CNmZdVBiv6BdISOw= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= 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= @@ -33,7 +28,6 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -47,7 +41,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72H github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -78,31 +71,23 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b h1:92ve6F1Pls/eqd+V+102lOMRJatgpqqsQvbT9Bl/fjg= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= @@ -118,7 +103,6 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -135,7 +119,6 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= @@ -144,8 +127,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -156,28 +137,23 @@ github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0= github.com/gammazero/deque v0.2.1/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.22.0 h1:XNX9zKbv7baSEI65l+H1GEJgSeIC1c7EN5kluWaP6dM= +github.com/getsentry/sentry-go v0.22.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -188,7 +164,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -217,14 +192,10 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= @@ -257,7 +228,6 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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= @@ -324,7 +294,6 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -350,39 +319,36 @@ github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/iotaledger/go-ethereum v1.12.0-wasp h1:rBMzSLRi+0WReEO5eYmm47fR+/2/GCmm0YUjoTalFro= github.com/iotaledger/go-ethereum v1.12.0-wasp/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PTNgli6EbS4tV9qu3QAm/kBU3XaYZV2xdzys= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 h1:vdVG068l2cDUuyUSrdKRG9IZOSii74t5iWyrwfr0utc= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 h1:cADhnifbOeGuGZfAw+QYq1DdRYSWxOQpq3fRzhN3aaE= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 h1:oXs44XoTd5IK6qy1Mcu/O607FGqH52RIAiCNBSExizA= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 h1:r0jnucfIUmtk1+y0gpWCga0z2XVHuxaWIZOr8m+2E28= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 h1:Qhgbik2YYYLik1AAb9newLNRvO3XMhdj1FOe1wHho0U= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 h1:mAifrfqpzx4AGvvdr7yEJ3GQUmEjUBlkzVoLk6+79Bc= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 h1:50uDxTKB/HWMhAhzognCBoY+xf4pOEKNaznoIqc2D1g= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 h1:apDCJqkZ+GMR7Cui5nycKD18+ykKagXCMakAAoGBt6U= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 h1:yZH3ZhwbUlmefsY4WjOuSHIGIxZVUEHcGbe24rvwa+Y= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 h1:AF3u8en9xETBK14nByOFrk7rY1aRJBzlGo+8k9VqEIQ= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 h1:JWv+DePobyjR5K1tzE2w7bs79WzBLMuxYLIFC3idPvA= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 h1:c6WCBtoUI4hBHxx9wnAqHjiCBiNsTE5mOUq+bZN0X1E= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 h1:ywzdfG6X522zHDdMp4gFYyr4MXnPk5tN99MtdCEhumM= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 h1:GhlFUSZeNSpjA3+myBOJu04W2BKWaKvjJjqfunBA+Zg= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 h1:x0z1qd3CjuIw/sXmpkOwIWQUcsxBBpBSWgfAhahQiw8= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 h1:Zs3fuwTj4dvSVhBou8gm4CCTMsvdwnb/8B0I9ICDUPA= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 h1:N5teZ9ixsjyfGWlXNWg+/dxG0lkmNiqILvDrAa9SQos= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 h1:EMsp6JeHdpYYj632wkCxrXaL1ZffY53aqfDtYe9XzvE= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 h1:M66OueWagjBATFWGzBjIY6mN8bi2M9Aaiu8+7j4jaXE= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 h1:jiQzzYPHqDNleU5tLpKHETF39rUdabs8dgHbrtJ1urM= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 h1:khNJmmG8ZOOR3Qx7iaSEHkL+4y3oseznnxz9GK1xUuM= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 h1:YK/dRP8Z2vmX+SOAuBVS99WU3zH1t5qaAB1Bj7/PFOc= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 h1:NmmRkAKLBIOjlT1tEF2NbPvzCawOr1Lgm99k1+ElZKM= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 h1:T9Wg7bMu8NWoVDyVoPXFVvVF4OE4ZNybs3pSObffn3U= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a h1:mVYBXnSSVl9xRxzZReRdRQN43gUz3IMOxb+IEMQFTp4= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a/go.mod h1:9AA+oDJv4WGM0YdDm7Lh24XK5O9Jd9SPw3ApMJSSv7k= github.com/iotaledger/inx/go v1.0.0-rc.2 h1:SjHGHQ1pEe7/B0bnVIHCa1zQBvcC0QRwcYPzUGarrJU= @@ -397,11 +363,6 @@ github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= @@ -418,26 +379,16 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93 h1:gb2I60XsNkyYmPd7PyeCkUMaFfoFuv3C4SlXlO1STHM= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= @@ -450,7 +401,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 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= @@ -463,7 +413,6 @@ github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8c github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= github.com/labstack/echo/v4 v4.1.13/go.mod h1:3WZNypykZ3tnqpF2Qb4fPg27XDunFqgP3HGDmCMgv7U= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= @@ -502,12 +451,10 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 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.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -520,13 +467,10 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= @@ -564,7 +508,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -574,8 +517,8 @@ github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= -github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= +github.com/multiformats/go-multiaddr v0.10.1 h1:HghtFrWyZEPrpTvgAMFJi6gFdgHfs2cb0pyfDsk+lqU= +github.com/multiformats/go-multiaddr v0.10.1/go.mod h1:jLEZsA61rwWNZQTHHnqq2HNa+4os/Hz54eqiRnsRqYQ= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= @@ -594,10 +537,6 @@ github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/n github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/ncw/directio v1.0.5 h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4= github.com/ncw/directio v1.0.5/go.mod h1:rX/pKEYkOXBGOggmcyJeJGloCkleSvphPx2eV3t6ROk= @@ -612,7 +551,6 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/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.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -635,17 +573,15 @@ github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c h1:Gcce/r5tSQeprxs github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c/go.mod h1:1iCZ0433JJMecYqCa+TdWA9Pax8MGl4ByuNDZ7eSnQY= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= 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/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= github.com/pingcap/go-ycsb v1.0.1 h1:OGIUjQjtC22KDHPCqg4+ScWYFZrHQjJnt3Gmf4N8UOw= @@ -702,11 +638,9 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +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.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= @@ -719,10 +653,9 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= 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/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/second-state/WasmEdge-go v0.12.0 h1:CJFH/rwZMXIX/UeX4CRUzbcTUlXJfFNZTm3wiZ0Ck+8= -github.com/second-state/WasmEdge-go v0.12.0/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= +github.com/second-state/WasmEdge-go v0.12.1 h1:rIRiRF35+8CtcYTsiW4KfFNIh3faRb3LoG2c7cCqQyI= +github.com/second-state/WasmEdge-go v0.12.1/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -753,23 +686,15 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= 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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -785,7 +710,7 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -800,40 +725,27 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.17.2-0.20221006022127-8f469abc00aa h1:5SqCsI/2Qya2bCzK15ozrqo2sZxkh0FHynJZOTVoV6Q= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= github.com/wasmerio/wasmer-go v1.0.4/go.mod h1:0gzVdSfg6pysA6QVp6iVRPTagC6Wq9pOE8J86WKb2Fk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -874,12 +786,10 @@ go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1 golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -887,12 +797,11 @@ golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +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-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -904,25 +813,21 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +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-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181220203305-927f97764cc3/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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -937,9 +842,8 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -964,7 +868,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -973,7 +876,6 @@ golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1000,24 +902,20 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1026,26 +924,21 @@ 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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/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-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1056,7 +949,6 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= @@ -1073,7 +965,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1085,10 +976,8 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG 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-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1122,15 +1011,10 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= @@ -1146,7 +1030,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/packages/chain/cmt_log/var_localview.go b/packages/chain/cmt_log/var_localview.go index c1e6767f9e..13395e64af 100644 --- a/packages/chain/cmt_log/var_localview.go +++ b/packages/chain/cmt_log/var_localview.go @@ -104,7 +104,7 @@ type varLocalViewEntry struct { type varLocalViewImpl struct { // The latest confirmed AO, as received from L1. - // All the pending entries are built on top ot this one. + // All the pending entries are built on top of this one. // It can be nil, if the latest AO is unclear (either not received yet, or some rejections happened). confirmed *isc.AliasOutputWithID // AOs produced by this committee, but not confirmed yet. diff --git a/packages/chain/mempool/mempool_test.go b/packages/chain/mempool/mempool_test.go index 66ab131592..c39f2bb82c 100644 --- a/packages/chain/mempool/mempool_test.go +++ b/packages/chain/mempool/mempool_test.go @@ -95,14 +95,14 @@ func testMempoolBasic(t *testing.T, n, f int, reliable bool) { node.ServerNodesUpdated(te.peerPubKeys, te.peerPubKeys) node.TangleTimeUpdated(tangleTime) } - awaitTrackHeadChanels := make([]<-chan bool, len(te.mempools)) + awaitTrackHeadChannels := make([]<-chan bool, len(te.mempools)) // deposit some funds so off-ledger requests can go through t.Log("TrackNewChainHead") for i, node := range te.mempools { - awaitTrackHeadChanels[i] = node.TrackNewChainHead(te.stateForAO(i, te.originAO), nil, te.originAO, []state.Block{}, []state.Block{}) + awaitTrackHeadChannels[i] = node.TrackNewChainHead(te.stateForAO(i, te.originAO), nil, te.originAO, []state.Block{}, []state.Block{}) } for i := range te.mempools { - <-awaitTrackHeadChanels[i] + <-awaitTrackHeadChannels[i] } output := transaction.BasicOutputFromPostData( @@ -241,12 +241,12 @@ func blockFn(te *testEnv, reqs []isc.Request, ao *isc.AliasOutputWithID, tangleT nextAO := te.tcl.FakeStateTransition(ao, block.L1Commitment()) // sync mempools with new state - awaitTrackHeadChanels := make([]<-chan bool, len(te.mempools)) + awaitTrackHeadChannels := make([]<-chan bool, len(te.mempools)) for i := range te.mempools { - awaitTrackHeadChanels[i] = te.mempools[i].TrackNewChainHead(chainState, ao, nextAO, []state.Block{block}, []state.Block{}) + awaitTrackHeadChannels[i] = te.mempools[i].TrackNewChainHead(chainState, ao, nextAO, []state.Block{block}, []state.Block{}) } for i := range te.mempools { - <-awaitTrackHeadChanels[i] + <-awaitTrackHeadChannels[i] } return nextAO } @@ -468,14 +468,14 @@ func TestMempoolsNonceGaps(t *testing.T) { node.ServerNodesUpdated(te.peerPubKeys, te.peerPubKeys) node.TangleTimeUpdated(tangleTime) } - awaitTrackHeadChanels := make([]<-chan bool, len(te.mempools)) + awaitTrackHeadChannels := make([]<-chan bool, len(te.mempools)) // deposit some funds so off-ledger requests can go through t.Log("TrackNewChainHead") for i, node := range te.mempools { - awaitTrackHeadChanels[i] = node.TrackNewChainHead(te.stateForAO(i, te.originAO), nil, te.originAO, []state.Block{}, []state.Block{}) + awaitTrackHeadChannels[i] = node.TrackNewChainHead(te.stateForAO(i, te.originAO), nil, te.originAO, []state.Block{}, []state.Block{}) } for i := range te.mempools { - <-awaitTrackHeadChanels[i] + <-awaitTrackHeadChannels[i] } output := transaction.BasicOutputFromPostData( diff --git a/packages/chain/node.go b/packages/chain/node.go index ef5f98b4b1..ad3cc5f8bd 100644 --- a/packages/chain/node.go +++ b/packages/chain/node.go @@ -35,6 +35,7 @@ import ( "github.com/iotaledger/wasp/packages/chain/statemanager" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/cryptolib" "github.com/iotaledger/wasp/packages/gpa" "github.com/iotaledger/wasp/packages/isc" @@ -262,7 +263,9 @@ func New( processorConfig *processors.Config, dkShareRegistryProvider registry.DKShareRegistryProvider, consensusStateRegistry cmt_log.ConsensusStateRegistry, + recoverFromWAL bool, blockWAL sm_gpa_utils.BlockWAL, + snapshotManager sm_snapshots.SnapshotManager, listener ChainListener, accessNodesFromNode []*cryptolib.PublicKey, net peering.NetworkProvider, @@ -339,7 +342,9 @@ func New( cni.chainMetrics.Pipe.TrackPipeLen("node-serversUpdatedPipe", cni.serversUpdatedPipe.Len) cni.chainMetrics.Pipe.TrackPipeLen("node-netRecvPipe", cni.netRecvPipe.Len) - cni.tryRecoverStoreFromWAL(chainStore, blockWAL) + if recoverFromWAL { + cni.recoverStoreFromWAL(chainStore, blockWAL) + } cni.me = cni.pubKeyAsNodeID(nodeIdentity.GetPublicKey()) // // Create sub-components. @@ -398,11 +403,12 @@ func New( peerPubKeys, net, blockWAL, + snapshotManager, chainStore, shutdownCoordinator.Nested("StateMgr"), chainMetrics.StateManager, chainMetrics.Pipe, - cni.log.Named("SM"), + cni.log, smParameters, ) if err != nil { @@ -1222,20 +1228,7 @@ func (cni *chainNodeImpl) GetConsensusWorkflowStatus() ConsensusWorkflowStatus { return &consensusWorkflowStatusImpl{} } -func (cni *chainNodeImpl) tryRecoverStoreFromWAL(chainStore indexedstore.IndexedStore, chainWAL sm_gpa_utils.BlockWAL) { - defer func() { - if r := recover(); r != nil { - // Don't fail, if this crashes for some reason, that's an optional step. - cni.log.Warnf("TryRecoverStoreFromWAL: Failed to populate chain store from WAL: %v", r) - } - }() - // - // Check, if store is empty. - if _, err := chainStore.BlockByIndex(0); err == nil { - cni.log.Infof("TryRecoverStoreFromWAL: Skipping, because the state is not empty.") - return // Store is not empty, so we skip this. - } - cni.log.Infof("TryRecoverStoreFromWAL: Chain store is empty, will try to load blocks from the WAL.") +func (cni *chainNodeImpl) recoverStoreFromWAL(chainStore indexedstore.IndexedStore, chainWAL sm_gpa_utils.BlockWAL) { // // Load all the existing blocks from the WAL. blocksAdded := 0 diff --git a/packages/chain/node_test.go b/packages/chain/node_test.go index 1eb6a96a58..1d53f19791 100644 --- a/packages/chain/node_test.go +++ b/packages/chain/node_test.go @@ -21,6 +21,7 @@ import ( "github.com/iotaledger/wasp/packages/chain" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/cryptolib" "github.com/iotaledger/wasp/packages/isc" "github.com/iotaledger/wasp/packages/kv/dict" @@ -451,7 +452,9 @@ func newEnv(t *testing.T, n, f int, reliable bool) *testEnv { coreprocessors.NewConfigWithCoreContracts().WithNativeContracts(inccounter.Processor), dkShareProviders[i], testutil.NewConsensusStateRegistry(), + false, sm_gpa_utils.NewMockedTestBlockWAL(), + sm_snapshots.NewEmptySnapshotManager(), chain.NewEmptyChainListener(), []*cryptolib.PublicKey{}, // Access nodes. te.networkProviders[i], diff --git a/packages/chain/statemanager/sm_gpa/block_fetcher.go b/packages/chain/statemanager/sm_gpa/block_fetcher.go index cdedac7c59..a1d33bc4e8 100644 --- a/packages/chain/statemanager/sm_gpa/block_fetcher.go +++ b/packages/chain/statemanager/sm_gpa/block_fetcher.go @@ -8,6 +8,7 @@ import ( type blockFetcherImpl struct { start time.Time + stateIndex uint32 commitment *state.L1Commitment callbacks []blockRequestCallback related []blockFetcher @@ -15,27 +16,33 @@ type blockFetcherImpl struct { var _ blockFetcher = &blockFetcherImpl{} -func newBlockFetcher(commitment *state.L1Commitment) blockFetcher { +func newBlockFetcher(stateIndex uint32, commitment *state.L1Commitment) blockFetcher { return &blockFetcherImpl{ start: time.Now(), + stateIndex: stateIndex, commitment: commitment, callbacks: make([]blockRequestCallback, 0), related: make([]blockFetcher, 0), } } -func newBlockFetcherWithCallback(commitment *state.L1Commitment, callback blockRequestCallback) blockFetcher { - result := newBlockFetcher(commitment) +func newBlockFetcherWithCallback(stateIndex uint32, commitment *state.L1Commitment, callback blockRequestCallback) blockFetcher { + result := newBlockFetcher(stateIndex, commitment) result.addCallback(callback) return result } func newBlockFetcherWithRelatedFetcher(commitment *state.L1Commitment, fetcher blockFetcher) blockFetcher { - result := newBlockFetcher(commitment) + newStateIndex := fetcher.getStateIndex() - 1 + result := newBlockFetcher(newStateIndex, commitment) result.addRelatedFetcher(fetcher) return result } +func (bfiT *blockFetcherImpl) getStateIndex() uint32 { + return bfiT.stateIndex +} + func (bfiT *blockFetcherImpl) getCommitment() *state.L1Commitment { return bfiT.commitment } @@ -52,17 +59,21 @@ func (bfiT *blockFetcherImpl) addRelatedFetcher(fetcher blockFetcher) { bfiT.related = append(bfiT.related, fetcher) } -func (bfiT *blockFetcherImpl) notifyFetched(notifyFun func(blockFetcher) bool) { - if notifyFun(bfiT) { - for _, callback := range bfiT.callbacks { - if callback.isValid() { - callback.requestCompleted() - } - } - for _, fetcher := range bfiT.related { - fetcher.notifyFetched(notifyFun) +func (bfiT *blockFetcherImpl) commitAndNotifyFetched(commitFun func(blockFetcher) bool) { + if commitFun(bfiT) { + bfiT.notifyFetched(commitFun) + } +} + +func (bfiT *blockFetcherImpl) notifyFetched(commitFun func(blockFetcher) bool) { + for _, callback := range bfiT.callbacks { + if callback.isValid() { + callback.requestCompleted() } } + for _, fetcher := range bfiT.related { + fetcher.commitAndNotifyFetched(commitFun) + } } func (bfiT *blockFetcherImpl) cleanCallbacks() { diff --git a/packages/chain/statemanager/sm_gpa/interface.go b/packages/chain/statemanager/sm_gpa/interface.go index fff383390a..279ddb4c37 100644 --- a/packages/chain/statemanager/sm_gpa/interface.go +++ b/packages/chain/statemanager/sm_gpa/interface.go @@ -3,18 +3,32 @@ package sm_gpa import ( "time" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/state" ) +type StateManagerOutput interface { + addBlockCommitted(uint32, *state.L1Commitment) + addSnapshotToLoad(uint32, *state.L1Commitment) + setUpdateSnapshots() + TakeBlocksCommitted() []sm_snapshots.SnapshotInfo + TakeSnapshotToLoad() sm_snapshots.SnapshotInfo + TakeUpdateSnapshots() bool +} + +type SnapshotExistsFun func(uint32, *state.L1Commitment) bool + type blockRequestCallback interface { isValid() bool requestCompleted() } type blockFetcher interface { + getStateIndex() uint32 getCommitment() *state.L1Commitment getCallbacksCount() int - notifyFetched(func(blockFetcher) bool) // calls fun for this fetcher and each related recursively; fun for parent block is always called before fun for related block + commitAndNotifyFetched(func(blockFetcher) bool) // calls fun for this block, notifies waiting callbacks of this fetcher and does the same for each related fetcher recursively; fun for parent block is always called before fun for related block + notifyFetched(func(blockFetcher) bool) // notifies waiting callbacks of this fetcher, then calls fun and notifies waiting callbacks of all related fetchers recursively; fun for parent block is always called before fun for related block addCallback(blockRequestCallback) addRelatedFetcher(blockFetcher) cleanCallbacks() diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_cache.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_cache.go index 2376f01a54..25c214875f 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_cache.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_cache.go @@ -30,7 +30,7 @@ var _ BlockCache = &blockCache{} func NewBlockCache(tp TimeProvider, maxCacheSize int, wal BlockWAL, metrics *metrics.ChainStateManagerMetrics, log *logger.Logger) (BlockCache, error) { return &blockCache{ - log: log.Named("bc"), + log: log.Named("BC"), blocks: shrinkingmap.New[BlockKey, state.Block](), maxCacheSize: maxCacheSize, wal: wal, diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal.go index 0d93a81be1..2dca39e4a4 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal.go @@ -24,7 +24,7 @@ type blockWAL struct { metrics *metrics.ChainBlockWALMetrics } -const constFileSuffix = ".blk" +const constBlockWALFileSuffix = ".blk" func NewBlockWAL(log *logger.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { dir := filepath.Join(baseDir, chainID.String()) @@ -33,7 +33,7 @@ func NewBlockWAL(log *logger.Logger, baseDir string, chainID isc.ChainID, metric } result := &blockWAL{ - WrappedLogger: logger.NewWrappedLogger(log), + WrappedLogger: logger.NewWrappedLogger(log.Named("WAL")), dir: dir, metrics: metrics, } @@ -45,12 +45,12 @@ func NewBlockWAL(log *logger.Logger, baseDir string, chainID isc.ChainID, metric func (bwT *blockWAL) Write(block state.Block) error { blockIndex := block.StateIndex() commitment := block.L1Commitment() - fileName := fileName(commitment.BlockHash()) + fileName := blockWALFileName(commitment.BlockHash()) filePath := filepath.Join(bwT.dir, fileName) f, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) if err != nil { bwT.metrics.IncFailedWrites() - return fmt.Errorf("openning file %s for writing block index %v failed: %w", fileName, blockIndex, err) + return fmt.Errorf("opening file %s for writing block index %v failed: %w", fileName, blockIndex, err) } defer f.Close() blockBytes := block.Bytes() @@ -69,12 +69,12 @@ func (bwT *blockWAL) Write(block state.Block) error { } func (bwT *blockWAL) Contains(blockHash state.BlockHash) bool { - _, err := os.Stat(filepath.Join(bwT.dir, fileName(blockHash))) + _, err := os.Stat(filepath.Join(bwT.dir, blockWALFileName(blockHash))) return err == nil } func (bwT *blockWAL) Read(blockHash state.BlockHash) (state.Block, error) { - fileName := fileName(blockHash) + fileName := blockWALFileName(blockHash) filePath := filepath.Join(bwT.dir, fileName) block, err := blockFromFilePath(filePath) if err != nil { @@ -97,7 +97,7 @@ func (bwT *blockWAL) ReadAllByStateIndex(cb func(stateIndex uint32, block state. if !dirEntry.Type().IsRegular() { continue } - if !strings.HasSuffix(dirEntry.Name(), constFileSuffix) { + if !strings.HasSuffix(dirEntry.Name(), constBlockWALFileSuffix) { continue } filePath := filepath.Join(bwT.dir, dirEntry.Name()) @@ -160,6 +160,6 @@ func blockFromFilePath(filePath string) (state.Block, error) { return block, nil } -func fileName(blockHash state.BlockHash) string { - return blockHash.String() + constFileSuffix +func blockWALFileName(blockHash state.BlockHash) string { + return blockHash.String() + constBlockWALFileSuffix } diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_rapid_test.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_rapid_test.go index 45620296d5..be7c42cc8c 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_rapid_test.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_rapid_test.go @@ -189,7 +189,7 @@ func (bwtsmT *blockWALTestSM) getGoodBlockHashes() []state.BlockHash { } func (bwtsmT *blockWALTestSM) pathFromHash(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, bwtsmT.factory.GetChainID().String(), fileName(blockHash)) + return filepath.Join(constTestFolder, bwtsmT.factory.GetChainID().String(), blockWALFileName(blockHash)) } func (bwtsmT *blockWALTestSM) invariantAllWrittenBlocksExist(t *rapid.T) { diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_test.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_test.go index 49233a6a4a..81ea15a778 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_test.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/block_wal_test.go @@ -64,7 +64,7 @@ func TestBlockWALOverwrite(t *testing.T) { require.NoError(t, err) } pathFromHashFun := func(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, factory.GetChainID().String(), fileName(blockHash)) + return filepath.Join(constTestFolder, factory.GetChainID().String(), blockWALFileName(blockHash)) } file0Path := pathFromHashFun(blocks[0].Hash()) file1Path := pathFromHashFun(blocks[1].Hash()) diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/read_only_store.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/read_only_store.go new file mode 100644 index 0000000000..66718a3ae6 --- /dev/null +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/read_only_store.go @@ -0,0 +1,84 @@ +package sm_gpa_utils + +import ( + "fmt" + "time" + + "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/trie" +) + +type readOnlyStore struct { + store state.Store +} + +var _ state.Store = &readOnlyStore{} + +func NewReadOnlyStore(store state.Store) state.Store { + return &readOnlyStore{store: store} +} + +func (ros *readOnlyStore) HasTrieRoot(trieRoot trie.Hash) bool { + return ros.store.HasTrieRoot(trieRoot) +} + +func (ros *readOnlyStore) BlockByTrieRoot(trieRoot trie.Hash) (state.Block, error) { + return ros.store.BlockByTrieRoot(trieRoot) +} + +func (ros *readOnlyStore) StateByTrieRoot(trieRoot trie.Hash) (state.State, error) { + return ros.store.StateByTrieRoot(trieRoot) +} + +func (ros *readOnlyStore) SetLatest(trie.Hash) error { + return fmt.Errorf("cannot write to read-only store") +} + +func (ros *readOnlyStore) LatestBlockIndex() (uint32, error) { + return ros.store.LatestBlockIndex() +} + +func (ros *readOnlyStore) LatestBlock() (state.Block, error) { + return ros.store.LatestBlock() +} + +func (ros *readOnlyStore) LatestState() (state.State, error) { + return ros.store.LatestState() +} + +func (ros *readOnlyStore) LatestTrieRoot() (trie.Hash, error) { + return ros.store.LatestTrieRoot() +} + +func (ros *readOnlyStore) NewOriginStateDraft() state.StateDraft { + panic("Cannot create origin state draft in read-only store") +} + +func (ros *readOnlyStore) NewStateDraft(time.Time, *state.L1Commitment) (state.StateDraft, error) { + return nil, fmt.Errorf("cannot create state draft in read-only store") +} + +func (ros *readOnlyStore) NewEmptyStateDraft(prevL1Commitment *state.L1Commitment) (state.StateDraft, error) { + return nil, fmt.Errorf("cannot create empty state draft in read-only store") +} + +func (ros *readOnlyStore) Commit(state.StateDraft) state.Block { + panic("Cannot commit to read-only store") +} + +func (ros *readOnlyStore) ExtractBlock(stateDraft state.StateDraft) state.Block { + return ros.store.ExtractBlock(stateDraft) +} + +func (ros *readOnlyStore) Prune(trie.Hash) (trie.PruneStats, error) { + panic("Cannot prune read-only store") +} + +func (ros *readOnlyStore) TakeSnapshot(trieRoot trie.Hash, kvStore kvstore.KVStore) error { + return ros.store.TakeSnapshot(trieRoot, kvStore) +} + +func (ros *readOnlyStore) RestoreSnapshot(trie.Hash, kvstore.KVStore) error { + return fmt.Errorf("cannot write snapshot into read-only store") +} diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_block_factory.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_block_factory.go index 1a6c31e729..1a2168c4af 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_block_factory.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_block_factory.go @@ -153,6 +153,10 @@ func (bfT *BlockFactory) GetNextBlock( return block } +func (bfT *BlockFactory) GetStore() state.Store { + return NewReadOnlyStore(bfT.store) +} + func (bfT *BlockFactory) GetStateDraft(block state.Block) state.StateDraft { result, err := bfT.store.NewEmptyStateDraft(block.PreviousL1Commitment()) require.NoError(bfT.t, err) @@ -160,12 +164,6 @@ func (bfT *BlockFactory) GetStateDraft(block state.Block) state.StateDraft { return result } -func (bfT *BlockFactory) GetState(commitment *state.L1Commitment) state.State { - result, err := bfT.store.StateByTrieRoot(commitment.TrieRoot()) - require.NoError(bfT.t, err) - return result -} - func (bfT *BlockFactory) GetAliasOutput(commitment *state.L1Commitment) *isc.AliasOutputWithID { result, ok := bfT.aliasOutputs[commitment.BlockHash()] require.True(bfT.t, ok) diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_utils.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_utils.go index b1e181ac7d..246c01dc91 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_utils.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/test_utils.go @@ -4,8 +4,11 @@ package sm_gpa_utils import ( + "bytes" + "github.com/stretchr/testify/require" + "github.com/iotaledger/wasp/packages/kv" "github.com/iotaledger/wasp/packages/state" ) @@ -34,3 +37,63 @@ func BlocksEqual(block1, block2 state.Block) bool { func CheckBlocksDifferent(t require.TestingT, block1, block2 state.Block) { require.False(t, block1.Hash().Equals(block2.Hash())) } + +// ----------------------------------------------------------------------------- +func CheckStateInStores(t require.TestingT, storeOrig, storeNew state.Store, commitment *state.L1Commitment) { + origState, err := storeOrig.StateByTrieRoot(commitment.TrieRoot()) + require.NoError(t, err) + CheckStateInStore(t, storeNew, origState) +} + +func CheckStateInStore(t require.TestingT, store state.Store, origState state.State) { + stateFromStore, err := store.StateByTrieRoot(origState.TrieRoot()) + require.NoError(t, err) + require.True(t, origState.TrieRoot().Equals(stateFromStore.TrieRoot())) + require.Equal(t, origState.BlockIndex(), stateFromStore.BlockIndex()) + require.Equal(t, origState.Timestamp(), stateFromStore.Timestamp()) + require.True(t, origState.PreviousL1Commitment().Equals(stateFromStore.PreviousL1Commitment())) + commonState := getCommonState(origState, stateFromStore) + for _, entry := range commonState { + require.True(t, bytes.Equal(entry.value1, entry.value2)) + } +} + +// NOTE: this function should not exist. state.State should have Equals method +func StatesEqual(state1, state2 state.State) bool { + if !state1.TrieRoot().Equals(state2.TrieRoot()) || + state1.BlockIndex() != state2.BlockIndex() || + state1.Timestamp() != state2.Timestamp() || + !state1.PreviousL1Commitment().Equals(state2.PreviousL1Commitment()) { + return false + } + commonState := getCommonState(state1, state2) + for _, entry := range commonState { + if !bytes.Equal(entry.value1, entry.value2) { + return false + } + } + return true +} + +type commonEntry struct { + value1 []byte + value2 []byte +} + +func getCommonState(state1, state2 state.State) map[kv.Key]*commonEntry { + result := make(map[kv.Key]*commonEntry) + iterateFun := func(iterState state.State, setValueFun func(*commonEntry, []byte)) { + iterState.Iterate(kv.EmptyPrefix, func(key kv.Key, value []byte) bool { + entry, ok := result[key] + if !ok { + entry = &commonEntry{} + result[key] = entry + } + setValueFun(entry, value) + return true + }) + } + iterateFun(state1, func(entry *commonEntry, value []byte) { entry.value1 = value }) + iterateFun(state2, func(entry *commonEntry, value []byte) { entry.value2 = value }) + return result +} diff --git a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/time_provider_artifficial.go b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/time_provider_artifficial.go index 1539362b4a..9f29c9c624 100644 --- a/packages/chain/statemanager/sm_gpa/sm_gpa_utils/time_provider_artifficial.go +++ b/packages/chain/statemanager/sm_gpa/sm_gpa_utils/time_provider_artifficial.go @@ -1,12 +1,14 @@ package sm_gpa_utils import ( + "sync" "time" ) type artifficialTimeProvider struct { now time.Time timers []*timer + mutex sync.Mutex } type timer struct { @@ -26,10 +28,14 @@ func NewArtifficialTimeProvider(nowOpt ...time.Time) TimeProvider { return &artifficialTimeProvider{ now: now, timers: make([]*timer, 0), + mutex: sync.Mutex{}, } } func (atpT *artifficialTimeProvider) SetNow(now time.Time) { + atpT.mutex.Lock() + defer atpT.mutex.Unlock() + atpT.now = now var i int for i = 0; i < len(atpT.timers) && atpT.timers[i].time.Before(atpT.now); i++ { @@ -40,26 +46,37 @@ func (atpT *artifficialTimeProvider) SetNow(now time.Time) { } func (atpT *artifficialTimeProvider) GetNow() time.Time { + atpT.mutex.Lock() + defer atpT.mutex.Unlock() + return atpT.now } func (atpT *artifficialTimeProvider) After(d time.Duration) <-chan time.Time { - timerTime := atpT.now.Add(d) + channel := make(chan time.Time, 1) + if d == 0 { + channel <- atpT.now + close(channel) + } else { + atpT.mutex.Lock() + defer atpT.mutex.Unlock() - var count int - for i := 0; i < len(atpT.timers) && atpT.timers[i].time.Before(timerTime); i++ { - count++ - } + timerTime := atpT.now.Add(d) - if count == len(atpT.timers) { - atpT.timers = append(atpT.timers, nil) - } else { - atpT.timers = append(atpT.timers[:count+1], atpT.timers[count:]...) - } - channel := make(chan time.Time, 1) - atpT.timers[count] = &timer{ - time: timerTime, - channel: channel, + var count int + for i := 0; i < len(atpT.timers) && atpT.timers[i].time.Before(timerTime); i++ { + count++ + } + + if count == len(atpT.timers) { + atpT.timers = append(atpT.timers, nil) + } else { + atpT.timers = append(atpT.timers[:count+1], atpT.timers[count:]...) + } + atpT.timers[count] = &timer{ + time: timerTime, + channel: channel, + } } return channel } diff --git a/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_decided_state.go b/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_decided_state.go index a2f271bded..e6e341499b 100644 --- a/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_decided_state.go +++ b/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_decided_state.go @@ -11,6 +11,7 @@ import ( type ConsensusDecidedState struct { context context.Context + stateIndex uint32 l1Commitment *state.L1Commitment resultCh chan<- state.State } @@ -25,11 +26,16 @@ func NewConsensusDecidedState(ctx context.Context, aliasOutput *isc.AliasOutputW resultChannel := make(chan state.State, 1) return &ConsensusDecidedState{ context: ctx, + stateIndex: aliasOutput.GetStateIndex(), l1Commitment: commitment, resultCh: resultChannel, }, resultChannel } +func (cdsT *ConsensusDecidedState) GetStateIndex() uint32 { + return cdsT.stateIndex +} + func (cdsT *ConsensusDecidedState) GetL1Commitment() *state.L1Commitment { return cdsT.l1Commitment } diff --git a/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_state_proposal.go b/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_state_proposal.go index ada5eb5db0..6d42ee9449 100644 --- a/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_state_proposal.go +++ b/packages/chain/statemanager/sm_gpa/sm_inputs/consensus_state_proposal.go @@ -11,6 +11,7 @@ import ( type ConsensusStateProposal struct { context context.Context + stateIndex uint32 l1Commitment *state.L1Commitment resultCh chan<- interface{} } @@ -25,11 +26,16 @@ func NewConsensusStateProposal(ctx context.Context, aliasOutput *isc.AliasOutput resultChannel := make(chan interface{}, 1) return &ConsensusStateProposal{ context: ctx, + stateIndex: aliasOutput.GetStateIndex(), l1Commitment: commitment, resultCh: resultChannel, }, resultChannel } +func (cspT *ConsensusStateProposal) GetStateIndex() uint32 { + return cspT.stateIndex +} + func (cspT *ConsensusStateProposal) GetL1Commitment() *state.L1Commitment { return cspT.l1Commitment } diff --git a/packages/chain/statemanager/sm_gpa/sm_inputs/snapshot_manager_snapshot_done.go b/packages/chain/statemanager/sm_gpa/sm_inputs/snapshot_manager_snapshot_done.go new file mode 100644 index 0000000000..b6faafd75d --- /dev/null +++ b/packages/chain/statemanager/sm_gpa/sm_inputs/snapshot_manager_snapshot_done.go @@ -0,0 +1,34 @@ +package sm_inputs + +import ( + "github.com/iotaledger/wasp/packages/gpa" + "github.com/iotaledger/wasp/packages/state" +) + +type SnapshotManagerSnapshotDone struct { + stateIndex uint32 + commitment *state.L1Commitment + result error +} + +var _ gpa.Input = &SnapshotManagerSnapshotDone{} + +func NewSnapshotManagerSnapshotDone(stateIndex uint32, commitment *state.L1Commitment, result error) *SnapshotManagerSnapshotDone { + return &SnapshotManagerSnapshotDone{ + stateIndex: stateIndex, + commitment: commitment, + result: result, + } +} + +func (smsdT *SnapshotManagerSnapshotDone) GetStateIndex() uint32 { + return smsdT.stateIndex +} + +func (smsdT *SnapshotManagerSnapshotDone) GetCommitment() *state.L1Commitment { + return smsdT.commitment +} + +func (smsdT *SnapshotManagerSnapshotDone) GetResult() error { + return smsdT.result +} diff --git a/packages/chain/statemanager/sm_gpa/state_manager_gpa.go b/packages/chain/statemanager/sm_gpa/state_manager_gpa.go index bd090698b7..77b13f7b73 100644 --- a/packages/chain/statemanager/sm_gpa/state_manager_gpa.go +++ b/packages/chain/statemanager/sm_gpa/state_manager_gpa.go @@ -28,12 +28,15 @@ type stateManagerGPA struct { blocksToFetch blockFetchers blocksFetched blockFetchers nodeRandomiser sm_utils.NodeRandomiser + snapshotExistsFun SnapshotExistsFun store state.Store + output StateManagerOutput parameters StateManagerParameters lastGetBlocksTime time.Time lastCleanBlockCacheTime time.Time lastCleanRequestsTime time.Time lastStatusLogTime time.Time + lastSnapshotsUpdateTime time.Time metrics *metrics.ChainStateManagerMetrics } @@ -48,13 +51,14 @@ func New( chainID isc.ChainID, nr sm_utils.NodeRandomiser, wal sm_gpa_utils.BlockWAL, + snapshotExistsFun SnapshotExistsFun, store state.Store, metrics *metrics.ChainStateManagerMetrics, log *logger.Logger, parameters StateManagerParameters, ) (gpa.GPA, error) { var err error - smLog := log.Named("gpa") + smLog := log.Named("GPA") blockCache, err := sm_gpa_utils.NewBlockCache(parameters.TimeProvider, parameters.BlockCacheMaxSize, wal, metrics, smLog) if err != nil { return nil, fmt.Errorf("error creating block cache: %v", err) @@ -66,11 +70,15 @@ func New( blocksToFetch: newBlockFetchers(newBlockFetchersMetrics(metrics.IncBlocksFetching, metrics.DecBlocksFetching, metrics.StateManagerBlockFetched)), blocksFetched: newBlockFetchers(newBlockFetchersMetrics(metrics.IncBlocksPending, metrics.DecBlocksPending, bfmNopDurationFun)), nodeRandomiser: nr, + snapshotExistsFun: snapshotExistsFun, store: store, + output: newOutput(), parameters: parameters, lastGetBlocksTime: time.Time{}, lastCleanBlockCacheTime: time.Time{}, + lastCleanRequestsTime: time.Time{}, lastStatusLogTime: time.Time{}, + lastSnapshotsUpdateTime: time.Time{}, metrics: metrics, } @@ -91,6 +99,8 @@ func (smT *stateManagerGPA) Input(input gpa.Input) gpa.OutMessages { return smT.handleConsensusBlockProduced(inputCasted) case *sm_inputs.ChainFetchStateDiff: // From mempool return smT.handleChainFetchStateDiff(inputCasted) + case *sm_inputs.SnapshotManagerSnapshotDone: // From snapshot manager + return smT.handleSnapshotManagerSnapshotDone(inputCasted) case *sm_inputs.StateManagerTimerTick: // From state manager go routine return smT.handleStateManagerTimerTick(inputCasted.GetTime()) default: @@ -112,7 +122,7 @@ func (smT *stateManagerGPA) Message(msg gpa.Message) gpa.OutMessages { } func (smT *stateManagerGPA) Output() gpa.Output { - return nil + return smT.output } func (smT *stateManagerGPA) StatusString() string { @@ -174,25 +184,25 @@ func (smT *stateManagerGPA) handlePeerBlock(from gpa.NodeID, block state.Block) func (smT *stateManagerGPA) handleConsensusStateProposal(csp *sm_inputs.ConsensusStateProposal) gpa.OutMessages { start := time.Now() - smT.log.Debugf("Input consensus state proposal %s received...", csp.GetL1Commitment()) + smT.log.Debugf("Input consensus state proposal index %v %s received...", csp.GetStateIndex(), csp.GetL1Commitment()) callback := newBlockRequestCallback( func() bool { return csp.IsValid() }, func() { csp.Respond() - smT.log.Debugf("Input consensus state proposal %s: responded to consensus", csp.GetL1Commitment()) + smT.log.Debugf("Input consensus state proposal index %v %s: responded to consensus", csp.GetStateIndex(), csp.GetL1Commitment()) smT.metrics.ConsensusStateProposalHandled(time.Since(start)) }, ) - messages := smT.traceBlockChainWithCallback(csp.GetL1Commitment(), callback) - smT.log.Debugf("Input consensus state proposal %s handled", csp.GetL1Commitment()) + messages := smT.traceBlockChainWithCallback(csp.GetStateIndex(), csp.GetL1Commitment(), callback) + smT.log.Debugf("Input consensus state proposal index %v %s handled", csp.GetStateIndex(), csp.GetL1Commitment()) return messages } func (smT *stateManagerGPA) handleConsensusDecidedState(cds *sm_inputs.ConsensusDecidedState) gpa.OutMessages { start := time.Now() - smT.log.Debugf("Input consensus decided state %s received...", cds.GetL1Commitment()) + smT.log.Debugf("Input consensus decided state index %v %s received...", cds.GetStateIndex(), cds.GetL1Commitment()) callback := newBlockRequestCallback( func() bool { return cds.IsValid() @@ -200,22 +210,23 @@ func (smT *stateManagerGPA) handleConsensusDecidedState(cds *sm_inputs.Consensus func() { state, err := smT.store.StateByTrieRoot(cds.GetL1Commitment().TrieRoot()) if err != nil { - smT.log.Errorf("Input consensus decided state %s: error obtaining state: %w", cds.GetL1Commitment(), err) + smT.log.Errorf("Input consensus decided state index %v %s: error obtaining state: %w", cds.GetStateIndex(), cds.GetL1Commitment(), err) return } cds.Respond(state) - smT.log.Debugf("Input consensus decided state %s: responded to consensus with state index %v", cds.GetL1Commitment(), state.BlockIndex()) + smT.log.Debugf("Input consensus decided state index %v %s: responded to consensus with state index %v", + cds.GetStateIndex(), cds.GetL1Commitment(), state.BlockIndex()) smT.metrics.ConsensusDecidedStateHandled(time.Since(start)) }, ) - messages := smT.traceBlockChainWithCallback(cds.GetL1Commitment(), callback) - smT.log.Debugf("Input consensus decided state %s handled", cds.GetL1Commitment()) + messages := smT.traceBlockChainWithCallback(cds.GetStateIndex(), cds.GetL1Commitment(), callback) + smT.log.Debugf("Input consensus decided state index %v %s handled", cds.GetStateIndex(), cds.GetL1Commitment()) return messages } func (smT *stateManagerGPA) handleConsensusBlockProduced(input *sm_inputs.ConsensusBlockProduced) gpa.OutMessages { start := time.Now() - stateIndex := input.GetStateDraft().BlockIndex() + stateIndex := input.GetStateDraft().BlockIndex() - 1 // NOTE: as this state draft is complete, the returned index is the one of the next state (which will be obtained, once this state draft is committed); to get the index of the base state, we need to subtract one commitment := input.GetStateDraft().BaseL1Commitment() smT.log.Debugf("Input block produced on state index %v %s received...", stateIndex, commitment) if !smT.store.HasTrieRoot(commitment.TrieRoot()) { @@ -226,12 +237,12 @@ func (smT *stateManagerGPA) handleConsensusBlockProduced(input *sm_inputs.Consen blockCommitment := block.L1Commitment() smT.blockCache.AddBlock(block) input.Respond(block) - smT.log.Debugf("Input block produced on state index %v %s: state draft index %v has been committed to the store, responded to consensus with resulting block %s", - stateIndex, commitment, input.GetStateDraft().BlockIndex(), blockCommitment) + smT.log.Debugf("Input block produced on state index %v %s: state draft has been committed to the store, responded to consensus with resulting block index %v %s", + stateIndex, commitment, block.StateIndex(), blockCommitment) fetcher := smT.blocksToFetch.takeFetcher(blockCommitment) var result gpa.OutMessages if fetcher != nil { - result = smT.markFetched(fetcher) + result = smT.markFetched(fetcher, false) } smT.log.Debugf("Input block produced on state index %v %s handled", stateIndex, commitment) smT.metrics.ConsensusBlockProducedHandled(time.Since(start)) @@ -245,54 +256,9 @@ func (smT *stateManagerGPA) handleChainFetchStateDiff(input *sm_inputs.ChainFetc oldBlockRequestCompleted := false newBlockRequestCompleted := false isValidFun := func() bool { return input.IsValid() } - obtainCommittedBlockFun := func(commitment *state.L1Commitment) state.Block { - result := smT.getBlock(commitment) - if result == nil { - smT.log.Panicf("Input mempool state request for state index %v %s: cannot obtain block %s", input.GetNewStateIndex(), input.GetNewL1Commitment(), commitment) - } - return result - } - lastBlockFun := func(blocks []state.Block) state.Block { - return blocks[len(blocks)-1] - } - respondFun := func() { - oldBlock := obtainCommittedBlockFun(input.GetOldL1Commitment()) - newBlock := obtainCommittedBlockFun(input.GetNewL1Commitment()) - oldChainOfBlocks := []state.Block{oldBlock} - newChainOfBlocks := []state.Block{newBlock} - for lastBlockFun(oldChainOfBlocks).StateIndex() > lastBlockFun(newChainOfBlocks).StateIndex() { - oldChainOfBlocks = append(oldChainOfBlocks, obtainCommittedBlockFun(lastBlockFun(oldChainOfBlocks).PreviousL1Commitment())) - } - for lastBlockFun(oldChainOfBlocks).StateIndex() < lastBlockFun(newChainOfBlocks).StateIndex() { - newChainOfBlocks = append(newChainOfBlocks, obtainCommittedBlockFun(lastBlockFun(newChainOfBlocks).PreviousL1Commitment())) - } - for lastBlockFun(oldChainOfBlocks).StateIndex() > 0 { - if lastBlockFun(oldChainOfBlocks).L1Commitment().Equals(lastBlockFun(newChainOfBlocks).L1Commitment()) { - break - } - oldChainOfBlocks = append(oldChainOfBlocks, obtainCommittedBlockFun(lastBlockFun(oldChainOfBlocks).PreviousL1Commitment())) - newChainOfBlocks = append(newChainOfBlocks, obtainCommittedBlockFun(lastBlockFun(newChainOfBlocks).PreviousL1Commitment())) - } - commonIndex := lastBlockFun(oldChainOfBlocks).StateIndex() - commonCommitment := lastBlockFun(oldChainOfBlocks).L1Commitment() - oldChainOfBlocks = lo.Reverse(oldChainOfBlocks[:len(oldChainOfBlocks)-1]) - newChainOfBlocks = lo.Reverse(newChainOfBlocks[:len(newChainOfBlocks)-1]) - newState, err := smT.store.StateByTrieRoot(input.GetNewL1Commitment().TrieRoot()) - if err != nil { - smT.log.Errorf("Input mempool state request for state index %v %s: error obtaining state: %w", - input.GetNewStateIndex(), input.GetNewL1Commitment(), err) - return - } - input.Respond(sm_inputs.NewChainFetchStateDiffResults(newState, newChainOfBlocks, oldChainOfBlocks)) - smT.log.Debugf("Input mempool state request for state index %v %s: responded to chain with requested state, "+ - "and block chains of length %v (requested) and %v (old) with common ancestor index %v %s", - input.GetNewStateIndex(), input.GetNewL1Commitment(), len(newChainOfBlocks), len(oldChainOfBlocks), - commonIndex, commonCommitment) - smT.metrics.ChainFetchStateDiffHandled(time.Since(start)) - } respondIfNeededFun := func() { if oldBlockRequestCompleted && newBlockRequestCompleted { - respondFun() + smT.handleChainFetchStateDiffRespond(input, start) } } oldRequestCallback := newBlockRequestCallback(isValidFun, func() { @@ -308,13 +274,121 @@ func (smT *stateManagerGPA) handleChainFetchStateDiff(input *sm_inputs.ChainFetc respondIfNeededFun() }) result := gpa.NoMessages() - result.AddAll(smT.traceBlockChainWithCallback(input.GetOldL1Commitment(), oldRequestCallback)) - result.AddAll(smT.traceBlockChainWithCallback(input.GetNewL1Commitment(), newRequestCallback)) + result.AddAll(smT.traceBlockChainWithCallback(input.GetOldStateIndex(), input.GetOldL1Commitment(), oldRequestCallback)) + result.AddAll(smT.traceBlockChainWithCallback(input.GetNewStateIndex(), input.GetNewL1Commitment(), newRequestCallback)) smT.log.Debugf("Input mempool state request for state index %v %s handled", input.GetNewStateIndex(), input.GetNewL1Commitment()) return result } +func (smT *stateManagerGPA) handleChainFetchStateDiffRespond(input *sm_inputs.ChainFetchStateDiff, start time.Time) { //nolint:funlen + makeCallbackFun := func(part string) blockRequestCallback { + return newBlockRequestCallback( + func() bool { return input.IsValid() }, + func() { + smT.log.Debugf("Input mempool state request for state index %v %s: %s block request completed once again", + input.GetNewStateIndex(), input.GetNewL1Commitment(), part) + smT.handleChainFetchStateDiffRespond(input, start) + }, + ) + } + obtainCommittedPreviousBlockFun := func(block state.Block, part string) state.Block { + commitment := block.PreviousL1Commitment() + result := smT.getBlock(commitment) + if result == nil { + blockIndex := block.StateIndex() - 1 + smT.log.Debugf("Input mempool state request for state index %v %s: block %v %s in the %s block chain is missing; fetching it", + input.GetNewStateIndex(), input.GetNewL1Commitment(), blockIndex, commitment, part) + // NOTE: returned messages are not sent out; only GetBlock messages are possible in this case and + // these messages will be sent out at the next retry; + smT.traceBlockChainWithCallback(blockIndex, commitment, makeCallbackFun(part)) + } + return result + } + lastBlockFun := func(blocks []state.Block) state.Block { + return blocks[len(blocks)-1] + } + oldBlock := smT.getBlock(input.GetOldL1Commitment()) + if oldBlock == nil { + smT.log.Panicf("Input mempool state request for state index %v %s: cannot obtain final old block %s", + input.GetNewStateIndex(), input.GetNewL1Commitment(), input.GetOldL1Commitment()) + return + } + newBlock := smT.getBlock(input.GetNewL1Commitment()) + if newBlock == nil { + smT.log.Panicf("Input mempool state request for state index %v %s: cannot obtain final new block %s", + input.GetNewStateIndex(), input.GetNewL1Commitment(), input.GetNewL1Commitment()) + return + } + oldChainOfBlocks := []state.Block{oldBlock} + newChainOfBlocks := []state.Block{newBlock} + for lastBlockFun(oldChainOfBlocks).StateIndex() > lastBlockFun(newChainOfBlocks).StateIndex() { + oldBlock = obtainCommittedPreviousBlockFun(lastBlockFun(oldChainOfBlocks), "old") + if oldBlock == nil { + return + } + oldChainOfBlocks = append(oldChainOfBlocks, oldBlock) + } + for lastBlockFun(oldChainOfBlocks).StateIndex() < lastBlockFun(newChainOfBlocks).StateIndex() { + newBlock = obtainCommittedPreviousBlockFun(lastBlockFun(newChainOfBlocks), "new") + if newBlock == nil { + return + } + newChainOfBlocks = append(newChainOfBlocks, newBlock) + } + for lastBlockFun(oldChainOfBlocks).StateIndex() > 0 { + if lastBlockFun(oldChainOfBlocks).L1Commitment().Equals(lastBlockFun(newChainOfBlocks).L1Commitment()) { + break + } + oldBlock = obtainCommittedPreviousBlockFun(lastBlockFun(oldChainOfBlocks), "old") + if oldBlock == nil { + return + } + newBlock = obtainCommittedPreviousBlockFun(lastBlockFun(newChainOfBlocks), "new") + if newBlock == nil { + return + } + oldChainOfBlocks = append(oldChainOfBlocks, oldBlock) + newChainOfBlocks = append(newChainOfBlocks, newBlock) + } + commonIndex := lastBlockFun(oldChainOfBlocks).StateIndex() + commonCommitment := lastBlockFun(oldChainOfBlocks).L1Commitment() + oldChainOfBlocks = lo.Reverse(oldChainOfBlocks[:len(oldChainOfBlocks)-1]) + newChainOfBlocks = lo.Reverse(newChainOfBlocks[:len(newChainOfBlocks)-1]) + newState, err := smT.store.StateByTrieRoot(input.GetNewL1Commitment().TrieRoot()) + if err != nil { + smT.log.Errorf("Input mempool state request for state index %v %s: error obtaining state: %w", + input.GetNewStateIndex(), input.GetNewL1Commitment(), err) + return + } + input.Respond(sm_inputs.NewChainFetchStateDiffResults(newState, newChainOfBlocks, oldChainOfBlocks)) + smT.log.Debugf("Input mempool state request for state index %v %s: responded to chain with requested state, "+ + "and block chains of length %v (requested) and %v (old) with common ancestor index %v %s", + input.GetNewStateIndex(), input.GetNewL1Commitment(), len(newChainOfBlocks), len(oldChainOfBlocks), + commonIndex, commonCommitment) + smT.metrics.ChainFetchStateDiffHandled(time.Since(start)) +} + +func (smT *stateManagerGPA) handleSnapshotManagerSnapshotDone(input *sm_inputs.SnapshotManagerSnapshotDone) gpa.OutMessages { + stateIndex := input.GetStateIndex() + commitment := input.GetCommitment() + smT.log.Debugf("Input snapshot manager snapshot %v %s done received, result=%v...", stateIndex, commitment, input.GetResult()) + fetcher := smT.blocksFetched.takeFetcher(input.GetCommitment()) + if fetcher == nil { + smT.log.Warnf("Input snapshot manager snapshot %v %s done: snapshot no longer needed, ignoring it", stateIndex, commitment) + return nil // No messages to send + } + if input.GetResult() != nil { + // TODO: maybe downloading snapshot should be retried? + smT.log.Errorf("Input snapshot manager snapshot %v %s done: retrieving snapshot failed %v", stateIndex, commitment, input.GetResult()) + smT.blocksToFetch.addFetcher(fetcher) + return smT.makeGetBlockRequestMessages(commitment) + } + result := smT.markFetched(fetcher, false) + smT.log.Debugf("Input snapshot manager snapshot %v %s done handled.", stateIndex, commitment) + return result +} + func (smT *stateManagerGPA) getBlock(commitment *state.L1Commitment) state.Block { block := smT.blockCache.GetBlock(commitment) if block != nil { @@ -346,23 +420,23 @@ func (smT *stateManagerGPA) getBlock(commitment *state.L1Commitment) state.Block return block } -func (smT *stateManagerGPA) traceBlockChainWithCallback(lastCommitment *state.L1Commitment, callback blockRequestCallback) gpa.OutMessages { +func (smT *stateManagerGPA) traceBlockChainWithCallback(index uint32, lastCommitment *state.L1Commitment, callback blockRequestCallback) gpa.OutMessages { if smT.store.HasTrieRoot(lastCommitment.TrieRoot()) { - smT.log.Debugf("Tracing block %s chain: the block is already in the store, calling back", lastCommitment) + smT.log.Debugf("Tracing block index %v %s chain: the block is already in the store, calling back", index, lastCommitment) callback.requestCompleted() return nil // No messages to send } if smT.blocksToFetch.addCallback(lastCommitment, callback) { smT.metrics.IncRequestsWaiting() - smT.log.Debugf("Tracing block %s chain: the block is already being fetched", lastCommitment) + smT.log.Debugf("Tracing block index %v %s chain: the block is already being fetched", index, lastCommitment) return nil } if smT.blocksFetched.addCallback(lastCommitment, callback) { smT.metrics.IncRequestsWaiting() - smT.log.Debugf("Tracing block %s chain: the block is already fetched, but cannot yet be committed", lastCommitment) + smT.log.Debugf("Tracing block index %v %s chain: the block is already fetched, but cannot yet be committed", index, lastCommitment) return nil } - fetcher := newBlockFetcherWithCallback(lastCommitment, callback) + fetcher := newBlockFetcherWithCallback(index, lastCommitment, callback) smT.metrics.IncRequestsWaiting() return smT.traceBlockChain(fetcher) } @@ -372,10 +446,16 @@ func (smT *stateManagerGPA) traceBlockChainWithCallback(lastCommitment *state.L1 // requested node has the required block committed into the store, it certainly // has all the blocks before it. func (smT *stateManagerGPA) traceBlockChain(fetcher blockFetcher) gpa.OutMessages { + stateIndex := fetcher.getStateIndex() commitment := fetcher.getCommitment() if !smT.store.HasTrieRoot(commitment.TrieRoot()) { block := smT.blockCache.GetBlock(commitment) if block == nil { + if smT.snapshotExistsFun(stateIndex, commitment) { + smT.output.addSnapshotToLoad(stateIndex, commitment) + smT.blocksFetched.addFetcher(fetcher) + return nil // No messages to send + } smT.blocksToFetch.addFetcher(fetcher) smT.log.Debugf("Block %s is missing, starting fetching it", commitment) return smT.makeGetBlockRequestMessages(commitment) @@ -385,29 +465,29 @@ func (smT *stateManagerGPA) traceBlockChain(fetcher blockFetcher) gpa.OutMessage previousCommitment := block.PreviousL1Commitment() smT.log.Debugf("Tracing block index %v %s -> previous block %v %s", blockIndex, commitment, previousBlockIndex, previousCommitment) if previousCommitment == nil { - result := smT.markFetched(fetcher) + result := smT.markFetched(fetcher, true) smT.log.Debugf("Traced to the initial block") return result } smT.blocksFetched.addFetcher(fetcher) if smT.blocksToFetch.addRelatedFetcher(previousCommitment, fetcher) { smT.log.Debugf("Block %v %s is already being fetched", previousBlockIndex, previousCommitment) - return nil + return nil // No messages to send } if smT.blocksFetched.addRelatedFetcher(previousCommitment, fetcher) { smT.log.Debugf("Block %v %s is already fetched, but cannot yet be committed", previousBlockIndex, previousCommitment) - return nil + return nil // No messages to send } return smT.traceBlockChain(newBlockFetcherWithRelatedFetcher(previousCommitment, fetcher)) } - result := smT.markFetched(fetcher) + result := smT.markFetched(fetcher, false) smT.log.Debugf("Block %s is already committed", commitment) return result } -func (smT *stateManagerGPA) markFetched(fetcher blockFetcher) gpa.OutMessages { +func (smT *stateManagerGPA) markFetched(fetcher blockFetcher, commitInitial bool) gpa.OutMessages { result := gpa.NoMessages() - fetcher.notifyFetched(func(bf blockFetcher) bool { + commitFun := func(bf blockFetcher) bool { commitment := bf.getCommitment() block := smT.blockCache.GetBlock(commitment) if block == nil { @@ -444,7 +524,12 @@ func (smT *stateManagerGPA) markFetched(fetcher blockFetcher) gpa.OutMessages { _ = smT.blocksFetched.takeFetcher(commitment) smT.metrics.SubRequestsWaiting(bf.getCallbacksCount()) return true - }) + } + if commitInitial { + fetcher.commitAndNotifyFetched(commitFun) + } else { + fetcher.notifyFetched(commitFun) + } return result } @@ -493,6 +578,13 @@ func (smT *stateManagerGPA) handleStateManagerTimerTick(now time.Time) gpa.OutMe smT.log.Debugf("Callbacks of block fetchers cleaned, %v waiting callbacks remained, next cleaning not earlier than %v", waitingCallbacks, smT.lastCleanRequestsTime.Add(smT.parameters.StateManagerRequestCleaningPeriod)) } + nextSnapshotsUpdateTime := smT.lastSnapshotsUpdateTime.Add(smT.parameters.SnapshotManagerUpdatePeriod) + if now.After(nextSnapshotsUpdateTime) { + smT.output.setUpdateSnapshots() + smT.lastSnapshotsUpdateTime = now + smT.log.Debugf("Ordered snapshot update, next update not earlier than %v", + smT.lastSnapshotsUpdateTime.Add(smT.parameters.SnapshotManagerUpdatePeriod)) + } smT.metrics.StateManagerTimerTickHandled(time.Since(start)) return result } @@ -507,6 +599,7 @@ func (smT *stateManagerGPA) commitStateDraft(stateDraft state.StateDraft) state. if smT.pruningNeeded() { smT.pruneStore(block.PreviousL1Commitment()) } + smT.output.addBlockCommitted(block.StateIndex(), block.L1Commitment()) return block } diff --git a/packages/chain/statemanager/sm_gpa/state_manager_gpa_test.go b/packages/chain/statemanager/sm_gpa/state_manager_gpa_test.go index c56b888218..9eccd265dd 100644 --- a/packages/chain/statemanager/sm_gpa/state_manager_gpa_test.go +++ b/packages/chain/statemanager/sm_gpa/state_manager_gpa_test.go @@ -8,19 +8,25 @@ import ( "github.com/stretchr/testify/require" + "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_inputs" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/gpa" "github.com/iotaledger/wasp/packages/origin" "github.com/iotaledger/wasp/packages/state" ) +var newEmptySnapshotManagerFun = func(_, _ state.Store, _ sm_gpa_utils.TimeProvider, _ *logger.Logger) sm_snapshots.SnapshotManager { + return sm_snapshots.NewEmptySnapshotManager() +} + // Single node network. 8 blocks are sent to state manager. The result is checked // by checking the store and sending consensus requests, which force the access // of the blocks. func TestBasic(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(1) - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun) defer env.finalize() nodeID := nodeIDs[0] @@ -41,7 +47,7 @@ func TestManyNodes(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(10) smParameters := NewStateManagerParameters() smParameters.StateManagerGetBlockRetry = 100 * time.Millisecond - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() blocks := env.bf.GetBlocks(16, 1) @@ -109,7 +115,7 @@ func TestFull(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(nodeCount) smParameters := NewStateManagerParameters() smParameters.StateManagerGetBlockRetry = 100 * time.Millisecond - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() lastCommitment := origin.L1Commitment(nil, 0) @@ -191,7 +197,7 @@ func TestMempoolRequest(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(nodeCount) smParameters := NewStateManagerParameters() smParameters.StateManagerGetBlockRetry = 100 * time.Millisecond - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() mainBlocks := env.bf.GetBlocks(mainSize, 1) @@ -220,7 +226,7 @@ func TestMempoolRequest(t *testing.T) { // and block 0 as an old block. func TestMempoolRequestFirstStep(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(1) - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun) defer env.finalize() nodeID := nodeIDs[0] @@ -243,7 +249,7 @@ func TestMempoolRequestNoBranch(t *testing.T) { middleBlock := 4 nodeIDs := gpa.MakeTestNodeIDs(1) - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun) defer env.finalize() nodeID := nodeIDs[0] @@ -269,7 +275,7 @@ func TestMempoolRequestBranchFromOrigin(t *testing.T) { branchSize := 8 nodeIDs := gpa.MakeTestNodeIDs(1) - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newEmptySnapshotManagerFun) defer env.finalize() nodeID := nodeIDs[0] @@ -286,6 +292,54 @@ func TestMempoolRequestBranchFromOrigin(t *testing.T) { require.True(env.t, env.sendAndEnsureCompletedChainFetchStateDiff(oldCommitment, newCommitment, oldBlocks, newBlocks, nodeID, 1, 0*time.Second)) } +// Two node setting. +// 1. A batch of 10 consecutive blocks is generated, each of them is sent +// to the first node. +// 2. A batch of 5 consecutive blocks is branched from block 4. Each of +// the blocks is sent to the first node. +// 3. Second node is configured to download snapshot at index 7 of both branches +// 4. A ChainFetchStateDiff request is sent for the branch as a new and +// and original batch as old. +func TestMempoolSnapshotInTheMiddle(t *testing.T) { + batchSize := 10 + branchSize := 5 + branchIndex := 4 + snapshottedIndex := 7 + + nodeIDs := gpa.MakeTestNodeIDs(2) + newMockedSnapshotManagerFun := func(origStore, nodeStore state.Store, timeProvider sm_gpa_utils.TimeProvider, log *logger.Logger) sm_snapshots.SnapshotManager { + return sm_snapshots.NewMockedSnapshotManager(t, 0, origStore, nodeStore, 0*time.Second, 0*time.Second, timeProvider, log) + } + smParameters := NewStateManagerParameters() + smParameters.StateManagerGetBlockRetry = 100 * time.Millisecond + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewMockedTestBlockWAL, newMockedSnapshotManagerFun, smParameters) + defer env.finalize() + + oldBlocks := env.bf.GetBlocks(batchSize, 1) + newBlocks := env.bf.GetBlocksFrom(branchSize, 1, oldBlocks[branchIndex].L1Commitment(), 2) + oldSnapshottedBlock := oldBlocks[snapshottedIndex] + newSnapshottedBlock := newBlocks[snapshottedIndex-branchIndex-1] + snapm1 := env.snapms[nodeIDs[1]].(*sm_snapshots.MockedSnapshotManager) + snapm1.SnapshotReady(sm_snapshots.NewSnapshotInfo(oldSnapshottedBlock.StateIndex(), oldSnapshottedBlock.L1Commitment())) + snapm1.SnapshotReady(sm_snapshots.NewSnapshotInfo(newSnapshottedBlock.StateIndex(), newSnapshottedBlock.L1Commitment())) + snapm1.UpdateAsync() + + env.sendBlocksToNode(nodeIDs[0], 0*time.Second, oldBlocks...) + require.True(env.t, env.ensureStoreContainsBlocksNoWait(nodeIDs[0], oldBlocks)) + + env.sendBlocksToNode(nodeIDs[0], 0*time.Second, newBlocks...) + require.True(env.t, env.ensureStoreContainsBlocksNoWait(nodeIDs[0], newBlocks)) + + oldCommitment := oldBlocks[len(oldBlocks)-1].L1Commitment() + newCommitment := newBlocks[len(newBlocks)-1].L1Commitment() + responseCh := env.sendChainFetchStateDiff(oldCommitment, newCommitment, nodeIDs[1]) + require.True(env.t, snapm1.WaitSnapshotLoadRequestCount(1, 10*time.Millisecond, 100)) // To allow snapshot manager to receive load old state snapshot request + env.sendTimerTickToNodes(100 * time.Millisecond) // To check the response from snapshot manager about loaded old state snapshot; timer tick is not necessary: any input would be suitable + require.True(env.t, snapm1.WaitSnapshotLoadRequestCount(2, 10*time.Millisecond, 100)) // To allow snapshot manager to receive load new state snapshot request + env.sendTimerTickToNodes(100 * time.Millisecond) // To check the response from snapshot manager about loaded new state snapshot; timer tick is not necessary: any input would be suitable + require.True(env.t, env.ensureCompletedChainFetchStateDiff(responseCh, oldBlocks[branchIndex+1:], newBlocks, 10, 100*time.Millisecond)) +} + // Single node setting, pruning leaves 10 historic blocks. // - 11 blocks are added into the store one by one; each time it is checked if // all of the added blocks are in the store (none of them got pruned). @@ -300,7 +354,7 @@ func TestPruningSequentially(t *testing.T) { nodeID := nodeIDs[0] smParameters := NewStateManagerParameters() smParameters.PruningMinStatesToKeep = blocksToKeep - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() blocks := env.bf.GetBlocks(blockCount, 1) @@ -338,7 +392,7 @@ func TestPruningMany(t *testing.T) { nodeID := nodeIDs[0] smParameters := NewStateManagerParameters() smParameters.PruningMinStatesToKeep = blocksToKeep // Also initializes chain with this value in governance contract - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() sm, ok := env.sms[nodeID] @@ -379,7 +433,7 @@ func TestPruningTooMuch(t *testing.T) { smParameters := NewStateManagerParameters() smParameters.PruningMinStatesToKeep = blocksToKeep // Also initializes chain with this value in governance contract smParameters.PruningMaxStatesToDelete = blocksToPrune - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() sm, ok := env.sms[nodeID] @@ -412,6 +466,154 @@ func TestPruningTooMuch(t *testing.T) { } } +// Two nodes setting: first node is making snapshots, the other is using them. +// - 30 blocks are committed to the first node. +// - Update is triggered (in both nodes) and created snapshots are available +// to be used by state manager. +// - The other node is requested to obtain snapshotted state, and several not +// snapshotted states. The results are checked. +func TestSnapshots(t *testing.T) { + blockCount := 30 + snapshotCreatePeriod := uint32(5) + snapshotCreateTime := 1 * time.Second + snapshotLoadTime := 2 * time.Second + snapshotCount := uint32(blockCount) / snapshotCreatePeriod + snapshotCreatedFun := func(index uint32) bool { + return (index+1)%snapshotCreatePeriod == 0 + } + requestedStateIndex1 := uint32(5) + requestedStateIndex2 := uint32(14) + requestedStateIndex3 := uint32(23) + timerTickPeriod := 150 * time.Millisecond + + nodeIDs := gpa.MakeTestNodeIDs(2) + nodeIDFirst := nodeIDs[0] + nodeIDOther := nodeIDs[1] + newEmptyTestBlockWALFun := func(gpa.NodeID) sm_gpa_utils.TestBlockWAL { return sm_gpa_utils.NewEmptyTestBlockWAL() } + newMockedSnapshotManagerFun := func(nodeID gpa.NodeID, origStore, nodeStore state.Store, tp sm_gpa_utils.TimeProvider, log *logger.Logger) sm_snapshots.SnapshotManager { + if nodeID.Equals(nodeIDFirst) { + return sm_snapshots.NewMockedSnapshotManager(t, snapshotCreatePeriod, origStore, nodeStore, snapshotCreateTime, snapshotLoadTime, tp, log) + } + return sm_snapshots.NewMockedSnapshotManager(t, 0, origStore, nodeStore, snapshotCreateTime, snapshotLoadTime, tp, log) + } + smParameters := NewStateManagerParameters() + smParameters.SnapshotManagerUpdatePeriod = 2 * time.Second + env := newVariedTestEnv(t, nodeIDs, newEmptyTestBlockWALFun, newMockedSnapshotManagerFun, smParameters) + snapMFirst := env.snapms[nodeIDFirst].(*sm_snapshots.MockedSnapshotManager) + snapMOther := env.snapms[nodeIDOther].(*sm_snapshots.MockedSnapshotManager) + snapMFirst.SetAfterSnapshotCreated(func(snapshotInfo sm_snapshots.SnapshotInfo) { + <-env.timeProvider.After(100 * time.Millisecond) // Other node knows about the snapshot a bit later + snapMOther.SnapshotReady(snapshotInfo) + }) + defer env.finalize() + + blocks := env.bf.GetBlocks(blockCount, 1) + snapshotInfos := make([]sm_snapshots.SnapshotInfo, len(blocks)) + for i := range snapshotInfos { + snapshotInfos[i] = sm_snapshots.NewSnapshotInfo(blocks[i].StateIndex(), blocks[i].L1Commitment()) + } + type expectedValues struct { + snapshotReady bool // Ready to be picked up by snapshot manager's Update + snapshotExists bool // Already picked up by snapshot manager's Update; available to node + blockCommitted bool + } + checkBlocksInNodeFun := func(expected []expectedValues, nodeID gpa.NodeID) { + snapM, ok := env.snapms[nodeID] + require.True(env.t, ok) + store, ok := env.stores[nodeID] + require.True(env.t, ok) + for i := range expected { + env.t.Logf("Checking snapshot/block index %v at node %v", snapshotInfos[i].StateIndex(), nodeID) + require.Equal(env.t, expected[i].snapshotReady, snapM.(*sm_snapshots.MockedSnapshotManager).IsSnapshotReady(snapshotInfos[i])) + require.Equal(env.t, expected[i].snapshotExists, snapM.SnapshotExists(snapshotInfos[i].StateIndex(), snapshotInfos[i].Commitment())) + require.Equal(env.t, expected[i].blockCommitted, store.HasTrieRoot(snapshotInfos[i].TrieRoot())) + } + } + expectedFirst := make([]expectedValues, len(blocks)) + expectedOther := make([]expectedValues, len(blocks)) + checkBlocksFun := func() { + checkBlocksInNodeFun(expectedFirst, nodeIDFirst) + checkBlocksInNodeFun(expectedOther, nodeIDOther) + } + checkBlocksFun() // At start no blocks/snapshots are in any node + env.sendTimerTickToNodes(0 * time.Second) // Initial timer tick to send first snapshot manager Update request + require.True(env.t, snapMFirst.WaitNodeUpdateCount(1, 10*time.Millisecond, 100)) // Time for first snapshot manager Update request to propagate to snapshot manager (and do nothing) + require.True(env.t, snapMOther.WaitNodeUpdateCount(1, 10*time.Millisecond, 100)) // Time for first snapshot manager Update request to propagate to snapshot manager (and do nothing) + + // Blocks are sent to the first node: they are committed there, snapshots are being produced, but not yet available + env.sendBlocksToNode(nodeIDFirst, 0*time.Second, blocks...) + require.True(env.t, snapMFirst.WaitSnapshotCreateRequestCount(snapshotCount, 10*time.Millisecond, 100)) + for i := range blocks { + expectedFirst[i].blockCommitted = true + } + checkBlocksFun() + + // Time is passing, snapshots are produced and are ready in the first node; Update hasn't picked them up yet + for i := 0; i < 7; i++ { + env.sendTimerTickToNodes(timerTickPeriod) // Timer tick is not necessary; it's just a way to advance artificial timer + } + require.True(env.t, snapMFirst.WaitSnapshotCreatedCount(snapshotCount, 10*time.Millisecond, 100)) // To allow threads, that "create snapshots", to wake up + for i := range blocks { + if snapshotCreatedFun(uint32(i)) { + expectedFirst[i].snapshotReady = true + } + } + checkBlocksFun() + + // Some more time passes, produced snapshots are visible in other node too; Update hasn't picked them up yet + env.sendTimerTickToNodes(timerTickPeriod) // Timer tick is not necessary; it's just a way to advance artificial timer + require.True(env.t, snapMFirst.WaitSnapshotCreateFinalisedCount(snapshotCount, 10*time.Millisecond, 100)) // To allow threads, that "create snapshots", to wake up + for i := range blocks { + expectedOther[i].snapshotReady = expectedFirst[i].snapshotReady + } + checkBlocksFun() + + // More time passes, Update event is triggered in both nodes, snapshots are available for state managers of both nodes + for i := 0; i < 7; i++ { + env.sendTimerTickToNodes(timerTickPeriod) // Only the last timer tick is necessary as it sends Update request to snapshot manager + } + require.True(env.t, snapMFirst.WaitNodeUpdateCount(2, 10*time.Millisecond, 100)) // Time for snapshot manager Update request to propagate to snapshot manager + require.True(env.t, snapMOther.WaitNodeUpdateCount(2, 10*time.Millisecond, 100)) // Time for snapshot manager Update request to propagate to snapshot manager + for i := range blocks { + expectedFirst[i].snapshotExists = expectedFirst[i].snapshotReady + expectedOther[i].snapshotExists = expectedOther[i].snapshotReady + } + checkBlocksFun() + + loadRequestsCount := uint32(0) + sendAndEnsureCompletedConsensusStateProposalWithWaitFun := func(snapshotInfo sm_snapshots.SnapshotInfo) { + respCh := env.sendConsensusStateProposal(snapshotInfo.Commitment(), nodeIDOther) + loadRequestsCount++ + require.True(env.t, snapMOther.WaitSnapshotLoadRequestCount(loadRequestsCount, 10*time.Millisecond, 100)) // Time for load snapshot request to propagate to snapshot manager + for i := 0; i < 14; i++ { + env.sendTimerTickToNodes(timerTickPeriod) // Timer tick is not necessary; it's just a way to advance artificial timer + } + require.True(env.t, snapMOther.WaitSnapshotLoadedCount(loadRequestsCount, 10*time.Millisecond, 100)) // To allow snapshot manager thread to wake up and respond + require.True(env.t, env.ensureCompletedConsensusStateProposal(respCh, 2, timerTickPeriod)) + } + + // Request for other node to have state, which contains snapshot; snapshot is downloaded, no other blocks are committed + require.True(env.t, snapshotCreatedFun(requestedStateIndex2)) + sendAndEnsureCompletedConsensusStateProposalWithWaitFun(snapshotInfos[requestedStateIndex2]) + expectedOther[requestedStateIndex2].blockCommitted = true + checkBlocksFun() + + // Request for other node to have state, which is one index after snapshot; snapshot and the requested block are downloaded + require.True(env.t, snapshotCreatedFun(requestedStateIndex1-1)) + sendAndEnsureCompletedConsensusStateProposalWithWaitFun(snapshotInfos[requestedStateIndex1]) + expectedOther[requestedStateIndex1].blockCommitted = true + expectedOther[requestedStateIndex1-1].blockCommitted = true + checkBlocksFun() + + // Request for other node to have state, which is one index before snapshot; all the blocks up to previous snapshot and the previous snapshot are downloaded + require.True(env.t, snapshotCreatedFun(requestedStateIndex3+1)) + sendAndEnsureCompletedConsensusStateProposalWithWaitFun(snapshotInfos[requestedStateIndex3]) + for i := requestedStateIndex3; i > requestedStateIndex3-snapshotCreatePeriod; i-- { + expectedOther[i].blockCommitted = true + } + checkBlocksFun() +} + // Single node network. Checks if block cache is cleaned via state manager // timer events. func TestBlockCacheCleaningAuto(t *testing.T) { @@ -419,7 +621,7 @@ func TestBlockCacheCleaningAuto(t *testing.T) { smParameters := NewStateManagerParameters() smParameters.BlockCacheBlocksInCacheDuration = 300 * time.Millisecond smParameters.BlockCacheBlockCleaningPeriod = 70 * time.Millisecond - env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, smParameters) + env := newTestEnv(t, nodeIDs, sm_gpa_utils.NewEmptyTestBlockWAL, newEmptySnapshotManagerFun, smParameters) defer env.finalize() nodeID := nodeIDs[0] diff --git a/packages/chain/statemanager/sm_gpa/state_manager_output.go b/packages/chain/statemanager/sm_gpa/state_manager_output.go new file mode 100644 index 0000000000..7684f41450 --- /dev/null +++ b/packages/chain/statemanager/sm_gpa/state_manager_output.go @@ -0,0 +1,60 @@ +package sm_gpa + +import ( + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" + "github.com/iotaledger/wasp/packages/gpa" + "github.com/iotaledger/wasp/packages/state" +) + +type smOutputImpl struct { + blocksCommitted []sm_snapshots.SnapshotInfo + snapshotsToLoad []sm_snapshots.SnapshotInfo + updateSnapshots bool +} + +var ( + _ gpa.Output = &smOutputImpl{} + _ StateManagerOutput = &smOutputImpl{} +) + +func newOutput() StateManagerOutput { + return &smOutputImpl{ + blocksCommitted: make([]sm_snapshots.SnapshotInfo, 0), + snapshotsToLoad: make([]sm_snapshots.SnapshotInfo, 0, 1), + } +} + +func (smoi *smOutputImpl) addBlockCommitted(stateIndex uint32, commitment *state.L1Commitment) { + smoi.blocksCommitted = append(smoi.blocksCommitted, sm_snapshots.NewSnapshotInfo(stateIndex, commitment)) +} + +func (smoi *smOutputImpl) addSnapshotToLoad(stateIndex uint32, commitment *state.L1Commitment) { + smoi.snapshotsToLoad = append(smoi.snapshotsToLoad, sm_snapshots.NewSnapshotInfo(stateIndex, commitment)) +} + +func (smoi *smOutputImpl) setUpdateSnapshots() { + smoi.updateSnapshots = true +} + +func (smoi *smOutputImpl) TakeBlocksCommitted() []sm_snapshots.SnapshotInfo { + result := smoi.blocksCommitted + smoi.blocksCommitted = make([]sm_snapshots.SnapshotInfo, 0) + return result +} + +func (smoi *smOutputImpl) TakeSnapshotToLoad() sm_snapshots.SnapshotInfo { + if len(smoi.snapshotsToLoad) == 0 { + return nil + } + result := smoi.snapshotsToLoad[0] + smoi.snapshotsToLoad = smoi.snapshotsToLoad[1:] + return result +} + +func (smoi *smOutputImpl) TakeUpdateSnapshots() bool { + if smoi.updateSnapshots { + smoi.updateSnapshots = false + return true + } + return false +} diff --git a/packages/chain/statemanager/sm_gpa/state_manager_parameters.go b/packages/chain/statemanager/sm_gpa/state_manager_parameters.go index d8209fbdfc..3fa287a38d 100644 --- a/packages/chain/statemanager/sm_gpa/state_manager_parameters.go +++ b/packages/chain/statemanager/sm_gpa/state_manager_parameters.go @@ -26,6 +26,8 @@ type StateManagerParameters struct { PruningMinStatesToKeep int // On single store pruning attempt at most this number of states will be deleted PruningMaxStatesToDelete int + // How often snapshot manager should update list of known snapshots + SnapshotManagerUpdatePeriod time.Duration TimeProvider sm_gpa_utils.TimeProvider } @@ -46,6 +48,7 @@ func NewStateManagerParameters(tpOpt ...sm_gpa_utils.TimeProvider) StateManagerP StateManagerTimerTickPeriod: 1 * time.Second, PruningMinStatesToKeep: 10000, PruningMaxStatesToDelete: 1000, + SnapshotManagerUpdatePeriod: 5 * time.Minute, TimeProvider: tp, } } diff --git a/packages/chain/statemanager/sm_gpa/test_env.go b/packages/chain/statemanager/sm_gpa/test_env.go index 629a3b6209..21235f1026 100644 --- a/packages/chain/statemanager/sm_gpa/test_env.go +++ b/packages/chain/statemanager/sm_gpa/test_env.go @@ -12,6 +12,7 @@ import ( "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_inputs" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_utils" "github.com/iotaledger/wasp/packages/gpa" "github.com/iotaledger/wasp/packages/isc" @@ -31,14 +32,42 @@ type testEnv struct { timeProvider sm_gpa_utils.TimeProvider sms map[gpa.NodeID]gpa.GPA stores map[gpa.NodeID]state.Store + snapms map[gpa.NodeID]sm_snapshots.SnapshotManager + snaprchs map[gpa.NodeID]<-chan error + snaprsis map[gpa.NodeID]sm_snapshots.SnapshotInfo tc *gpa.TestContext log *logger.Logger } -func newTestEnv(t *testing.T, nodeIDs []gpa.NodeID, createWALFun func() sm_gpa_utils.TestBlockWAL, parametersOpt ...StateManagerParameters) *testEnv { +func newTestEnv( + t *testing.T, + nodeIDs []gpa.NodeID, + createWALFun func() sm_gpa_utils.TestBlockWAL, + createSnapMFun func(origStore, nodeStore state.Store, tp sm_gpa_utils.TimeProvider, log *logger.Logger) sm_snapshots.SnapshotManager, + parametersOpt ...StateManagerParameters, +) *testEnv { + createWALVariedFun := func(gpa.NodeID) sm_gpa_utils.TestBlockWAL { + return createWALFun() + } + createSnapMVariedFun := func(nodeID gpa.NodeID, origStore, nodeStore state.Store, tp sm_gpa_utils.TimeProvider, log *logger.Logger) sm_snapshots.SnapshotManager { + return createSnapMFun(origStore, nodeStore, tp, log) + } + return newVariedTestEnv(t, nodeIDs, createWALVariedFun, createSnapMVariedFun, parametersOpt...) +} + +func newVariedTestEnv( + t *testing.T, + nodeIDs []gpa.NodeID, + createWALFun func(gpa.NodeID) sm_gpa_utils.TestBlockWAL, + createSnapMFun func(nodeID gpa.NodeID, origStore, nodeStore state.Store, tp sm_gpa_utils.TimeProvider, log *logger.Logger) sm_snapshots.SnapshotManager, + parametersOpt ...StateManagerParameters, +) *testEnv { var bf *sm_gpa_utils.BlockFactory sms := make(map[gpa.NodeID]gpa.GPA) stores := make(map[gpa.NodeID]state.Store) + snapms := make(map[gpa.NodeID]sm_snapshots.SnapshotManager) + snaprchs := make(map[gpa.NodeID]<-chan error) + snaprsis := make(map[gpa.NodeID]sm_snapshots.SnapshotInfo) var parameters StateManagerParameters var chainInitParameters dict.Dict if len(parametersOpt) > 0 { @@ -52,29 +81,59 @@ func newTestEnv(t *testing.T, nodeIDs []gpa.NodeID, createWALFun func() sm_gpa_u bf = sm_gpa_utils.NewBlockFactory(t, chainInitParameters) chainID := bf.GetChainID() - log := testlogger.NewLogger(t).Named("c-" + chainID.ShortString()) + log := testlogger.NewLogger(t) parameters.TimeProvider = sm_gpa_utils.NewArtifficialTimeProvider() for _, nodeID := range nodeIDs { var err error smLog := log.Named(nodeID.ShortString()) nr := sm_utils.NewNodeRandomiser(nodeID, nodeIDs, smLog) - wal := createWALFun() + wal := createWALFun(nodeID) store := state.NewStore(mapdb.NewMapDB()) + snapshotManager := createSnapMFun(nodeID, bf.GetStore(), store, parameters.TimeProvider, smLog) + snapshotExistsFun := snapshotManager.SnapshotExists origin.InitChain(store, chainInitParameters, 0) stores[nodeID] = store - sms[nodeID], err = New(chainID, nr, wal, store, mockStateManagerMetrics(), smLog, parameters) + sms[nodeID], err = New(chainID, nr, wal, snapshotExistsFun, store, mockStateManagerMetrics(), smLog, parameters) require.NoError(t, err) + snapms[nodeID] = snapshotManager + snaprchs[nodeID] = nil + snaprsis[nodeID] = nil } - return &testEnv{ + result := &testEnv{ t: t, bf: bf, nodeIDs: nodeIDs, timeProvider: parameters.TimeProvider, sms: sms, + snapms: snapms, + snaprchs: snaprchs, + snaprsis: snaprsis, stores: stores, - tc: gpa.NewTestContext(sms), log: log, } + result.tc = gpa.NewTestContext(sms).WithOutputHandler(func(nodeID gpa.NodeID, outputOrig gpa.Output) { + output, ok := outputOrig.(StateManagerOutput) + require.True(result.t, ok) + result.checkSnapshotsLoaded() + snapshotManager, ok := result.snapms[nodeID] + require.True(result.t, ok) + snapshotRespChannel, ok := result.snaprchs[nodeID] + require.True(result.t, ok) + if snapshotRespChannel == nil { + snapshotInfo := output.TakeSnapshotToLoad() + if snapshotInfo != nil { + result.snaprchs[nodeID] = snapshotManager.LoadSnapshotAsync(snapshotInfo) + result.snaprsis[nodeID] = snapshotInfo + } + } + for _, snapshotInfo := range output.TakeBlocksCommitted() { + snapshotManager.BlockCommittedAsync(snapshotInfo) + } + if output.TakeUpdateSnapshots() { + snapshotManager.UpdateAsync() + } + }) + return result } func (teT *testEnv) finalize() { @@ -93,6 +152,24 @@ func (teT *testEnv) doesNotContainBlock(nodeID gpa.NodeID, block state.Block) { require.False(teT.t, store.HasTrieRoot(block.TrieRoot())) } +func (teT *testEnv) checkSnapshotsLoaded() { + inputs := make(map[gpa.NodeID]gpa.Input) + for nodeID, ch := range teT.snaprchs { + select { + case result, ok := <-ch: + if ok { + snapshotInfo, ok := teT.snaprsis[nodeID] + require.True(teT.t, ok) + input := sm_inputs.NewSnapshotManagerSnapshotDone(snapshotInfo.StateIndex(), snapshotInfo.Commitment(), result) + inputs[nodeID] = input + } + teT.snaprchs[nodeID] = nil + default: + } + } + teT.tc.WithInputs(inputs).RunAll() +} + func (teT *testEnv) sendBlocksToNode(nodeID gpa.NodeID, timeStep time.Duration, blocks ...state.Block) { // If `ConsensusBlockProduced` is sent to the node, the node has definitely obtained all the blocks // needed to commit this block. This is ensured by consensus. @@ -178,16 +255,11 @@ func (teT *testEnv) sendConsensusDecidedState(commitment *state.L1Commitment, no } func (teT *testEnv) ensureCompletedConsensusDecidedState(respChan <-chan state.State, expectedCommitment *state.L1Commitment, maxTimeIterations int, timeStep time.Duration) bool { - expectedState := teT.bf.GetState(expectedCommitment) return teT.ensureTrue("response from ConsensusDecidedState", func() bool { select { case s := <-respChan: - // Should be require.True(teT.t, expected.Equals(s)) - expectedTrieRoot := expectedState.TrieRoot() - receivedTrieRoot := s.TrieRoot() - require.Equal(teT.t, expectedState.BlockIndex(), s.BlockIndex()) - teT.t.Logf("Checking trie roots: expected %s, obtained %s", expectedTrieRoot, receivedTrieRoot) - require.True(teT.t, expectedTrieRoot.Equals(receivedTrieRoot)) + sm_gpa_utils.CheckStateInStore(teT.t, teT.bf.GetStore(), s) + require.True(teT.t, expectedCommitment.TrieRoot().Equals(s.TrieRoot())) return true default: return false @@ -216,14 +288,13 @@ func (teT *testEnv) ensureCompletedChainFetchStateDiff(respChan <-chan *sm_input lastNewBlockTrieRoot := expectedNewBlocks[len(expectedNewBlocks)-1].TrieRoot() teT.t.Logf("Checking trie roots: expected %s, obtained %s", lastNewBlockTrieRoot, newStateTrieRoot) require.True(teT.t, newStateTrieRoot.Equals(lastNewBlockTrieRoot)) + sm_gpa_utils.CheckStateInStore(teT.t, teT.bf.GetStore(), cfsdr.GetNewState()) requireEqualsFun := func(expected, received []state.Block) { teT.t.Logf("\tExpected %v elements, obtained %v elements", len(expected), len(received)) require.Equal(teT.t, len(expected), len(received)) for i := range expected { - expectedCommitment := expected[i].L1Commitment() - receivedCommitment := received[i].L1Commitment() - teT.t.Logf("\tchecking %v-th element: expected %s, received %s", i, expectedCommitment, receivedCommitment) - require.True(teT.t, expectedCommitment.Equals(receivedCommitment)) + teT.t.Logf("\tchecking %v-th element: expected %s, received %s", i, expected[i].L1Commitment(), received[i].L1Commitment()) + sm_gpa_utils.CheckBlocksEqual(teT.t, expected[i], received[i]) } } teT.t.Log("Checking added blocks...") diff --git a/packages/chain/statemanager/sm_snapshots/interface.go b/packages/chain/statemanager/sm_snapshots/interface.go new file mode 100644 index 0000000000..dbb7f8b772 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/interface.go @@ -0,0 +1,48 @@ +package sm_snapshots + +import ( + "io" + + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/trie" +) + +// SnapshotManager is responsible for servicing snapshot related queries in appropriate +// manner. Some of the requests are synchronous, but most of them are asynchronous. They +// can be handled in snapshot manager's thread or in another thread created by snapshot +// manager. +// Snapshot manager keeps and updates on request a list of available snapshots. However, +// only the information that snapshot exists is stored and not the entire snapshot. To +// store/load the snapshot, snapshot manager depends on `snapshotter`. +// Snapshot manager is also responsible for deciding if snapshot has to be created. +type SnapshotManager interface { + UpdateAsync() + BlockCommittedAsync(SnapshotInfo) + SnapshotExists(uint32, *state.L1Commitment) bool + LoadSnapshotAsync(SnapshotInfo) <-chan error +} + +type SnapshotInfo interface { + StateIndex() uint32 + Commitment() *state.L1Commitment + TrieRoot() trie.Hash + BlockHash() state.BlockHash + String() string + Equals(SnapshotInfo) bool +} + +type snapshotManagerCore interface { + createSnapshotsNeeded() bool + handleUpdate() + handleBlockCommitted(SnapshotInfo) + handleLoadSnapshot(SnapshotInfo, chan<- error) +} + +// snapshotter is responsible for moving the snapshot between store and external +// sources/destinations. It can: +// * take required snapshot from the store and write it to some `Writer` (`storeSnapshot` method) +// * read the snapshot from some `Reader` and put it to the store (`loadSnapshot` method). +type snapshotter interface { + storeSnapshot(SnapshotInfo, io.Writer) error + loadSnapshot(SnapshotInfo, io.Reader) error +} diff --git a/packages/chain/statemanager/sm_snapshots/progress_reporter.go b/packages/chain/statemanager/sm_snapshots/progress_reporter.go new file mode 100644 index 0000000000..68673164b0 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/progress_reporter.go @@ -0,0 +1,47 @@ +package sm_snapshots + +import ( + "io" + "time" + + "github.com/dustin/go-humanize" + + "github.com/iotaledger/hive.go/logger" +) + +type progressReporter struct { + log *logger.Logger + header string + lastReport time.Time + + expected uint64 + total uint64 + prevTotal uint64 +} + +var _ io.Writer = &progressReporter{} + +const logStatusPeriodConst = 1 * time.Second + +func NewProgressReporter(log *logger.Logger, header string, expected uint64) io.Writer { + return &progressReporter{ + log: log, + header: header, + lastReport: time.Time{}, + expected: expected, + total: 0, + prevTotal: 0, + } +} + +func (pr *progressReporter) Write(p []byte) (int, error) { + now := time.Now() + timeDiff := now.Sub(pr.lastReport) + if timeDiff >= logStatusPeriodConst { + bps := uint64(float64(pr.total-pr.prevTotal) / timeDiff.Seconds()) + pr.log.Debugf("%s: downloaded %s of %s (%s/s)", pr.header, humanize.Bytes(pr.total), humanize.Bytes(pr.expected), humanize.Bytes(bps)) + pr.lastReport = now + pr.prevTotal = pr.total + } + return len(p), nil +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_info.go b/packages/chain/statemanager/sm_snapshots/snapshot_info.go new file mode 100644 index 0000000000..141823b281 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_info.go @@ -0,0 +1,52 @@ +package sm_snapshots + +import ( + "fmt" + + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/trie" +) + +type snapshotInfoImpl struct { + index uint32 + commitment *state.L1Commitment +} + +var _ SnapshotInfo = &snapshotInfoImpl{} + +func NewSnapshotInfo(index uint32, commitment *state.L1Commitment) SnapshotInfo { + return &snapshotInfoImpl{ + index: index, + commitment: commitment, + } +} + +func (si *snapshotInfoImpl) StateIndex() uint32 { + return si.index +} + +func (si *snapshotInfoImpl) Commitment() *state.L1Commitment { + return si.commitment +} + +func (si *snapshotInfoImpl) TrieRoot() trie.Hash { + return si.Commitment().TrieRoot() +} + +func (si *snapshotInfoImpl) BlockHash() state.BlockHash { + return si.Commitment().BlockHash() +} + +func (si *snapshotInfoImpl) String() string { + return fmt.Sprintf("%v %s", si.StateIndex(), si.Commitment()) +} + +func (si *snapshotInfoImpl) Equals(other SnapshotInfo) bool { + if si == nil { + return other == nil + } + if si.StateIndex() != other.StateIndex() { + return false + } + return si.Commitment().Equals(other.Commitment()) +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_manager.go b/packages/chain/statemanager/sm_snapshots/snapshot_manager.go new file mode 100644 index 0000000000..0255d81b7c --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_manager.go @@ -0,0 +1,442 @@ +package sm_snapshots + +import ( + "bufio" + "context" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/iotaledger/hive.go/ds/shrinkingmap" + "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hive.go/runtime/ioutils" + "github.com/iotaledger/wasp/packages/isc" + "github.com/iotaledger/wasp/packages/shutdown" + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/util" +) + +type commitmentSources struct { + commitment *state.L1Commitment + sources []string +} + +type snapshotManagerImpl struct { + *snapshotManagerRunner + + log *logger.Logger + ctx context.Context + chainID isc.ChainID + + lastIndexSnapshotted uint32 + lastIndexSnapshottedMutex sync.Mutex + createPeriod uint32 + snapshotter snapshotter + + availableSnapshots *shrinkingmap.ShrinkingMap[uint32, *util.SliceStruct[*commitmentSources]] + availableSnapshotsMutex sync.RWMutex + + localPath string + networkPaths []string +} + +var ( + _ snapshotManagerCore = &snapshotManagerImpl{} + _ SnapshotManager = &snapshotManagerImpl{} +) + +const ( + constDownloadTimeout = 10 * time.Minute + constSnapshotIndexHashFileNameSepparator = "-" + constSnapshotFileSuffix = ".snap" + constSnapshotTmpFileSuffix = ".tmp" + constIndexFileName = "INDEX" // Index file contains a new-line separated list of snapshot files + constLocalAddress = "local://" +) + +func NewSnapshotManager( + ctx context.Context, + shutdownCoordinator *shutdown.Coordinator, + chainID isc.ChainID, + createPeriod uint32, + baseLocalPath string, + baseNetworkPaths []string, + store state.Store, + log *logger.Logger, +) (SnapshotManager, error) { + chainIDString := chainID.String() + localPath := filepath.Join(baseLocalPath, chainIDString) + networkPaths := make([]string, len(baseNetworkPaths)) + var err error + for i := range baseNetworkPaths { + networkPaths[i], err = url.JoinPath(baseNetworkPaths[i], chainIDString) + if err != nil { + return nil, fmt.Errorf("cannot append chain ID to network path %s: %v", baseNetworkPaths[i], err) + } + } + snapMLog := log.Named("Snap") + result := &snapshotManagerImpl{ + log: snapMLog, + ctx: ctx, + chainID: chainID, + lastIndexSnapshotted: 0, + lastIndexSnapshottedMutex: sync.Mutex{}, + createPeriod: createPeriod, + snapshotter: newSnapshotter(store), + availableSnapshots: shrinkingmap.New[uint32, *util.SliceStruct[*commitmentSources]](), + availableSnapshotsMutex: sync.RWMutex{}, + localPath: localPath, + networkPaths: networkPaths, + } + if result.createSnapshotsNeeded() { + if err := ioutils.CreateDirectory(localPath, 0o777); err != nil { + return nil, fmt.Errorf("cannot create folder %s: %v", localPath, err) + } + result.cleanTempFiles() // To be able to make snapshots, which were not finished. See comment in `handleBlockCommitted` function + snapMLog.Debugf("Snapshot manager created; folder %v is used for snapshots", localPath) + } else { + snapMLog.Debugf("Snapshot manager created; no snapshots will be produced") + } + result.snapshotManagerRunner = newSnapshotManagerRunner(ctx, shutdownCoordinator, result, snapMLog) + return result, nil +} + +// ------------------------------------- +// Implementations of SnapshotManager interface +// ------------------------------------- + +func (smiT *snapshotManagerImpl) SnapshotExists(stateIndex uint32, commitment *state.L1Commitment) bool { + smiT.availableSnapshotsMutex.RLock() + defer smiT.availableSnapshotsMutex.RUnlock() + + commitments, exists := smiT.availableSnapshots.Get(stateIndex) + if !exists { + return false + } + return commitments.ContainsBy(func(elem *commitmentSources) bool { return elem.commitment.Equals(commitment) && len(elem.sources) > 0 }) +} + +// NOTE: other implementations are inherited from snapshotManagerRunner + +// ------------------------------------- +// Implementations of snapshotManagerCore interface +// ------------------------------------- + +func (smiT *snapshotManagerImpl) createSnapshotsNeeded() bool { + return smiT.createPeriod > 0 +} + +func (smiT *snapshotManagerImpl) handleUpdate() { + result := shrinkingmap.New[uint32, *util.SliceStruct[*commitmentSources]]() + smiT.handleUpdateLocal(result) + smiT.handleUpdateNetwork(result) + + smiT.availableSnapshotsMutex.Lock() + smiT.availableSnapshots = result + smiT.availableSnapshotsMutex.Unlock() +} + +// Snapshot manager makes snapshot of every `period`th state only, if this state hasn't +// been snapshotted before. The snapshot file name includes state index and state hash. +// Snapshot manager first writes the state to temporary file and only then moves it to +// permanent location. Writing is done in separate thread to not interfere with +// normal State manager routine, as it may be lengthy. If snapshot manager detects that +// the temporary file, needed to create a snapshot, already exists, it assumes +// that another go routine is already making a snapshot and returns. For this reason +// it is important to delete all temporary files on snapshot manager start. +func (smiT *snapshotManagerImpl) handleBlockCommitted(snapshotInfo SnapshotInfo) { + stateIndex := snapshotInfo.StateIndex() + var lastIndexSnapshotted uint32 + smiT.lastIndexSnapshottedMutex.Lock() + lastIndexSnapshotted = smiT.lastIndexSnapshotted + smiT.lastIndexSnapshottedMutex.Unlock() + if (stateIndex > lastIndexSnapshotted) && (stateIndex%smiT.createPeriod == 0) { // TODO: what if snapshotted state has been reverted? + commitment := snapshotInfo.Commitment() + smiT.log.Debugf("Creating snapshot %v %s...", stateIndex, commitment) + tmpFileName := tempSnapshotFileName(stateIndex, commitment.BlockHash()) + tmpFilePath := filepath.Join(smiT.localPath, tmpFileName) + exists, _, _ := ioutils.PathExists(tmpFilePath) + if exists { + smiT.log.Debugf("Creating snapshot %v %s: skipped making snapshot as it is already being produced", stateIndex, commitment) + return + } + f, err := os.OpenFile(tmpFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) + if err != nil { + smiT.log.Errorf("Creating snapshot %v %s: failed to create temporary snapshot file %s: %v", stateIndex, commitment, tmpFilePath, err) + f.Close() + return + } + go func() { + defer f.Close() + + smiT.log.Debugf("Creating snapshot %v %s: storing it to file", stateIndex, commitment) + err := smiT.snapshotter.storeSnapshot(snapshotInfo, f) + if err != nil { + smiT.log.Errorf("Creating snapshot %v %s: failed to write snapshot to temporary file %s: %v", stateIndex, commitment, tmpFilePath, err) + return + } + + finalFileName := snapshotFileName(stateIndex, commitment.BlockHash()) + finalFilePath := filepath.Join(smiT.localPath, finalFileName) + err = os.Rename(tmpFilePath, finalFilePath) + if err != nil { + smiT.log.Errorf("Creating snapshot %v %s: failed to move temporary snapshot file %s to permanent location %s: %v", + stateIndex, commitment, tmpFilePath, finalFilePath, err) + return + } + + smiT.lastIndexSnapshottedMutex.Lock() + if stateIndex > smiT.lastIndexSnapshotted { + smiT.lastIndexSnapshotted = stateIndex + } + smiT.lastIndexSnapshottedMutex.Unlock() + smiT.log.Infof("Creating snapshot %v %s: snapshot created in %s", stateIndex, commitment, finalFilePath) + }() + } +} + +func (smiT *snapshotManagerImpl) handleLoadSnapshot(snapshotInfo SnapshotInfo, callback chan<- error) { + smiT.log.Debugf("Loading snapshot %s", snapshotInfo) + // smiT.availableSnapshotsMutex.RLock() // Probably locking is not needed as it happens on the same thread as editing available snapshots + commitments, exists := smiT.availableSnapshots.Get(snapshotInfo.StateIndex()) + // smiT.availableSnapshotsMutex.RUnlock() + if !exists { + err := fmt.Errorf("failed to obtain snapshot commitments of index %v", snapshotInfo.StateIndex()) + smiT.log.Errorf("Loading snapshot %s: %v", snapshotInfo, err) + callback <- err + return + } + cs, exists := commitments.Find(func(c *commitmentSources) bool { + return c.commitment.Equals(snapshotInfo.Commitment()) + }) + if !exists { + err := fmt.Errorf("failed to obtain sources of snapshot %s", snapshotInfo) + smiT.log.Errorf("Loading snapshot %s: %v", snapshotInfo, err) + callback <- err + return + } + + loadSnapshotFun := func(r io.Reader) error { + err := smiT.snapshotter.loadSnapshot(snapshotInfo, r) + if err != nil { + return fmt.Errorf("loading snapshot failed: %v", err) + } + return nil + } + loadLocalFun := func(path string) error { + f, err := os.Open(path) + if err != nil { + return fmt.Errorf("failed to open snapshot file %s", path) + } + defer f.Close() + return loadSnapshotFun(f) + } + loadNetworkFun := func(ctx context.Context, url string) error { + closeFun, reader, err := downloadFile(ctx, smiT.log, url, constDownloadTimeout) + defer closeFun() + if err != nil { + return err + } + return loadSnapshotFun(reader) + } + loadFun := func(source string) error { + if strings.HasPrefix(source, constLocalAddress) { + filePath := strings.TrimPrefix(source, constLocalAddress) + smiT.log.Debugf("Loading snapshot %s: reading local file %s", snapshotInfo, filePath) + return loadLocalFun(filePath) + } + smiT.log.Debugf("Loading snapshot %s: downloading file %s", snapshotInfo, source) + return loadNetworkFun(smiT.ctx, source) + } + + var err error + for _, source := range cs.sources { + e := loadFun(source) + if e == nil { + smiT.log.Debugf("Loading snapshot %s succeeded", snapshotInfo) + callback <- nil + return + } + smiT.log.Errorf("Loading snapshot %s: %v", snapshotInfo, e) + err = errors.Join(err, e) + } + callback <- err +} + +// ------------------------------------- +// Internal functions +// ------------------------------------- + +// This happens strictly before snapshot manager starts to produce new snapshots. +// So there is no way that this function will delete temp file, which is needed. +func (smiT *snapshotManagerImpl) cleanTempFiles() { + tempFileRegExp := tempSnapshotFileNameString("*", "*") + tempFileRegExpWithPath := filepath.Join(smiT.localPath, tempFileRegExp) + tempFiles, err := filepath.Glob(tempFileRegExpWithPath) + if err != nil { + smiT.log.Errorf("Failed to obtain temporary snapshot file list: %v", err) + return + } + + removed := 0 + for _, tempFile := range tempFiles { + err = os.Remove(tempFile) + if err != nil { + smiT.log.Warnf("Failed to remove temporary snapshot file %s: %v", tempFile, err) + } else { + removed++ + } + } + smiT.log.Debugf("Removed %v out of %v temporary snapshot files", removed, len(tempFiles)) +} + +func (smiT *snapshotManagerImpl) handleUpdateLocal(result *shrinkingmap.ShrinkingMap[uint32, *util.SliceStruct[*commitmentSources]]) { + fileRegExp := snapshotFileNameString("*", "*") + fileRegExpWithPath := filepath.Join(smiT.localPath, fileRegExp) + files, err := filepath.Glob(fileRegExpWithPath) + if err != nil { + if smiT.createSnapshotsNeeded() { + smiT.log.Errorf("Update local: failed to obtain snapshot file list: %v", err) + } else { + // If snapshots are not created, snapshot dir is not supposed to exists; unless, it was created by other runs of Wasp or manually + smiT.log.Warnf("Update local: cannot obtain snapshot file list (possibly, it does not exist): %v", err) + } + return + } + snapshotCount := 0 + for _, file := range files { + func() { // Function to make the defers sooner + f, err := os.Open(file) + if err != nil { + smiT.log.Errorf("Update local: failed to open snapshot file %s: %v", file, err) + } + defer f.Close() + snapshotInfo, err := readSnapshotInfo(f) + if err != nil { + smiT.log.Errorf("Update local: failed to read snapshot info from file %s: %v", file, err) + return + } + addSource(result, snapshotInfo, constLocalAddress+file) + snapshotCount++ + }() + } + smiT.log.Debugf("Update local: %v snapshot files found", snapshotCount) +} + +func (smiT *snapshotManagerImpl) handleUpdateNetwork(result *shrinkingmap.ShrinkingMap[uint32, *util.SliceStruct[*commitmentSources]]) { + for _, networkPath := range smiT.networkPaths { + func() { // Function to make the defers sooner + indexFilePath, err := url.JoinPath(networkPath, constIndexFileName) + if err != nil { + smiT.log.Errorf("Update network: unable to join paths %s and %s: %v", networkPath, constIndexFileName, err) + return + } + cancelFun, reader, err := downloadFile(smiT.ctx, smiT.log, indexFilePath, constDownloadTimeout) + defer cancelFun() + if err != nil { + smiT.log.Errorf("Update network: failed to download index file: %v", err) + return + } + snapshotCount := 0 + scanner := bufio.NewScanner(reader) // Defaults to splitting input by newline character + for scanner.Scan() { + func() { + snapshotFileName := scanner.Text() + snapshotFilePath, er := url.JoinPath(networkPath, snapshotFileName) + if er != nil { + smiT.log.Errorf("Update network: unable to join paths %s and %s: %v", networkPath, snapshotFileName, er) + return + } + sCancelFun, sReader, er := downloadFile(smiT.ctx, smiT.log, snapshotFilePath, constDownloadTimeout) + defer sCancelFun() + if er != nil { + smiT.log.Errorf("Update network: failed to download snapshot file: %v", er) + return + } + snapshotInfo, er := readSnapshotInfo(sReader) + if er != nil { + smiT.log.Errorf("Update network: failed to read snapshot info from %s: %v", snapshotFilePath, er) + return + } + addSource(result, snapshotInfo, snapshotFilePath) + snapshotCount++ + }() + } + err = scanner.Err() + if err != nil && !errors.Is(err, io.EOF) { + smiT.log.Errorf("Update network: failed reading index file %s: %v", indexFilePath, err) + } + smiT.log.Debugf("Update network: %v snapshot files found on %s", snapshotCount, networkPath) + }() + } +} + +func tempSnapshotFileName(index uint32, blockHash state.BlockHash) string { + return tempSnapshotFileNameString(fmt.Sprint(index), blockHash.String()) +} + +func tempSnapshotFileNameString(index, blockHash string) string { + return snapshotFileNameString(index, blockHash) + constSnapshotTmpFileSuffix +} + +func snapshotFileName(index uint32, blockHash state.BlockHash) string { + return snapshotFileNameString(fmt.Sprint(index), blockHash.String()) +} + +func snapshotFileNameString(index, blockHash string) string { + return index + constSnapshotIndexHashFileNameSepparator + blockHash + constSnapshotFileSuffix +} + +func downloadFile(ctx context.Context, log *logger.Logger, url string, timeout time.Duration) (context.CancelFunc, io.Reader, error) { + downloadCtx, downloadCtxCancel := context.WithTimeout(ctx, timeout) + + request, err := http.NewRequestWithContext(downloadCtx, http.MethodGet, url, http.NoBody) + if err != nil { + return downloadCtxCancel, nil, fmt.Errorf("failed creating request with url %s: %v", url, err) + } + + response, err := http.DefaultClient.Do(request) //nolint:bodyclose// it will be closed, when the caller calls `cancelFun` + if err != nil { + return downloadCtxCancel, nil, fmt.Errorf("http request to file url %s failed: %v", url, err) + } + cancelFun := func() { + response.Body.Close() + downloadCtxCancel() + } + + if response.StatusCode != http.StatusOK { + return cancelFun, nil, fmt.Errorf("http request to %s got status code %v", url, response.StatusCode) + } + + progressReporter := NewProgressReporter(log, fmt.Sprintf("downloading file %s", url), uint64(response.ContentLength)) + reader := io.TeeReader(response.Body, progressReporter) + return cancelFun, reader, nil +} + +func addSource(result *shrinkingmap.ShrinkingMap[uint32, *util.SliceStruct[*commitmentSources]], si SnapshotInfo, path string) { + makeNewComSourcesFun := func() *commitmentSources { + return &commitmentSources{ + commitment: si.Commitment(), + sources: []string{path}, + } + } + comSourcesArray, exists := result.Get(si.StateIndex()) + if exists { + comSources, ok := comSourcesArray.Find(func(elem *commitmentSources) bool { return elem.commitment.Equals(si.Commitment()) }) + if ok { + comSources.sources = append(comSources.sources, path) + } else { + comSourcesArray.Add(makeNewComSourcesFun()) + } + } else { + comSourcesArray = util.NewSliceStruct[*commitmentSources](makeNewComSourcesFun()) + result.Set(si.StateIndex(), comSourcesArray) + } +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_manager_empty.go b/packages/chain/statemanager/sm_snapshots/snapshot_manager_empty.go new file mode 100644 index 0000000000..84afa12955 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_manager_empty.go @@ -0,0 +1,19 @@ +package sm_snapshots + +import ( + "github.com/iotaledger/wasp/packages/state" +) + +type snapshotManagerEmpty struct{} + +var _ SnapshotManager = &snapshotManagerEmpty{} + +func NewEmptySnapshotManager() SnapshotManager { return &snapshotManagerEmpty{} } +func (*snapshotManagerEmpty) UpdateAsync() {} +func (*snapshotManagerEmpty) BlockCommittedAsync(SnapshotInfo) {} +func (*snapshotManagerEmpty) SnapshotExists(uint32, *state.L1Commitment) bool { return false } +func (*snapshotManagerEmpty) LoadSnapshotAsync(SnapshotInfo) <-chan error { + callback := make(chan error, 1) + callback <- nil + return callback +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_manager_mocked.go b/packages/chain/statemanager/sm_snapshots/snapshot_manager_mocked.go new file mode 100644 index 0000000000..fafcdd31e7 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_manager_mocked.go @@ -0,0 +1,226 @@ +package sm_snapshots + +import ( + "context" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/util" +) + +type MockedSnapshotManager struct { + *snapshotManagerRunner + + t *testing.T + createPeriod uint32 + + availableSnapshots map[uint32]*util.SliceStruct[*state.L1Commitment] + availableSnapshotsMutex sync.RWMutex + readySnapshots map[uint32]*util.SliceStruct[*state.L1Commitment] + readySnapshotsMutex sync.Mutex + + origStore state.Store + nodeStore state.Store + + snapshotCommitTime time.Duration + snapshotLoadTime time.Duration + timeProvider sm_gpa_utils.TimeProvider + afterSnapshotCreatedFun func(SnapshotInfo) + + updateCount atomic.Uint32 + snapshotCreateRequestCount atomic.Uint32 + snapshotCreatedCount atomic.Uint32 + snapshotCreateFinalisedCount atomic.Uint32 + snapshotLoadRequestCount atomic.Uint32 + snapshotLoadedCount atomic.Uint32 +} + +var ( + _ snapshotManagerCore = &MockedSnapshotManager{} + _ SnapshotManager = &MockedSnapshotManager{} +) + +func NewMockedSnapshotManager( + t *testing.T, + createPeriod uint32, + origStore state.Store, + nodeStore state.Store, + snapshotCommitTime time.Duration, + snapshotLoadTime time.Duration, + timeProvider sm_gpa_utils.TimeProvider, + log *logger.Logger, +) *MockedSnapshotManager { + result := &MockedSnapshotManager{ + t: t, + createPeriod: createPeriod, + availableSnapshots: make(map[uint32]*util.SliceStruct[*state.L1Commitment]), + availableSnapshotsMutex: sync.RWMutex{}, + readySnapshots: make(map[uint32]*util.SliceStruct[*state.L1Commitment]), + readySnapshotsMutex: sync.Mutex{}, + origStore: origStore, + nodeStore: nodeStore, + snapshotCommitTime: snapshotCommitTime, + snapshotLoadTime: snapshotLoadTime, + timeProvider: timeProvider, + afterSnapshotCreatedFun: func(SnapshotInfo) {}, + } + result.snapshotManagerRunner = newSnapshotManagerRunner(context.Background(), nil, result, log.Named("MSnap")) + return result +} + +// ------------------------------------- +// Implementations of SnapshotManager interface +// ------------------------------------- + +func (msmT *MockedSnapshotManager) SnapshotExists(stateIndex uint32, commitment *state.L1Commitment) bool { + msmT.availableSnapshotsMutex.RLock() + defer msmT.availableSnapshotsMutex.RUnlock() + + commitments, ok := msmT.availableSnapshots[stateIndex] + if !ok { + return false + } + return commitments.ContainsBy(func(comm *state.L1Commitment) bool { return comm.Equals(commitment) }) +} + +// NOTE: other implementations are inherited from snapshotManagerRunner + +// ------------------------------------- +// Additional API functions of MockedSnapshotManager +// ------------------------------------- + +func (msmT *MockedSnapshotManager) SnapshotReady(snapshotInfo SnapshotInfo) { + msmT.readySnapshotsMutex.Lock() + defer msmT.readySnapshotsMutex.Unlock() + + commitments, ok := msmT.readySnapshots[snapshotInfo.StateIndex()] + if ok { + if !commitments.ContainsBy(func(comm *state.L1Commitment) bool { return comm.Equals(snapshotInfo.Commitment()) }) { + commitments.Add(snapshotInfo.Commitment()) + } + } else { + msmT.readySnapshots[snapshotInfo.StateIndex()] = util.NewSliceStruct(snapshotInfo.Commitment()) + } +} + +func (msmT *MockedSnapshotManager) IsSnapshotReady(snapshotInfo SnapshotInfo) bool { + msmT.readySnapshotsMutex.Lock() + defer msmT.readySnapshotsMutex.Unlock() + + commitments, ok := msmT.readySnapshots[snapshotInfo.StateIndex()] + if !ok { + return false + } + return commitments.ContainsBy(func(elem *state.L1Commitment) bool { return elem.Equals(snapshotInfo.Commitment()) }) +} + +func (msmT *MockedSnapshotManager) SetAfterSnapshotCreated(fun func(SnapshotInfo)) { + msmT.afterSnapshotCreatedFun = fun +} + +func (msmT *MockedSnapshotManager) WaitNodeUpdateCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.updateCount.Load() == count }, sleepTime, maxSleepCount) +} + +func (msmT *MockedSnapshotManager) WaitSnapshotCreateRequestCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.snapshotCreateRequestCount.Load() == count }, sleepTime, maxSleepCount) +} + +func (msmT *MockedSnapshotManager) WaitSnapshotCreatedCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.snapshotCreatedCount.Load() == count }, sleepTime, maxSleepCount) +} + +func (msmT *MockedSnapshotManager) WaitSnapshotCreateFinalisedCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.snapshotCreateFinalisedCount.Load() == count }, sleepTime, maxSleepCount) +} + +func (msmT *MockedSnapshotManager) WaitSnapshotLoadRequestCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.snapshotLoadRequestCount.Load() == count }, sleepTime, maxSleepCount) +} + +func (msmT *MockedSnapshotManager) WaitSnapshotLoadedCount(count uint32, sleepTime time.Duration, maxSleepCount int) bool { + return wait(func() bool { return msmT.snapshotLoadedCount.Load() == count }, sleepTime, maxSleepCount) +} + +// ------------------------------------- +// Implementations of snapshotManagerCore interface +// ------------------------------------- + +func (msmT *MockedSnapshotManager) createSnapshotsNeeded() bool { + return msmT.createPeriod > 0 +} + +func (msmT *MockedSnapshotManager) handleUpdate() { + msmT.readySnapshotsMutex.Lock() + defer msmT.readySnapshotsMutex.Unlock() + + availableSnapshots := make(map[uint32]*util.SliceStruct[*state.L1Commitment]) + count := 0 + for index, commitments := range msmT.readySnapshots { + clonedCommitments := commitments.Clone() + availableSnapshots[index] = clonedCommitments + count += clonedCommitments.Length() + } + msmT.log.Debugf("Update: %v snapshots found", count) + + msmT.availableSnapshotsMutex.Lock() + defer msmT.availableSnapshotsMutex.Unlock() + msmT.availableSnapshots = availableSnapshots + msmT.updateCount.Add(1) +} + +func (msmT *MockedSnapshotManager) handleBlockCommitted(snapshotInfo SnapshotInfo) { + stateIndex := snapshotInfo.StateIndex() + if stateIndex%msmT.createPeriod == 0 { + msmT.snapshotCreateRequestCount.Add(1) + msmT.log.Debugf("Creating snapshot %s...", snapshotInfo) + go func() { + <-msmT.timeProvider.After(msmT.snapshotCommitTime) + msmT.snapshotCreatedCount.Add(1) + msmT.SnapshotReady(snapshotInfo) + msmT.afterSnapshotCreatedFun(snapshotInfo) + msmT.log.Debugf("Creating snapshot %s: completed", snapshotInfo) + msmT.snapshotCreateFinalisedCount.Add(1) + }() + } +} + +func (msmT *MockedSnapshotManager) handleLoadSnapshot(snapshotInfo SnapshotInfo, callback chan<- error) { + msmT.snapshotLoadRequestCount.Add(1) + msmT.log.Debugf("Loading snapshot %s...", snapshotInfo) + commitments, ok := msmT.availableSnapshots[snapshotInfo.StateIndex()] + require.True(msmT.t, ok) + require.True(msmT.t, commitments.ContainsBy(func(elem *state.L1Commitment) bool { + return elem.Equals(snapshotInfo.Commitment()) + })) + <-msmT.timeProvider.After(msmT.snapshotLoadTime) + snapshot := mapdb.NewMapDB() + err := msmT.origStore.TakeSnapshot(snapshotInfo.TrieRoot(), snapshot) + require.NoError(msmT.t, err) + err = msmT.nodeStore.RestoreSnapshot(snapshotInfo.TrieRoot(), snapshot) + require.NoError(msmT.t, err) + callback <- nil + msmT.log.Debugf("Loading snapshot %s: snapshot loaded", snapshotInfo) + msmT.snapshotLoadedCount.Add(1) +} + +func wait(predicateFun func() bool, sleepTime time.Duration, maxSleepCount int) bool { + if predicateFun() { + return true + } + for i := 0; i < maxSleepCount; i++ { + time.Sleep(sleepTime) + if predicateFun() { + return true + } + } + return false +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_manager_runner.go b/packages/chain/statemanager/sm_snapshots/snapshot_manager_runner.go new file mode 100644 index 0000000000..50f6766621 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_manager_runner.go @@ -0,0 +1,117 @@ +package sm_snapshots + +import ( + "context" + + "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/wasp/packages/shutdown" + "github.com/iotaledger/wasp/packages/util/pipe" +) + +type snapshotInfoCallback struct { + SnapshotInfo + callback chan<- error +} + +// To avoid code duplication, a common parts of regular and mocked snapshot managers +// are extracted to `snapshotManagerRunner`. +type snapshotManagerRunner struct { + log *logger.Logger + ctx context.Context + shutdownCoordinator *shutdown.Coordinator + + updatePipe pipe.Pipe[bool] + blockCommittedPipe pipe.Pipe[SnapshotInfo] + loadSnapshotPipe pipe.Pipe[*snapshotInfoCallback] + + core snapshotManagerCore +} + +func newSnapshotManagerRunner( + ctx context.Context, + shutdownCoordinator *shutdown.Coordinator, + core snapshotManagerCore, + log *logger.Logger, +) *snapshotManagerRunner { + result := &snapshotManagerRunner{ + log: log, + ctx: ctx, + shutdownCoordinator: shutdownCoordinator, + updatePipe: pipe.NewInfinitePipe[bool](), + blockCommittedPipe: pipe.NewInfinitePipe[SnapshotInfo](), + loadSnapshotPipe: pipe.NewInfinitePipe[*snapshotInfoCallback](), + core: core, + } + go result.run() + return result +} + +// ------------------------------------- +// Implementations of SnapshotManager interface +// ------------------------------------- + +func (smrT *snapshotManagerRunner) UpdateAsync() { + smrT.updatePipe.In() <- true +} + +func (smrT *snapshotManagerRunner) BlockCommittedAsync(snapshotInfo SnapshotInfo) { + if smrT.core.createSnapshotsNeeded() { + smrT.blockCommittedPipe.In() <- snapshotInfo + } +} + +func (smrT *snapshotManagerRunner) LoadSnapshotAsync(snapshotInfo SnapshotInfo) <-chan error { + callback := make(chan error, 1) + smrT.loadSnapshotPipe.In() <- &snapshotInfoCallback{ + SnapshotInfo: snapshotInfo, + callback: callback, + } + return callback +} + +// ------------------------------------- +// Internal functions +// ------------------------------------- + +func (smrT *snapshotManagerRunner) run() { + updatePipeCh := smrT.updatePipe.Out() + blockCommittedPipeCh := smrT.blockCommittedPipe.Out() + loadSnapshotPipeCh := smrT.loadSnapshotPipe.Out() + for { + if smrT.ctx.Err() != nil { + if smrT.shutdownCoordinator == nil { + return + } + if smrT.shutdownCoordinator.CheckNestedDone() { + smrT.log.Debugf("Stopping snapshot manager, because context was closed") + smrT.shutdownCoordinator.Done() + return + } + } + select { + case _, ok := <-updatePipeCh: + if ok { + smrT.core.handleUpdate() + } else { + updatePipeCh = nil + } + case snapshotInfo, ok := <-blockCommittedPipeCh: + if ok { + smrT.core.handleBlockCommitted(snapshotInfo) + } else { + blockCommittedPipeCh = nil + } + case snapshotInfoC, ok := <-loadSnapshotPipeCh: + if ok { + func() { + defer close(snapshotInfoC.callback) + smrT.core.handleLoadSnapshot(snapshotInfoC.SnapshotInfo, snapshotInfoC.callback) + }() + } else { + loadSnapshotPipeCh = nil + } + case <-smrT.ctx.Done(): + continue + } + } +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_manager_test.go b/packages/chain/statemanager/sm_snapshots/snapshot_manager_test.go new file mode 100644 index 0000000000..842ea18cea --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_manager_test.go @@ -0,0 +1,167 @@ +package sm_snapshots + +import ( + "bufio" + "context" + "fmt" + "net/http" + "os" + "path/filepath" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hive.go/logger" + "github.com/iotaledger/hive.go/runtime/ioutils" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/isc" + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/testutil/testlogger" +) + +const localSnapshotsPathConst = "testSnapshots" + +func TestSnapshotManagerLocal(t *testing.T) { + createFun := func(chainID isc.ChainID, store state.Store, log *logger.Logger) SnapshotManager { + snapshotManager, err := NewSnapshotManager(context.Background(), nil, chainID, 0, localSnapshotsPathConst, []string{}, store, log) + require.NoError(t, err) + return snapshotManager + } + defer cleanupAfterTest(t) + + testSnapshotManagerSimple(t, createFun, func(isc.ChainID, []SnapshotInfo) {}) +} + +func TestSnapshotManagerNetwork(t *testing.T) { + log := testlogger.NewLogger(t) + defer log.Sync() + + err := ioutils.CreateDirectory(localSnapshotsPathConst, 0o777) + require.NoError(t, err) + + port := ":9999" + handler := http.FileServer(http.Dir(localSnapshotsPathConst)) + go http.ListenAndServe(port, handler) + + createFun := func(chainID isc.ChainID, store state.Store, log *logger.Logger) SnapshotManager { + networkPaths := []string{"http://localhost" + port + "/"} + snapshotManager, err := NewSnapshotManager(context.Background(), nil, chainID, 0, "nonexistent", networkPaths, store, log) + require.NoError(t, err) + return snapshotManager + } + defer cleanupAfterTest(t) + + createIndexFileFun := func(chainID isc.ChainID, snapshotInfos []SnapshotInfo) { + indexFilePath := filepath.Join(localSnapshotsPathConst, chainID.String(), constIndexFileName) + f, err := os.OpenFile(indexFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) + require.NoError(t, err) + defer f.Close() + w := bufio.NewWriter(f) + for _, snapshotInfo := range snapshotInfos { + w.WriteString(snapshotFileName(snapshotInfo.StateIndex(), snapshotInfo.BlockHash()) + "\n") + } + w.Flush() + } + testSnapshotManagerSimple(t, createFun, createIndexFileFun) +} + +func testSnapshotManagerSimple( + t *testing.T, + createNewNodeFun func(isc.ChainID, state.Store, *logger.Logger) SnapshotManager, + snapshotsAvailableFun func(isc.ChainID, []SnapshotInfo), +) { + log := testlogger.NewLogger(t) + defer log.Sync() + + numberOfBlocks := 10 + snapshotCreatePeriod := 2 + + var err error + factory := sm_gpa_utils.NewBlockFactory(t) + blocks := factory.GetBlocks(numberOfBlocks, 1) + storeOrig := factory.GetStore() + snapshotManagerOrig, err := NewSnapshotManager(context.Background(), nil, factory.GetChainID(), uint32(snapshotCreatePeriod), localSnapshotsPathConst, []string{}, storeOrig, log) + require.NoError(t, err) + + // "Running" node, making snapshots + for _, block := range blocks { + snapshotManagerOrig.BlockCommittedAsync(NewSnapshotInfo(block.StateIndex(), block.L1Commitment())) + } + for i := snapshotCreatePeriod - 1; i < numberOfBlocks; i += snapshotCreatePeriod { + require.True(t, waitForBlock(t, snapshotManagerOrig, blocks[i], 10, 50*time.Millisecond)) + } + createdSnapshots := make([]SnapshotInfo, 0) + for _, block := range blocks { + exists := snapshotManagerOrig.SnapshotExists(block.StateIndex(), block.L1Commitment()) + if block.StateIndex()%uint32(snapshotCreatePeriod) == 0 { + require.True(t, exists) + createdSnapshots = append(createdSnapshots, NewSnapshotInfo(block.StateIndex(), block.L1Commitment())) + } else { + require.False(t, exists) + } + } + snapshotsAvailableFun(factory.GetChainID(), createdSnapshots) + + // Node is restarted + storeNew := state.NewStore(mapdb.NewMapDB()) + snapshotManagerNew := createNewNodeFun(factory.GetChainID(), storeNew, log) + + // Wait for node to read the list of snapshots + lastBlock := blocks[len(blocks)-1] + require.True(t, waitForBlock(t, snapshotManagerNew, lastBlock, 10, 50*time.Millisecond)) + require.True(t, loadAndWaitLoaded(t, snapshotManagerNew, NewSnapshotInfo(lastBlock.StateIndex(), lastBlock.L1Commitment()), 10, 50*time.Millisecond)) + + // Check the loaded snapshot + for i := 0; i < len(blocks)-1; i++ { + require.False(t, storeNew.HasTrieRoot(blocks[i].TrieRoot())) + } + require.True(t, storeNew.HasTrieRoot(lastBlock.TrieRoot())) + + sm_gpa_utils.CheckBlockInStore(t, storeNew, lastBlock) + sm_gpa_utils.CheckStateInStores(t, storeOrig, storeNew, lastBlock.L1Commitment()) +} + +func waitForBlock(t *testing.T, snapshotManager SnapshotManager, block state.Block, maxIterations int, sleep time.Duration) bool { + updateAndWaitFun := func() { + snapshotManager.UpdateAsync() + time.Sleep(sleep) + } + snapshotExistsFun := func() bool { return snapshotManager.SnapshotExists(block.StateIndex(), block.L1Commitment()) } + return ensureTrue(t, fmt.Sprintf("block %v to be committed", block.StateIndex()), snapshotExistsFun, maxIterations, updateAndWaitFun) +} + +func loadAndWaitLoaded(t *testing.T, snapshotManager SnapshotManager, snapshotInfo SnapshotInfo, maxIterations int, sleep time.Duration) bool { + respChan := snapshotManager.LoadSnapshotAsync(snapshotInfo) + loadCompletedFun := func() bool { + select { + case result := <-respChan: + require.NoError(t, result) + return true + default: + return false + } + } + waitFun := func() { time.Sleep(sleep) } + return ensureTrue(t, fmt.Sprintf("state %v to be loaded", snapshotInfo.StateIndex()), loadCompletedFun, maxIterations, waitFun) +} + +func ensureTrue(t *testing.T, title string, predicate func() bool, maxIterations int, step func()) bool { + if predicate() { + return true + } + for i := 1; i < maxIterations; i++ { + t.Logf("Waiting for %s iteration %v", title, i) + step() + if predicate() { + return true + } + } + return false +} + +func cleanupAfterTest(t *testing.T) { + err := os.RemoveAll(localSnapshotsPathConst) + require.NoError(t, err) +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshot_store_test.go b/packages/chain/statemanager/sm_snapshots/snapshot_store_test.go new file mode 100644 index 0000000000..b22cd75258 --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshot_store_test.go @@ -0,0 +1,98 @@ +package sm_snapshots + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/state" +) + +func TestNewerSnapshotKeepsOlderSnapshot(t *testing.T) { + twoSnapshotsCheckEnds(t, func(t *testing.T, _storeOrig, storeNew state.Store, intermediateSnapshot, lastSnapshot kvstore.KVStore, blocks []state.Block) { + intermediateTrieRoot := blocks[0].TrieRoot() + lastTrieRoot := blocks[len(blocks)-1].TrieRoot() + + err := storeNew.RestoreSnapshot(intermediateTrieRoot, intermediateSnapshot) + require.NoError(t, err) + require.True(t, storeNew.HasTrieRoot(intermediateTrieRoot)) + + err = storeNew.RestoreSnapshot(lastTrieRoot, lastSnapshot) + require.NoError(t, err) + require.True(t, storeNew.HasTrieRoot(intermediateTrieRoot)) + require.True(t, storeNew.HasTrieRoot(lastTrieRoot)) + }) +} + +func TestOlderSnapshotKeepsNewerSnapshot(t *testing.T) { + twoSnapshotsCheckEnds(t, func(t *testing.T, _storeOrig, storeNew state.Store, intermediateSnapshot, lastSnapshot kvstore.KVStore, blocks []state.Block) { + intermediateTrieRoot := blocks[0].TrieRoot() + lastTrieRoot := blocks[len(blocks)-1].TrieRoot() + + err := storeNew.RestoreSnapshot(lastTrieRoot, lastSnapshot) + require.NoError(t, err) + require.True(t, storeNew.HasTrieRoot(lastTrieRoot)) + + err = storeNew.RestoreSnapshot(intermediateTrieRoot, intermediateSnapshot) + require.NoError(t, err) + require.True(t, storeNew.HasTrieRoot(intermediateTrieRoot)) + require.True(t, storeNew.HasTrieRoot(lastTrieRoot)) + }) +} + +func TestFillTheBlocksBetweenSnapshots(t *testing.T) { + twoSnapshotsCheckEnds(t, func(t *testing.T, storeOrig, storeNew state.Store, intermediateSnapshot, lastSnapshot kvstore.KVStore, blocks []state.Block) { + intermediateTrieRoot := blocks[0].TrieRoot() + lastTrieRoot := blocks[len(blocks)-1].TrieRoot() + err := storeNew.RestoreSnapshot(lastTrieRoot, lastSnapshot) + require.NoError(t, err) + err = storeNew.RestoreSnapshot(intermediateTrieRoot, intermediateSnapshot) + require.NoError(t, err) + require.True(t, storeNew.HasTrieRoot(intermediateTrieRoot)) + require.True(t, storeNew.HasTrieRoot(lastTrieRoot)) + for i := 1; i < len(blocks); i++ { + stateDraft, err := storeNew.NewEmptyStateDraft(blocks[i].PreviousL1Commitment()) + require.NoError(t, err) + blocks[i].Mutations().ApplyTo(stateDraft) + block := storeNew.Commit(stateDraft) + require.True(t, blocks[i].TrieRoot().Equals(block.TrieRoot())) + require.True(t, blocks[i].Hash().Equals(block.Hash())) + } + for i := 1; i < len(blocks)-1; i++ { // blocks[i] and blocsk[len(blocks)-1] will be checked in `twoSnapshotsCheckEnds` + sm_gpa_utils.CheckBlockInStore(t, storeNew, blocks[i]) + sm_gpa_utils.CheckStateInStores(t, storeOrig, storeNew, blocks[i].L1Commitment()) + } + }) +} + +func twoSnapshotsCheckEnds(t *testing.T, performTestFun func(t *testing.T, storeOrig, storeNew state.Store, intermediateSnapshot, lastSnapshot kvstore.KVStore, blocks []state.Block)) { + numberOfBlocks := 10 + intermediateBlockIndex := 4 + + factory := sm_gpa_utils.NewBlockFactory(t) + blocks := factory.GetBlocks(numberOfBlocks, 1) + storeOrig := factory.GetStore() + storeNew := state.NewStore(mapdb.NewMapDB()) + + intermediateBlock := blocks[intermediateBlockIndex] + intermediateCommitment := intermediateBlock.L1Commitment() + intermediateSnapshot := mapdb.NewMapDB() + err := storeOrig.TakeSnapshot(intermediateCommitment.TrieRoot(), intermediateSnapshot) + require.NoError(t, err) + + lastBlock := blocks[len(blocks)-1] + lastCommitment := lastBlock.L1Commitment() + lastSnapshot := mapdb.NewMapDB() + err = storeOrig.TakeSnapshot(lastCommitment.TrieRoot(), lastSnapshot) + require.NoError(t, err) + + performTestFun(t, storeOrig, storeNew, intermediateSnapshot, lastSnapshot, blocks[intermediateBlockIndex:]) + + sm_gpa_utils.CheckBlockInStore(t, storeNew, intermediateBlock) + sm_gpa_utils.CheckStateInStores(t, storeOrig, storeNew, intermediateCommitment) + sm_gpa_utils.CheckBlockInStore(t, storeNew, lastBlock) + sm_gpa_utils.CheckStateInStores(t, storeOrig, storeNew, lastCommitment) +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshotter.go b/packages/chain/statemanager/sm_snapshots/snapshotter.go new file mode 100644 index 0000000000..272e1183aa --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshotter.go @@ -0,0 +1,177 @@ +package sm_snapshots + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + + "github.com/iotaledger/hive.go/kvstore" + "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/wasp/packages/state" +) + +type snapshotterImpl struct { + store state.Store +} + +var _ snapshotter = &snapshotterImpl{} + +const constLengthArrayLength = 4 // bytes + +func newSnapshotter(store state.Store) snapshotter { + return &snapshotterImpl{store: store} +} + +func (sn *snapshotterImpl) storeSnapshot(snapshotInfo SnapshotInfo, w io.Writer) error { + snapshot := mapdb.NewMapDB() + err := sn.store.TakeSnapshot(snapshotInfo.TrieRoot(), snapshot) + if err != nil { + return fmt.Errorf("failed to read store: %w", err) + } + err = writeSnapshot(snapshotInfo, snapshot, w) + if err != nil { + return fmt.Errorf("failed writing snapshot: %w", err) + } + return nil +} + +func (sn *snapshotterImpl) loadSnapshot(snapshotInfo SnapshotInfo, r io.Reader) error { + readSnapshotInfo, snapshot, err := readSnapshot(r) + if err != nil { + return fmt.Errorf("failed reading snapshot: %w", err) + } + if !readSnapshotInfo.Equals(snapshotInfo) { + return fmt.Errorf("snapshot read %s is different than expected %v", readSnapshotInfo, snapshotInfo) + } + err = sn.store.RestoreSnapshot(readSnapshotInfo.TrieRoot(), snapshot) + if err != nil { + return fmt.Errorf("failed restoring snapshot: %w", err) + } + return nil +} + +func writeSnapshot(snapshotInfo SnapshotInfo, snapshot kvstore.KVStore, w io.Writer) error { + indexArray := make([]byte, 4) // Size of block index, which is of type uint32: 4 bytes + binary.LittleEndian.PutUint32(indexArray, snapshotInfo.StateIndex()) + err := writeBytes(indexArray, w) + if err != nil { + return fmt.Errorf("failed writing block index %v: %w", snapshotInfo.StateIndex(), err) + } + + trieRootBytes := snapshotInfo.Commitment().Bytes() + err = writeBytes(trieRootBytes, w) + if err != nil { + return fmt.Errorf("failed writing L1 commitment %s: %w", snapshotInfo.Commitment(), err) + } + + iterErr := snapshot.Iterate(kvstore.EmptyPrefix, func(key kvstore.Key, value kvstore.Value) bool { + e := writeBytes(key, w) + if e != nil { + err = fmt.Errorf("failed writing key %v: %w", key, e) + return false + } + + e = writeBytes(value, w) + if e != nil { + err = fmt.Errorf("failed writing key's %v value %v: %w", key, value, e) + return false + } + + return true + }) + + if iterErr != nil { + return iterErr + } + + return err +} + +func readSnapshotInfo(r io.Reader) (SnapshotInfo, error) { + indexArray, err := readBytes(r) + if err != nil { + return nil, fmt.Errorf("failed to read block index: %w", err) + } + if len(indexArray) != 4 { // Size of block index, which is of type uint32: 4 bytes + return nil, fmt.Errorf("block index is %v instead of 4 bytes", len(indexArray)) + } + index := binary.LittleEndian.Uint32(indexArray) + + trieRootArray, err := readBytes(r) + if err != nil { + return nil, fmt.Errorf("failed to read trie root: %w", err) + } + commitment, err := state.L1CommitmentFromBytes(trieRootArray) + if err != nil { + return nil, fmt.Errorf("failed to parse L1 commitment: %w", err) + } + + return NewSnapshotInfo(index, commitment), nil +} + +func readSnapshot(r io.Reader) (SnapshotInfo, kvstore.KVStore, error) { + snapshotInfo, err := readSnapshotInfo(r) + if err != nil { + return nil, nil, err + } + snapshot := mapdb.NewMapDB() + for key, err := readBytes(r); !errors.Is(err, io.EOF); key, err = readBytes(r) { + if err != nil { + return nil, nil, fmt.Errorf("failed to read key: %w", err) + } + + value, err := readBytes(r) + if err != nil { + return nil, nil, fmt.Errorf("failed to read value of key %v: %w", key, err) + } + + err = snapshot.Set(key, value) + if err != nil { + return nil, nil, fmt.Errorf("failed to set key's %v value %v to snapshot: %w", key, value, err) + } + } + return snapshotInfo, snapshot, nil +} + +func writeBytes(bytes []byte, w io.Writer) error { + lengthArray := make([]byte, constLengthArrayLength) + binary.LittleEndian.PutUint32(lengthArray, uint32(len(bytes))) + n, err := w.Write(lengthArray) + if n != constLengthArrayLength { + return fmt.Errorf("only %v of total %v bytes of length written", n, constLengthArrayLength) + } + if err != nil { + return fmt.Errorf("failed writing length: %w", err) + } + + n, err = w.Write(bytes) + if n != len(bytes) { + return fmt.Errorf("only %v of total %v bytes of array written", n, len(bytes)) + } + if err != nil { + return fmt.Errorf("failed writing array: %w", err) + } + + return nil +} + +func readBytes(r io.Reader) ([]byte, error) { + w := new(bytes.Buffer) + read, err := io.CopyN(w, r, constLengthArrayLength) + lengthArray := w.Bytes() + if err != nil { + return nil, fmt.Errorf("read only %v bytes out of %v of length, error: %w", read, constLengthArrayLength, err) + } + + length := int64(binary.LittleEndian.Uint32(lengthArray)) + w = new(bytes.Buffer) + read, err = io.CopyN(w, r, length) + array := w.Bytes() + if err != nil { + return nil, fmt.Errorf("only %v of %v bytes of array read, error: %w", read, len(array), err) + } + + return array, nil +} diff --git a/packages/chain/statemanager/sm_snapshots/snapshotter_test.go b/packages/chain/statemanager/sm_snapshots/snapshotter_test.go new file mode 100644 index 0000000000..2af5001b0f --- /dev/null +++ b/packages/chain/statemanager/sm_snapshots/snapshotter_test.go @@ -0,0 +1,48 @@ +package sm_snapshots + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/state" + "github.com/iotaledger/wasp/packages/testutil/testlogger" +) + +func TestWriteReadDifferentStores(t *testing.T) { + log := testlogger.NewLogger(t) + defer log.Sync() + + var err error + numberOfBlocks := 10 + factory := sm_gpa_utils.NewBlockFactory(t) + blocks := factory.GetBlocks(numberOfBlocks, 1) + lastBlock := blocks[numberOfBlocks-1] + lastCommitment := lastBlock.L1Commitment() + snapshotInfo := NewSnapshotInfo(blocks[numberOfBlocks-1].StateIndex(), lastCommitment) + snapshotterOrig := newSnapshotter(factory.GetStore()) + fileName := "TestWriteReadDifferentStores.snap" + f, err := os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) + require.NoError(t, err) + err = snapshotterOrig.storeSnapshot(snapshotInfo, f) + require.NoError(t, err) + err = f.Close() + require.NoError(t, err) + + store := state.NewStore(mapdb.NewMapDB()) + snapshotterNew := newSnapshotter(store) + f, err = os.Open(fileName) + require.NoError(t, err) + err = snapshotterNew.loadSnapshot(snapshotInfo, f) + require.NoError(t, err) + err = f.Close() + require.NoError(t, err) + err = os.Remove(fileName) + require.NoError(t, err) + + sm_gpa_utils.CheckBlockInStore(t, store, lastBlock) + sm_gpa_utils.CheckStateInStores(t, factory.GetStore(), store, lastCommitment) +} diff --git a/packages/chain/statemanager/sm_utils/node_randomiser.go b/packages/chain/statemanager/sm_utils/node_randomiser.go index c719afe013..74fa605f99 100644 --- a/packages/chain/statemanager/sm_utils/node_randomiser.go +++ b/packages/chain/statemanager/sm_utils/node_randomiser.go @@ -28,7 +28,7 @@ func NewNodeRandomiserNoInit(me gpa.NodeID, log *logger.Logger) NodeRandomiser { me: me, nodeIDs: nil, // Will be set in result.UpdateNodeIDs([]gpa.NodeID). permutation: nil, // Will be set in result.UpdateNodeIDs([]gpa.NodeID). - log: log.Named("nr"), + log: log.Named("NR"), } } diff --git a/packages/chain/statemanager/state_manager.go b/packages/chain/statemanager/state_manager.go index eca9dbe217..61d7ab6919 100644 --- a/packages/chain/statemanager/state_manager.go +++ b/packages/chain/statemanager/state_manager.go @@ -12,6 +12,7 @@ import ( "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_inputs" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_utils" "github.com/iotaledger/wasp/packages/cryptolib" "github.com/iotaledger/wasp/packages/gpa" @@ -85,6 +86,9 @@ type stateManager struct { messagePipe pipe.Pipe[*peering.PeerMessageIn] nodePubKeysPipe pipe.Pipe[*reqChainNodesUpdated] preliminaryBlockPipe pipe.Pipe[*reqPreliminaryBlock] + snapshotManager sm_snapshots.SnapshotManager + snapshotRespChannel <-chan error + snapshotRespInfo sm_snapshots.SnapshotInfo wal sm_gpa_utils.BlockWAL net peering.NetworkProvider netPeeringID peering.PeeringID @@ -111,6 +115,7 @@ func New( peerPubKeys []*cryptolib.PublicKey, net peering.NetworkProvider, wal sm_gpa_utils.BlockWAL, + snapshotManager sm_snapshots.SnapshotManager, store state.Store, shutdownCoordinator *shutdown.Coordinator, metrics *metrics.ChainStateManagerMetrics, @@ -118,14 +123,18 @@ func New( log *logger.Logger, parameters sm_gpa.StateManagerParameters, ) (StateMgr, error) { - nr := sm_utils.NewNodeRandomiserNoInit(gpa.NodeIDFromPublicKey(me), log) - stateManagerGPA, err := sm_gpa.New(chainID, nr, wal, store, metrics, log, parameters) + smLog := log.Named("SM") + nr := sm_utils.NewNodeRandomiserNoInit(gpa.NodeIDFromPublicKey(me), smLog) + snapshotExistsFun := func(stateIndex uint32, commitment *state.L1Commitment) bool { + return snapshotManager.SnapshotExists(stateIndex, commitment) + } + stateManagerGPA, err := sm_gpa.New(chainID, nr, wal, snapshotExistsFun, store, metrics, smLog, parameters) if err != nil { - log.Errorf("failed to create state manager GPA: %w", err) + smLog.Errorf("failed to create state manager GPA: %w", err) return nil, err } result := &stateManager{ - log: log, + log: smLog, chainID: chainID, stateManagerGPA: stateManagerGPA, nodeRandomiser: nr, @@ -133,6 +142,7 @@ func New( messagePipe: pipe.NewInfinitePipe[*peering.PeerMessageIn](), nodePubKeysPipe: pipe.NewInfinitePipe[*reqChainNodesUpdated](), preliminaryBlockPipe: pipe.NewInfinitePipe[*reqPreliminaryBlock](), + snapshotManager: snapshotManager, wal: wal, net: net, netPeeringID: peering.HashPeeringIDFromBytes(chainID.Bytes(), []byte("StateManager")), // ChainID × StateManager @@ -274,6 +284,11 @@ func (smT *stateManager) run() { //nolint:gocyclo } else { preliminaryBlockPipeCh = nil } + case result, ok := <-smT.snapshotRespChannel: + if ok { + smT.handleSnapshotDone(result) + } + smT.snapshotRespChannel = nil case now, ok := <-timerTickCh: if ok { smT.handleTimerTick(now) @@ -294,6 +309,7 @@ func (smT *stateManager) run() { //nolint:gocyclo func (smT *stateManager) handleInput(input gpa.Input) { outMsgs := smT.stateManagerGPA.Input(input) smT.sendMessages(outMsgs) + smT.handleOutput() } func (smT *stateManager) handleMessage(peerMsg *peering.PeerMessageIn) { @@ -305,6 +321,24 @@ func (smT *stateManager) handleMessage(peerMsg *peering.PeerMessageIn) { msg.SetSender(gpa.NodeIDFromPublicKey(peerMsg.SenderPubKey)) outMsgs := smT.stateManagerGPA.Message(msg) smT.sendMessages(outMsgs) + smT.handleOutput() +} + +func (smT *stateManager) handleOutput() { + output := smT.stateManagerGPA.Output().(sm_gpa.StateManagerOutput) + if smT.snapshotRespChannel == nil { + snapshotInfo := output.TakeSnapshotToLoad() + if snapshotInfo != nil { + smT.snapshotRespChannel = smT.snapshotManager.LoadSnapshotAsync(snapshotInfo) + smT.snapshotRespInfo = snapshotInfo + } + } + for _, snapshotInfo := range output.TakeBlocksCommitted() { + smT.snapshotManager.BlockCommittedAsync(snapshotInfo) + } + if output.TakeUpdateSnapshots() { + smT.snapshotManager.UpdateAsync() + } } func (smT *stateManager) handleNodePublicKeys(req *reqChainNodesUpdated) { @@ -356,6 +390,10 @@ func (smT *stateManager) handlePreliminaryBlock(msg *reqPreliminaryBlock) { msg.Respond(nil) } +func (smT *stateManager) handleSnapshotDone(result error) { + smT.handleInput(sm_inputs.NewSnapshotManagerSnapshotDone(smT.snapshotRespInfo.StateIndex(), smT.snapshotRespInfo.Commitment(), result)) +} + func (smT *stateManager) handleTimerTick(now time.Time) { smT.handleInput(sm_inputs.NewStateManagerTimerTick(now)) } diff --git a/packages/chain/statemanager/state_manager_test.go b/packages/chain/statemanager/state_manager_test.go index d75046143c..81a108f800 100644 --- a/packages/chain/statemanager/state_manager_test.go +++ b/packages/chain/statemanager/state_manager_test.go @@ -10,8 +10,10 @@ import ( "github.com/stretchr/testify/require" "github.com/iotaledger/hive.go/kvstore/mapdb" + "github.com/iotaledger/hive.go/logger" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/cryptolib" "github.com/iotaledger/wasp/packages/isc" "github.com/iotaledger/wasp/packages/metrics" @@ -22,7 +24,7 @@ import ( "github.com/iotaledger/wasp/packages/testutil/testpeers" ) -func TestCruelWorld(t *testing.T) { +func TestCruelWorld(t *testing.T) { //nolint:gocyclo log := testlogger.NewLogger(t) defer log.Sync() @@ -39,6 +41,11 @@ func TestCruelWorld(t *testing.T) { consensusDecidedStateCount := 50 mempoolStateRequestDelay := 50 * time.Millisecond mempoolStateRequestCount := 50 + snapshotCreateNodeCount := 2 + snapshotCreatePeriod := uint32(7) + snapshotCommitTime := 170 * time.Millisecond + snapshotLoadTime := 320 * time.Millisecond + snapshotUpdatePeriod := 510 * time.Millisecond peeringURLs, peerIdentities := testpeers.SetupKeys(uint16(nodeCount)) peerPubKeys := make([]*cryptolib.PublicKey, len(peerIdentities)) @@ -55,13 +62,26 @@ func TestCruelWorld(t *testing.T) { bf := sm_gpa_utils.NewBlockFactory(t) sms := make([]StateMgr, nodeCount) stores := make([]state.Store, nodeCount) + snapMs := make([]sm_snapshots.SnapshotManager, nodeCount) parameters := sm_gpa.NewStateManagerParameters() parameters.StateManagerTimerTickPeriod = timerTickPeriod parameters.StateManagerGetBlockRetry = getBlockPeriod + parameters.SnapshotManagerUpdatePeriod = snapshotUpdatePeriod + NewMockedSnapshotManagerFun := func(createSnapshots bool, store state.Store, log *logger.Logger) sm_snapshots.SnapshotManager { + var createPeriod uint32 + if createSnapshots { + createPeriod = snapshotCreatePeriod + } else { + createPeriod = 0 + } + return sm_snapshots.NewMockedSnapshotManager(t, createPeriod, bf.GetStore(), store, snapshotCommitTime, snapshotLoadTime, parameters.TimeProvider, log) + } for i := range sms { t.Logf("Creating %v-th state manager for node %s", i, peeringURLs[i]) var err error + logNode := log.Named(peeringURLs[i]) stores[i] = state.NewStore(mapdb.NewMapDB()) + snapMs[i] = NewMockedSnapshotManagerFun(i < snapshotCreateNodeCount, stores[i], logNode) origin.InitChain(stores[i], nil, 0) chainMetrics := metrics.NewChainMetricsProvider().GetChainMetrics(isc.EmptyChainID()) sms[i], err = New( @@ -71,15 +91,23 @@ func TestCruelWorld(t *testing.T) { peerPubKeys, netProviders[i], sm_gpa_utils.NewMockedTestBlockWAL(), + snapMs[i], stores[i], nil, chainMetrics.StateManager, chainMetrics.Pipe, - log.Named(peeringURLs[i]), + logNode, parameters, ) require.NoError(t, err) } + for i := 0; i < snapshotCreateNodeCount; i++ { + snapMs[i].(*sm_snapshots.MockedSnapshotManager).SetAfterSnapshotCreated(func(snapshotInfo sm_snapshots.SnapshotInfo) { + for j := snapshotCreateNodeCount; j < len(snapMs); j++ { + snapMs[j].(*sm_snapshots.MockedSnapshotManager).SnapshotReady(snapshotInfo) + } + }) + } blocks := bf.GetBlocks(blockCount, 1) stateDrafts := make([]state.StateDraft, blockCount) blockProduced := make([]*atomic.Bool, blockCount) @@ -144,7 +172,13 @@ func TestCruelWorld(t *testing.T) { newStateOutput := bf.GetAliasOutput(blocks[newBlockIndex].L1Commitment()) responseCh := sms[nodeIndex].(*stateManager).ChainFetchStateDiff(context.Background(), oldStateOutput, newStateOutput) results := <-responseCh - if !bf.GetState(blocks[newBlockIndex].L1Commitment()).TrieRoot().Equals(results.GetNewState().TrieRoot()) { // TODO: should compare states instead of trie roots + expectedNewState, err := bf.GetStore().StateByTrieRoot(blocks[newBlockIndex].TrieRoot()) + if err != nil { + t.Logf("Mempool state request for new block %v and old block %v to node %v wasn't able to retrieve expected new state: %v", + newBlockIndex+1, oldBlockIndex+1, peeringURLs[nodeIndex], err) + return false + } + if !sm_gpa_utils.StatesEqual(expectedNewState, results.GetNewState()) { t.Logf("Mempool state request for new block %v and old block %v to node %v return wrong new state: expected trie root %s, received %s", newBlockIndex+1, oldBlockIndex+1, peeringURLs[nodeIndex], blocks[newBlockIndex].TrieRoot(), results.GetNewState().TrieRoot()) return false diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 257f3e2218..5b4a8dc563 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -18,6 +18,7 @@ import ( "github.com/iotaledger/wasp/packages/chain/cmt_log" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa" "github.com/iotaledger/wasp/packages/chain/statemanager/sm_gpa/sm_gpa_utils" + "github.com/iotaledger/wasp/packages/chain/statemanager/sm_snapshots" "github.com/iotaledger/wasp/packages/chains/access_mgr" "github.com/iotaledger/wasp/packages/cryptolib" "github.com/iotaledger/wasp/packages/database" @@ -55,6 +56,7 @@ type Chains struct { trustedNetworkListenerCancel context.CancelFunc chainStateStoreProvider database.ChainStateKVStoreProvider + walLoadToStore bool walEnabled bool walFolderPath string smBlockCacheMaxSize int @@ -65,6 +67,10 @@ type Chains struct { smStateManagerTimerTickPeriod time.Duration smPruningMinStatesToKeep int smPruningMaxStatesToDelete int + snapshotPeriod uint32 + snapshotFolderPath string + snapshotNetworkPaths []string + snapshotUpdatePeriod time.Duration chainRecordRegistryProvider registry.ChainRecordRegistryProvider dkShareRegistryProvider registry.DKShareRegistryProvider @@ -103,6 +109,7 @@ func New( networkProvider peering.NetworkProvider, trustedNetworkManager peering.TrustedNetworkManager, chainStateStoreProvider database.ChainStateKVStoreProvider, + walLoadToStore bool, walEnabled bool, walFolderPath string, smBlockCacheMaxSize int, @@ -113,6 +120,10 @@ func New( smStateManagerTimerTickPeriod time.Duration, smPruningMinStatesToKeep int, smPruningMaxStatesToDelete int, + snapshotPeriod uint32, + snapshotFolderPath string, + snapshotNetworkPaths []string, + snapshotUpdatePeriod time.Duration, chainRecordRegistryProvider registry.ChainRecordRegistryProvider, dkShareRegistryProvider registry.DKShareRegistryProvider, nodeIdentityProvider registry.NodeIdentityProvider, @@ -147,6 +158,7 @@ func New( networkProvider: networkProvider, trustedNetworkManager: trustedNetworkManager, chainStateStoreProvider: chainStateStoreProvider, + walLoadToStore: walLoadToStore, walEnabled: walEnabled, walFolderPath: walFolderPath, smBlockCacheMaxSize: smBlockCacheMaxSize, @@ -157,6 +169,10 @@ func New( smStateManagerTimerTickPeriod: smStateManagerTimerTickPeriod, smPruningMinStatesToKeep: smPruningMinStatesToKeep, smPruningMaxStatesToDelete: smPruningMaxStatesToDelete, + snapshotPeriod: snapshotPeriod, + snapshotFolderPath: snapshotFolderPath, + snapshotNetworkPaths: snapshotNetworkPaths, + snapshotUpdatePeriod: snapshotUpdatePeriod, chainRecordRegistryProvider: chainRecordRegistryProvider, dkShareRegistryProvider: dkShareRegistryProvider, nodeIdentityProvider: nodeIdentityProvider, @@ -249,7 +265,7 @@ func (c *Chains) activateAllFromRegistry() error { } // activateWithoutLocking activates a chain in the node. -func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { +func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:funlen if c.ctx == nil { return errors.New("run chains first") } @@ -286,7 +302,7 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { chainLog := c.log.Named(chainID.ShortString()) var chainWAL sm_gpa_utils.BlockWAL if c.walEnabled { - chainWAL, err = sm_gpa_utils.NewBlockWAL(chainLog.Named("WAL"), c.walFolderPath, chainID, chainMetrics.BlockWAL) + chainWAL, err = sm_gpa_utils.NewBlockWAL(chainLog, c.walFolderPath, chainID, chainMetrics.BlockWAL) if err != nil { panic(fmt.Errorf("cannot create WAL: %w", err)) } @@ -303,28 +319,48 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { stateManagerParameters.StateManagerTimerTickPeriod = c.smStateManagerTimerTickPeriod stateManagerParameters.PruningMinStatesToKeep = c.smPruningMinStatesToKeep stateManagerParameters.PruningMaxStatesToDelete = c.smPruningMaxStatesToDelete + stateManagerParameters.SnapshotManagerUpdatePeriod = c.snapshotUpdatePeriod + // Initialize Snapshotter + chainStore := indexedstore.New(state.NewStoreWithMetrics(chainKVStore, chainMetrics.State)) chainCtx, chainCancel := context.WithCancel(c.ctx) validatorAgentID := accounts.CommonAccount() if c.validatorFeeAddr != nil { validatorAgentID = isc.NewAgentID(c.validatorFeeAddr) } + chainShutdownCoordinator := c.shutdownCoordinator.Nested(fmt.Sprintf("Chain-%s", chainID.AsAddress().String())) + chainSnapshotManager, err := sm_snapshots.NewSnapshotManager( + chainCtx, + chainShutdownCoordinator.Nested("SnapMgr"), + chainID, + c.snapshotPeriod, + c.snapshotFolderPath, + c.snapshotNetworkPaths, + chainStore, + chainLog, + ) + if err != nil { + panic(fmt.Errorf("cannot create Snapshotter: %w", err)) + } + newChain, err := chain.New( chainCtx, chainLog, chainID, - indexedstore.New(state.NewStoreWithMetrics(chainKVStore, chainMetrics.State)), + chainStore, c.nodeConnection, c.nodeIdentityProvider.NodeIdentity(), c.processorConfig, c.dkShareRegistryProvider, c.consensusStateRegistry, + c.walLoadToStore, chainWAL, + chainSnapshotManager, c.chainListener, chainRecord.AccessNodes, c.networkProvider, chainMetrics, - c.shutdownCoordinator.Nested(fmt.Sprintf("Chain-%s", chainID.AsAddress().String())), + chainShutdownCoordinator, func() { c.chainMetricsProvider.RegisterChain(chainID) }, func() { c.chainMetricsProvider.UnregisterChain(chainID) }, c.deriveAliasOutputByQuorum, diff --git a/packages/evm/jsonrpc/evmchain.go b/packages/evm/jsonrpc/evmchain.go index a75ee73afe..5280b00ecb 100644 --- a/packages/evm/jsonrpc/evmchain.go +++ b/packages/evm/jsonrpc/evmchain.go @@ -610,12 +610,13 @@ func (e *EVMChain) SubscribeLogs(q *ethereum.FilterQuery, ch chan<- []*types.Log }).Unhook } -func (e *EVMChain) iscRequestsInBlock(blockIndex uint32) (*blocklog.BlockInfo, []isc.Request, error) { - iscState, err := e.backend.ISCStateByBlockIndex(blockIndex) +func (e *EVMChain) iscRequestsInBlock(evmBlockNumber uint64) (*blocklog.BlockInfo, []isc.Request, error) { + iscState, err := e.iscStateFromEVMBlockNumber(new(big.Int).SetUint64(evmBlockNumber)) if err != nil { return nil, nil, err } - reqIDs, err := blocklog.GetRequestIDsForBlock(iscState, blockIndex) + iscBlockIndex := iscState.BlockIndex() + reqIDs, err := blocklog.GetRequestIDsForBlock(iscState, iscBlockIndex) if err != nil { return nil, nil, err } @@ -629,9 +630,9 @@ func (e *EVMChain) iscRequestsInBlock(blockIndex uint32) (*blocklog.BlockInfo, [ reqs[i] = receipt.Request } blocklogStatePartition := subrealm.NewReadOnly(iscState, kv.Key(blocklog.Contract.Hname().Bytes())) - block, ok := blocklog.GetBlockInfo(blocklogStatePartition, blockIndex) + block, ok := blocklog.GetBlockInfo(blocklogStatePartition, iscBlockIndex) if !ok { - return nil, nil, fmt.Errorf("block not found: %d", blockIndex) + return nil, nil, fmt.Errorf("block not found: %d", evmBlockNumber) } if err != nil { return nil, nil, err @@ -658,11 +659,7 @@ func (e *EVMChain) TraceTransaction(txHash common.Hash, config *tracers.TraceCon return nil, errors.New("tx not found") } - blockIndex, err := iscBlockIndexByEVMBlockNumber(big.NewInt(0).SetUint64(blockNumber)) - if err != nil { - return nil, err - } - iscBlock, iscRequestsInBlock, err := e.iscRequestsInBlock(blockIndex) + iscBlock, iscRequestsInBlock, err := e.iscRequestsInBlock(blockNumber) if err != nil { return nil, err } diff --git a/packages/evm/jsonrpc/jsonrpcindex/index.go b/packages/evm/jsonrpc/jsonrpcindex/index.go index ca4c868efb..4565238dab 100644 --- a/packages/evm/jsonrpc/jsonrpcindex/index.go +++ b/packages/evm/jsonrpc/jsonrpcindex/index.go @@ -62,7 +62,7 @@ func (c *Index) IndexBlock(trieRoot trie.Hash) { return } blockIndexToCache := state.BlockIndex() - uint32(blockKeepAmount-1) - cacheUntil := blockIndexToCache + cacheUntil := uint32(0) lastBlockIndexed := c.lastBlockIndexed() if lastBlockIndexed != nil { cacheUntil = *lastBlockIndexed diff --git a/packages/evm/jsonrpc/types.go b/packages/evm/jsonrpc/types.go index 45d2350fa3..3b298a9111 100644 --- a/packages/evm/jsonrpc/types.go +++ b/packages/evm/jsonrpc/types.go @@ -220,7 +220,7 @@ func (c *RPCCallArgs) parse() (ret ethereum.CallMsg) { return } -// SendTxArgs represents the arguments to sumbit a new transaction into the transaction pool. +// SendTxArgs represents the arguments to submit a new transaction into the transaction pool. type SendTxArgs struct { From common.Address `json:"from"` To *common.Address `json:"to"` diff --git a/packages/isc/assets.go b/packages/isc/assets.go index a7a5cd51d3..71d17c4360 100644 --- a/packages/isc/assets.go +++ b/packages/isc/assets.go @@ -321,7 +321,7 @@ func (a *Assets) fillEmptyNFTIDs(output iotago.Output, outputID iotago.OutputID) return a } - // see if there is an empty NFTID in the assets (this can happpen if the NTF is minted as a request to the chain) + // see if there is an empty NFTID in the assets (this can happen if the NTF is minted as a request to the chain) for i, nftID := range a.NFTs { if nftID.Empty() { a.NFTs[i] = util.NFTIDFromNFTOutput(nftOutput, outputID) diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 40768d218d..e611677d2e 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -252,7 +252,7 @@ func (nc *nodeConnection) Run(ctx context.Context) error { // the node bridge needs to be started before waiting for L1 to become synced, // otherwise the NodeStatus would never be updated and "syncAndSetProtocolParameters" would be stuck - // in an inifinite loop + // in an infinite loop go func() { nc.nodeBridge.Run(ctx) diff --git a/packages/parameters/l1parameters.go b/packages/parameters/l1parameters.go index 28c23771dd..dcdbaeda92 100644 --- a/packages/parameters/l1parameters.go +++ b/packages/parameters/l1parameters.go @@ -30,7 +30,7 @@ const MaxPayloadSize = iotago.BlockBinSerializedMaxSize - // BlockSizeMax serializer.OneByte - // ProtocolVersion serializer.OneByte - // ParentCount (iotago.BlockMaxParents * iotago.BlockIDLength) - // Parents - serializer.UInt32ByteSize - // PayloadLenght + serializer.UInt32ByteSize - // PayloadLength serializer.UInt64ByteSize // Nonce var ( diff --git a/packages/peering/peering.go b/packages/peering/peering.go index c2737d3e1f..e9ad9e2863 100644 --- a/packages/peering/peering.go +++ b/packages/peering/peering.go @@ -185,7 +185,7 @@ type PeerSender interface { } // PeerStatusProvider is used to access the current state of the network peer -// without allocating it (increading usage counters, etc). This interface +// without allocating it (increasing usage counters, etc). This interface // overlaps with the PeerSender, and most probably they both will be implemented // by the same object. type PeerStatusProvider interface { diff --git a/packages/snapshot/snapshot.go b/packages/snapshot/snapshot.go deleted file mode 100644 index 4fc75ad0f2..0000000000 --- a/packages/snapshot/snapshot.go +++ /dev/null @@ -1,157 +0,0 @@ -package snapshot - -import ( - "errors" - "fmt" - "io" - "path" - "time" - - "github.com/iotaledger/wasp/packages/isc/coreutil" - "github.com/iotaledger/wasp/packages/kv" - "github.com/iotaledger/wasp/packages/kv/codec" - "github.com/iotaledger/wasp/packages/state" -) - -type ConsoleReportParams struct { - Console io.Writer - StatsEveryKVPairs int -} - -func FileName(stateIndex uint32) string { - return fmt.Sprintf("%d.snapshot", stateIndex) -} - -// WriteKVToStream dumps k/v pairs of the state into the -// file. Keys are not sorted, so the result in general is not deterministic -func WriteKVToStream(store kv.KVIterator, stream kv.StreamWriter, p ...ConsoleReportParams) error { - par := ConsoleReportParams{ - Console: io.Discard, - StatsEveryKVPairs: 100, - } - if len(p) > 0 { - par = p[0] - } - var err error - store.Iterate("", func(k kv.Key, v []byte) bool { - if err = stream.Write([]byte(k), v); err != nil { - return false - } - if par.StatsEveryKVPairs > 0 { - kvCount, bCount := stream.Stats() - if kvCount%par.StatsEveryKVPairs == 0 { - fmt.Fprintf(par.Console, "[WriteKVToStream] k/v pairs: %d, bytes: %d\n", kvCount, bCount) - } - } - return true - }) - if err != nil { - fmt.Fprintf(par.Console, "[WriteKVToStream] error while writing: %v\n", err) - return err - } - return nil -} - -func WriteSnapshot(sr state.State, dir string, p ...ConsoleReportParams) error { - par := ConsoleReportParams{ - Console: io.Discard, - StatsEveryKVPairs: 100, - } - if len(p) > 0 { - par = p[0] - } - stateIndex := sr.BlockIndex() - timestamp := sr.Timestamp() - fmt.Fprintf(par.Console, "[WriteSnapshot] state index: %d\n", stateIndex) - fmt.Fprintf(par.Console, "[WriteSnapshot] timestamp: %v\n", timestamp) - fname := path.Join(dir, FileName(stateIndex)) - fmt.Fprintf(par.Console, "[WriteSnapshot] will be writing to file: %s\n", fname) - - fstream, err := kv.CreateKVStreamFile(fname) - if err != nil { - return err - } - defer fstream.File.Close() - - fmt.Printf("[WriteSnapshot] writing to file ") - if err := WriteKVToStream(sr, fstream, par); err != nil { - return err - } - tKV, tBytes := fstream.Stats() - fmt.Fprintf(par.Console, "[WriteSnapshot] TOTAL: kv records: %d, bytes: %d\n", tKV, tBytes) - return nil -} - -type FileProperties struct { - FileName string - StateIndex uint32 - TimeStamp time.Time - NumRecords int - MaxKeyLen int - Bytes int -} - -func Scan(rdr kv.StreamIterator) (*FileProperties, error) { - ret := &FileProperties{} - var stateIndexFound, timestampFound bool - var errR error - - err := rdr.Iterate(func(k, v []byte) bool { - if string(k) == coreutil.StatePrefixBlockIndex { - if stateIndexFound { - errR = errors.New("duplicate record with state index") - return false - } - if ret.StateIndex, errR = codec.DecodeUint32(v); errR != nil { - return false - } - stateIndexFound = true - } - if string(k) == coreutil.StatePrefixTimestamp { - if timestampFound { - errR = errors.New("duplicate record with timestamp") - return false - } - if ret.TimeStamp, errR = codec.DecodeTime(v); errR != nil { - return false - } - timestampFound = true - } - if len(v) == 0 { - errR = errors.New("empty value encountered") - return false - } - ret.NumRecords++ - if len(k) > ret.MaxKeyLen { - ret.MaxKeyLen = len(k) - } - ret.Bytes += len(k) + len(v) + 6 - return true - }) - if err != nil { - return nil, err - } - if errR != nil { - return nil, errR - } - return ret, nil -} - -func ScanFile(fname string) (*FileProperties, error) { - stream, err := kv.OpenKVStreamFile(fname) - if err != nil { - return nil, err - } - defer stream.File.Close() - - ret, err := Scan(stream) - if err != nil { - return nil, err - } - ret.FileName = fname - return ret, nil -} - -func BlockFileName(chainid string, index uint32, h state.BlockHash) string { - return fmt.Sprintf("%08d.%s.%s.mut", index, h.String(), chainid) -} diff --git a/packages/snapshot/snapshot_test.go b/packages/snapshot/snapshot_test.go deleted file mode 100644 index ec051e7e28..0000000000 --- a/packages/snapshot/snapshot_test.go +++ /dev/null @@ -1,81 +0,0 @@ -package snapshot - -import ( - "math/rand" - "os" - "testing" - "time" - - "github.com/stretchr/testify/require" - - "github.com/iotaledger/hive.go/kvstore/mapdb" - "github.com/iotaledger/wasp/packages/kv" - "github.com/iotaledger/wasp/packages/origin" - "github.com/iotaledger/wasp/packages/state" - "github.com/iotaledger/wasp/packages/util" -) - -func Test1(t *testing.T) { - db := mapdb.NewMapDB() - st := state.NewStore(db) - origin.InitChain(st, nil, 0) - - tm := util.NewTimer() - count := 0 - totalBytes := 0 - - latest, err := st.LatestBlock() - require.NoError(t, err) - sd, err := st.NewStateDraft(time.Now(), latest.L1Commitment()) - require.NoError(t, err) - - seed := time.Now().UnixNano() - t.Log("seed:", seed) - rnd := util.NewPseudoRand(seed) - for i := 0; i < 1000; i++ { - k := randByteSlice(rnd, 4+1, 48) // key is hname + key - v := randByteSlice(rnd, 1, 128) - - sd.Set(kv.Key(k), v) - count++ - totalBytes += len(k) + len(v) + 6 - } - - t.Logf("write %d kv pairs, %d Mbytes, to in-memory state took %v", count, totalBytes/(1024*1024), tm.Duration()) - - tm = util.NewTimer() - block := st.Commit(sd) - err = st.SetLatest(block.TrieRoot()) - require.NoError(t, err) - t.Logf("commit and save state to in-memory db took %v", tm.Duration()) - - rdr, err := st.LatestState() - require.NoError(t, err) - - stateidx := rdr.BlockIndex() - ts := rdr.Timestamp() - - fname := FileName(stateidx) - t.Logf("file: %s", fname) - - tm = util.NewTimer() - err = WriteSnapshot(rdr, "", ConsoleReportParams{ - Console: os.Stdout, - StatsEveryKVPairs: 1_000_000, - }) - require.NoError(t, err) - t.Logf("write snapshot took %v", tm.Duration()) - defer os.Remove(fname) - - v, err := ScanFile(fname) - require.NoError(t, err) - require.EqualValues(t, stateidx, v.StateIndex) - require.True(t, ts.Equal(v.TimeStamp)) -} - -func randByteSlice(rnd *rand.Rand, minLength, maxLength int) []byte { - n := rnd.Intn(maxLength-minLength) + minLength - b := make([]byte, n) - rnd.Read(b) - return b -} diff --git a/packages/solo/req.go b/packages/solo/req.go index 8a1cb8c7ee..429fb9dab8 100644 --- a/packages/solo/req.go +++ b/packages/solo/req.go @@ -383,10 +383,11 @@ func (ch *Chain) PostRequestSyncExt(req *CallParams, keyPair *cryptolib.KeyPair) // if useFakeBalance is `true` the request will be executed as if the sender had enough base tokens to cover the maximum gas allowed // WARNING: Gas estimation is just an "estimate", there is no guarantees that the real call will bear the same cost, due to the turing-completeness of smart contracts func (ch *Chain) EstimateGasOnLedger(req *CallParams, keyPair *cryptolib.KeyPair, useFakeBudget ...bool) (gas, gasFee uint64, err error) { + reqCopy := *req if len(useFakeBudget) > 0 && useFakeBudget[0] { - req.WithGasBudget(0) + reqCopy.WithGasBudget(0) } - r, err := ch.requestFromParams(req, keyPair) + r, err := ch.requestFromParams(&reqCopy, keyPair) if err != nil { return 0, 0, err } @@ -398,16 +399,17 @@ func (ch *Chain) EstimateGasOnLedger(req *CallParams, keyPair *cryptolib.KeyPair // EstimateGasOffLedger executes the given on-ledger request without committing // any changes in the ledger. It returns the amount of gas consumed. -// if useFakeBalance is `true` the request will be executed as if the sender had enough base tokens to cover the maximum gas allowed +// if useMaxBalance is `true` the request will be executed as if the sender had enough base tokens to cover the maximum gas allowed // WARNING: Gas estimation is just an "estimate", there is no guarantees that the real call will bear the same cost, due to the turing-completeness of smart contracts func (ch *Chain) EstimateGasOffLedger(req *CallParams, keyPair *cryptolib.KeyPair, useMaxBalance ...bool) (gas, gasFee uint64, err error) { + reqCopy := *req if len(useMaxBalance) > 0 && useMaxBalance[0] { - req.WithGasBudget(0) + reqCopy.WithGasBudget(0) } if keyPair == nil { keyPair = ch.OriginatorPrivateKey } - r := req.NewRequestOffLedger(ch, keyPair) + r := reqCopy.NewRequestOffLedger(ch, keyPair) res := ch.estimateGas(r) return res.Receipt.GasBurned, res.Receipt.GasFeeCharged, ch.ResolveVMError(res.Receipt.Error).AsGoError() } diff --git a/packages/state/db.go b/packages/state/db.go index 57ecb3daf8..537f1a77ed 100644 --- a/packages/state/db.go +++ b/packages/state/db.go @@ -59,20 +59,24 @@ func (db *storeDB) setLatestTrieRoot(root trie.Hash) { db.mustSet(keyLatestTrieRoot(), root.Bytes()) } -func (db *storeDB) trieStore() trie.KVStore { +func trieStore(db kvstore.KVStore) trie.KVStore { return trie.NewHiveKVStoreAdapter(db, []byte{chaindb.PrefixTrie}) } func (db *storeDB) trieUpdatable(root trie.Hash) (*trie.TrieUpdatable, error) { - return trie.NewTrieUpdatable(db.trieStore(), root) + return trie.NewTrieUpdatable(trieStore(db), root) } func (db *storeDB) initTrie() trie.Hash { - return trie.MustInitRoot(db.trieStore()) + return trie.MustInitRoot(trieStore(db)) } func (db *storeDB) trieReader(root trie.Hash) (*trie.TrieReader, error) { - return trie.NewTrieReader(db.trieStore(), root) + return trieReader(trieStore(db), root) +} + +func trieReader(trieStore trie.KVStore, root trie.Hash) (*trie.TrieReader, error) { + return trie.NewTrieReader(trieStore, root) } func (db *storeDB) hasBlock(root trie.Hash) bool { @@ -136,3 +140,39 @@ func (db *storeDB) buffered() (*bufferedKVStore, *storeDB) { buf := newBufferedKVStore(db) return buf, &storeDB{buf} } + +func (db *storeDB) takeSnapshot(root trie.Hash, snapshot kvstore.KVStore) error { + if !db.hasBlock(root) { + return fmt.Errorf("cannot take snapshot: trie root not found: %s", root) + } + blockKey := keyBlockByTrieRoot(root) + err := snapshot.Set(blockKey, db.mustGet(blockKey)) + if err != nil { + return err + } + + trie, err := db.trieReader(root) + if err != nil { + return err + } + trie.CopyToStore(trieStore(snapshot)) + return nil +} + +func (db *storeDB) restoreSnapshot(root trie.Hash, snapshot kvstore.KVStore) error { + blockKey := keyBlockByTrieRoot(root) + blockBytes, err := snapshot.Get(blockKey) + if err != nil { + return err + } + db.mustSet(blockKey, blockBytes) + + trieSnapshot, err := trieReader(trieStore(snapshot), root) + if err != nil { + return err + } + trieSnapshot.CopyToStore(trieStore(db)) + + db.setLatestTrieRoot(root) + return nil +} diff --git a/packages/state/state_test.go b/packages/state/state_test.go index e6d5da7462..ca8468eb77 100644 --- a/packages/state/state_test.go +++ b/packages/state/state_test.go @@ -435,3 +435,42 @@ func TestPruning2(t *testing.T) { t.Logf("committed block: %d", len(trieRoots)) } } + +func TestSnapshot(t *testing.T) { + snapshot := mapdb.NewMapDB() + + trieRoot, blockHash := func() (trie.Hash, state.BlockHash) { + db := mapdb.NewMapDB() + cs := mustChainStore{initializedStore(db)} + for i := byte(1); i <= 10; i++ { + d := cs.NewStateDraft(time.Now(), cs.LatestBlock().L1Commitment()) + d.Set(kv.Key(fmt.Sprintf("k%d", i)), []byte("v")) + d.Set("k", []byte{i}) + block := cs.Commit(d) + err := cs.SetLatest(block.TrieRoot()) + require.NoError(t, err) + } + block := cs.LatestBlock() + err := cs.TakeSnapshot(block.TrieRoot(), snapshot) + require.NoError(t, err) + return block.TrieRoot(), block.Hash() + }() + + db := mapdb.NewMapDB() + cs := mustChainStore{state.NewStore(db)} + err := cs.RestoreSnapshot(trieRoot, snapshot) + require.NoError(t, err) + + block := cs.LatestBlock() + require.EqualValues(t, 10, block.StateIndex()) + require.EqualValues(t, blockHash, block.Hash()) + + _, err = cs.Store.BlockByTrieRoot(block.PreviousL1Commitment().TrieRoot()) + require.ErrorContains(t, err, "not found") + + state := cs.LatestState() + for i := byte(1); i <= 10; i++ { + require.EqualValues(t, []byte("v"), state.Get(kv.Key(fmt.Sprintf("k%d", i)))) + } + require.EqualValues(t, []byte{10}, state.Get("k")) +} diff --git a/packages/state/store.go b/packages/state/store.go index e63b49d8c2..130e7ff44f 100644 --- a/packages/state/store.go +++ b/packages/state/store.go @@ -123,7 +123,7 @@ func (s *store) extractBlock(d StateDraft) (Block, *buffered.Mutations, trie.Com for k := range d.Mutations().Dels { trie.Delete([]byte(k)) } - trieRoot, stats := trie.Commit(bufDB.trieStore()) + trieRoot, stats := trie.Commit(trieStore(bufDB)) block := &block{ trieRoot: trieRoot, mutations: d.Mutations(), @@ -154,7 +154,7 @@ func (s *store) Commit(d StateDraft) Block { func (s *store) Prune(trieRoot trie.Hash) (trie.PruneStats, error) { start := time.Now() buf, bufDB := s.db.buffered() - stats, err := trie.Prune(bufDB.trieStore(), trieRoot) + stats, err := trie.Prune(trieStore(bufDB), trieRoot) if err != nil { return trie.PruneStats{}, err } @@ -207,3 +207,11 @@ func (s *store) LatestState() (State, error) { func (s *store) LatestTrieRoot() (trie.Hash, error) { return s.db.latestTrieRoot() } + +func (s *store) TakeSnapshot(root trie.Hash, snapshot kvstore.KVStore) error { + return s.db.takeSnapshot(root, snapshot) +} + +func (s *store) RestoreSnapshot(root trie.Hash, snapshot kvstore.KVStore) error { + return s.db.restoreSnapshot(root, snapshot) +} diff --git a/packages/state/types.go b/packages/state/types.go index 2566dad2d5..07f76038ae 100644 --- a/packages/state/types.go +++ b/packages/state/types.go @@ -7,6 +7,7 @@ import ( "io" "time" + "github.com/iotaledger/hive.go/kvstore" "github.com/iotaledger/wasp/packages/kv" "github.com/iotaledger/wasp/packages/kv/buffered" "github.com/iotaledger/wasp/packages/trie" @@ -71,6 +72,13 @@ type Store interface { // Prune deletes the trie with the given root from the DB Prune(trie.Hash) (trie.PruneStats, error) + + // TakeSnapshot takes a snapshot of the block and trie at the given trie root. + TakeSnapshot(trie.Hash, kvstore.KVStore) error + + // RestoreSnapshot restores the block and trie from the given snapshot. + // It is not required for the previous trie root to be present in the DB. + RestoreSnapshot(trie.Hash, kvstore.KVStore) error } // A Block contains the mutations between the previous and current states, diff --git a/packages/transaction/util.go b/packages/transaction/util.go index 8fa65e9b96..8ce3d7c4f8 100644 --- a/packages/transaction/util.go +++ b/packages/transaction/util.go @@ -243,12 +243,12 @@ func CreateAndSignTx(inputs iotago.Inputs, inputsCommitment []byte, outputs iota // IMPORTANT: serialize and de-serialize the essence, just to make sure it is correctly ordered before signing // otherwise it might fail when it reaches the node, since the PoW that would order the tx is done after the signing, // so if we don't order now, we might sign an invalid TX - essenseBytes, err := unorderedEssence.Serialize(serializer.DeSeriModePerformValidation|serializer.DeSeriModePerformLexicalOrdering, nil) + essenceBytes, err := unorderedEssence.Serialize(serializer.DeSeriModePerformValidation|serializer.DeSeriModePerformLexicalOrdering, nil) if err != nil { return nil, err } essence := new(iotago.TransactionEssence) - _, err = essence.Deserialize(essenseBytes, serializer.DeSeriModeNoValidation, nil) + _, err = essence.Deserialize(essenceBytes, serializer.DeSeriModeNoValidation, nil) if err != nil { return nil, err } diff --git a/packages/trie/trie.go b/packages/trie/trie.go index b7663b4d37..4c95104b6d 100644 --- a/packages/trie/trie.go +++ b/packages/trie/trie.go @@ -107,3 +107,20 @@ func (tr *TrieReader) DebugDump() { return IterateContinue }) } + +func (tr *TrieReader) CopyToStore(snapshot KVStore) { + triePartition := makeWriterPartition(snapshot, partitionTrieNodes) + valuePartition := makeWriterPartition(snapshot, partitionValues) + refcounts := newRefcounts(snapshot) + tr.IterateNodes(func(_ []byte, n *NodeData, depth int) IterateNodesAction { + nodeKey := n.Commitment.Bytes() + triePartition.Set(nodeKey, tr.nodeStore.trieStore.Get(nodeKey)) + if n.Terminal != nil && !n.Terminal.IsValue { + n.Terminal.ExtractValue() + valueKey := n.Terminal.Bytes() + valuePartition.Set(valueKey, tr.nodeStore.valueStore.Get(valueKey)) + } + refcounts.incNodeAndValue(n) + return IterateContinue + }) +} diff --git a/packages/util/permute.go b/packages/util/permute.go index eaa415f147..e7bb3c521d 100644 --- a/packages/util/permute.go +++ b/packages/util/permute.go @@ -22,7 +22,7 @@ type Permutation16 struct { // different calls (probable from different nodes). // In the latter case, the seed should be the same for all the calls which expect // the same permutation. -// This function allways returns a permutation; error should be considered as a +// This function always returns a permutation; error should be considered as a // warning that permutation was seeded incorrectly. func NewPermutation16(size uint16, seedOptional ...int64) (*Permutation16, error) { var seed int64 diff --git a/packages/util/pipe/pipe_test.go b/packages/util/pipe/pipe_test.go index 96a19dd252..8d05e9b92c 100644 --- a/packages/util/pipe/pipe_test.go +++ b/packages/util/pipe/pipe_test.go @@ -56,13 +56,13 @@ func TestLimitPriorityHashInfinitePipeWriteReadLen(t *testing.T) { testLimitedPriorityPipeWriteReadLen(NewSimpleHashableFactory(), NewLimitPriorityHashInfinitePipe[SimpleHashable], t) } -func testLimitedPriorityPipeNoLimitWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { +func testLimitedPriorityPipeNoLimitWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { testPriorityPipeWriteReadLen(factory, func(priorityFun func(E) bool) Pipe[E] { return makeLimitedPriorityPipeFun(priorityFun, 1200) }, t) } -func testLimitedPriorityPipeWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { +func testLimitedPriorityPipeWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { limit := 800 p := makeLimitedPriorityPipeFun(priorityFunMod3[E], limit) result := func(index int) int { @@ -77,11 +77,11 @@ func testLimitedPriorityPipeWriteReadLen[E IntConvertable](factory Factory[E], m testPipeWriteReadLen(factory, p, 1000, limit, result, t) } -func testLimitedPipeNoLimitWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { +func testLimitedPipeNoLimitWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { testDefaultPipeWriteReadLen(factory, makeLimitedPipeFun(1200), 1000, identityFunInt, t) } -func testLimitedPipeWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { +func testLimitedPipeWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { limit := 800 elementsToAdd := 1000 indexDiff := elementsToAdd - limit @@ -91,7 +91,7 @@ func testLimitedPipeWriteReadLen[E IntConvertable](factory Factory[E], makeLimit testPipeWriteReadLen(factory, makeLimitedPipeFun(limit), elementsToAdd, limit, result, t) } -func testPriorityPipeWriteReadLen[E IntConvertable](factory Factory[E], makePriorityPipeFun func(func(E) bool) Pipe[E], t *testing.T) { +func testPriorityPipeWriteReadLen[E IntConvertible](factory Factory[E], makePriorityPipeFun func(func(E) bool) Pipe[E], t *testing.T) { p := makePriorityPipeFun(priorityFunMod3[E]) result := func(index int) int { if index <= 333 { @@ -105,11 +105,11 @@ func testPriorityPipeWriteReadLen[E IntConvertable](factory Factory[E], makePrio testDefaultPipeWriteReadLen(factory, p, 1000, result, t) } -func testDefaultPipeWriteReadLen[E IntConvertable](factory Factory[E], p Pipe[E], elementsToWrite int, result func(index int) int, t *testing.T) { +func testDefaultPipeWriteReadLen[E IntConvertible](factory Factory[E], p Pipe[E], elementsToWrite int, result func(index int) int, t *testing.T) { testPipeWriteReadLen(factory, p, elementsToWrite, elementsToWrite, result, t) } -func testPipeWriteReadLen[E IntConvertable](factory Factory[E], p Pipe[E], elementsToWrite, elementsToRead int, result func(index int) int, t *testing.T) { +func testPipeWriteReadLen[E IntConvertible](factory Factory[E], p Pipe[E], elementsToWrite, elementsToRead int, result func(index int) int, t *testing.T) { for i := 0; i < elementsToWrite; i++ { p.In() <- factory.Create(i) } @@ -176,37 +176,37 @@ func TestLimitPriorityHashInfinitePipeConcurrentWriteReadLen(t *testing.T) { testLimitedPriorityPipeConcurrentWriteReadLen(NewSimpleHashableFactory(), NewLimitPriorityHashInfinitePipe[SimpleHashable], t) } -func testLimitedPriorityPipeNoLimitConcurrentWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { +func testLimitedPriorityPipeNoLimitConcurrentWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { testPriorityPipeConcurrentWriteReadLen(factory, func(priorityFun func(E) bool) Pipe[E] { return makeLimitedPriorityPipeFun(priorityFun, 1200) }, t) } -func testLimitedPriorityPipeConcurrentWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { +func testLimitedPriorityPipeConcurrentWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPriorityPipeFun func(priorityFun func(E) bool, limit int) Pipe[E], t *testing.T) { limit := 800 ch := makeLimitedPriorityPipeFun(priorityFunMod3[E], limit) testPipeConcurrentWriteReadLen(factory, ch, 1000, limit, nil, t) } -func testLimitedPipeNoLimitConcurrentWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { +func testLimitedPipeNoLimitConcurrentWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { result := identityFunInt testDefaultPipeConcurrentWriteReadLen(factory, makeLimitedPipeFun(1200), 1000, &result, t) } -func testLimitedPipeConcurrentWriteReadLen[E IntConvertable](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { +func testLimitedPipeConcurrentWriteReadLen[E IntConvertible](factory Factory[E], makeLimitedPipeFun func(limit int) Pipe[E], t *testing.T) { testPipeConcurrentWriteReadLen(factory, makeLimitedPipeFun(800), 1000, 800, nil, t) } -func testPriorityPipeConcurrentWriteReadLen[E IntConvertable](factory Factory[E], makePriorityPipeFun func(func(E) bool) Pipe[E], t *testing.T) { +func testPriorityPipeConcurrentWriteReadLen[E IntConvertible](factory Factory[E], makePriorityPipeFun func(func(E) bool) Pipe[E], t *testing.T) { ch := makePriorityPipeFun(priorityFunMod3[E]) testDefaultPipeConcurrentWriteReadLen(factory, ch, 1000, nil, t) } -func testDefaultPipeConcurrentWriteReadLen[E IntConvertable](factory Factory[E], p Pipe[E], elementsToWrite int, result *func(index int) int, t *testing.T) { +func testDefaultPipeConcurrentWriteReadLen[E IntConvertible](factory Factory[E], p Pipe[E], elementsToWrite int, result *func(index int) int, t *testing.T) { testPipeConcurrentWriteReadLen(factory, p, elementsToWrite, elementsToWrite, result, t) } -func testPipeConcurrentWriteReadLen[E IntConvertable](factory Factory[E], p Pipe[E], elementsToWrite, elementsToRead int, result *func(index int) int, t *testing.T) { +func testPipeConcurrentWriteReadLen[E IntConvertible](factory Factory[E], p Pipe[E], elementsToWrite, elementsToRead int, result *func(index int) int, t *testing.T) { var wg sync.WaitGroup written := 0 read := 0 diff --git a/packages/util/pipe/queue_test.go b/packages/util/pipe/queue_test.go index ada98d1124..98884d76ac 100644 --- a/packages/util/pipe/queue_test.go +++ b/packages/util/pipe/queue_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" ) -func testQueueBasicAddLengthPeekRemove[E IntConvertable](factory Factory[E], q Queue[E], elementsToAdd int, add func(index int) int, addResult func(index int) bool, elementsToRemove int, result func(index int) int, t *testing.T) { +func testQueueBasicAddLengthPeekRemove[E IntConvertible](factory Factory[E], q Queue[E], elementsToAdd int, add func(index int) int, addResult func(index int) bool, elementsToRemove int, result func(index int) int, t *testing.T) { for i := 0; i < elementsToAdd; i++ { value := factory.Create(add(i)) actualAddResult := q.Add(value) @@ -75,13 +75,13 @@ func TestLimitPriorityHashLimitedPriorityHashQueueSimple(t *testing.T) { testLimitedPriorityQueueSimple(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueNoLimitSimple[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(e E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueNoLimitSimple[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(e E) bool, limit int) Queue[E], t *testing.T) { testPriorityQueueSimple(factory, func(priorityFun func(e E) bool) Queue[E] { return makeLimitedPriorityQueueFun(priorityFun, 15) }, t) } -func testLimitedPriorityQueueSimple[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(e E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueSimple[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(e E) bool, limit int) Queue[E], t *testing.T) { resultArray := []int{9, 6, 3, 0, 4, 5, 7, 8} limit := len(resultArray) q := makeLimitedPriorityQueueFun(priorityFunMod3[E], limit) @@ -91,11 +91,11 @@ func testLimitedPriorityQueueSimple[E IntConvertable](factory Factory[E], makeLi testQueueSimple(factory, q, 10, limit, result, t) } -func testLimitedQueueNoLimitSimple[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueNoLimitSimple[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueSimple(factory, makeLimitedQueueFun(15), t) } -func testLimitedQueueSimple[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueSimple[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { limit := 8 elementsToAdd := 10 indexDiff := elementsToAdd - limit @@ -106,7 +106,7 @@ func testLimitedQueueSimple[E IntConvertable](factory Factory[E], makeLimitedQue testQueueSimple(factory, q, elementsToAdd, limit, result, t) } -func testPriorityQueueSimple[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(e E) bool) Queue[E], t *testing.T) { +func testPriorityQueueSimple[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(e E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod3[E]) resultArray := []int{9, 6, 3, 0, 1, 2, 4, 5, 7, 8} result := func(index int) int { @@ -116,12 +116,12 @@ func testPriorityQueueSimple[E IntConvertable](factory Factory[E], makePriorityQ testQueueSimple(factory, q, elementsToAdd, elementsToAdd, result, t) } -func testDefaultQueueSimple[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueSimple[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { elementsToAdd := 10 testQueueSimple(factory, q, elementsToAdd, elementsToAdd, identityFunInt, t) } -func testQueueSimple[E IntConvertable](factory Factory[E], q Queue[E], elementsToAdd, elementsToRemove int, result func(index int) int, t *testing.T) { +func testQueueSimple[E IntConvertible](factory Factory[E], q Queue[E], elementsToAdd, elementsToRemove int, result func(index int) int, t *testing.T) { testQueueBasicAddLengthPeekRemove(factory, q, elementsToAdd, identityFunInt, alwaysTrueFun, elementsToRemove, result, t) } @@ -233,7 +233,7 @@ func testHashQueueTwice(makeHashQueueFun func() Queue[SimpleHashable], t *testin testQueueTwice(NewSimpleHashableFactory(), q, elementsToAddSingle, addResultFun, elementsToAddSingle, identityFunInt, t) } -func testPriorityHashQueueTwice[E IntConvertable](factory Factory[E], makePriorityHashQueueFun func(priorityFun func(E) bool) Queue[E], t *testing.T) { +func testPriorityHashQueueTwice[E IntConvertible](factory Factory[E], makePriorityHashQueueFun func(priorityFun func(E) bool) Queue[E], t *testing.T) { q := makePriorityHashQueueFun(priorityFunMod3[E]) elementsToAddSingle := 50 addResultFun := func(index int) bool { return index < elementsToAddSingle } @@ -249,7 +249,7 @@ func testPriorityHashQueueTwice[E IntConvertable](factory Factory[E], makePriori testQueueTwice(factory, q, elementsToAddSingle, addResultFun, elementsToAddSingle, resultFun, t) } -func testPriorityQueueTwice[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueTwice[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod3[E]) elementsToAddSingle := 50 resultFun := func(index int) int { @@ -272,13 +272,13 @@ func testPriorityQueueTwice[E IntConvertable](factory Factory[E], makePriorityQu testQueueTwice(factory, q, elementsToAddSingle, alwaysTrueFun, 2*elementsToAddSingle, resultFun, t) } -func testDefaultQueueTwice[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueTwice[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { elementsToAddSingle := 50 resultFun := func(index int) int { return index % elementsToAddSingle } testQueueTwice(factory, q, elementsToAddSingle, alwaysTrueFun, 2*elementsToAddSingle, resultFun, t) } -func testQueueTwice[E IntConvertable](factory Factory[E], q Queue[E], elementsToAddSingle int, addResult func(index int) bool, elementsToRemove int, result func(index int) int, t *testing.T) { +func testQueueTwice[E IntConvertible](factory Factory[E], q Queue[E], elementsToAddSingle int, addResult func(index int) bool, elementsToRemove int, result func(index int) int, t *testing.T) { addFun := func(index int) int { return index % elementsToAddSingle } @@ -414,13 +414,13 @@ func TestLimitPriorityHashLimitedPriorityHashQueueAddRemove(t *testing.T) { testLimitedPriorityQueueAddRemove(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueNoLimitAddRemove[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueNoLimitAddRemove[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { testPriorityQueueAddRemove(factory, func(priorityFun func(E) bool) Queue[E] { return makeLimitedPriorityQueueFun(priorityFun, 150) }, t) } -func testLimitedPriorityQueueAddRemove[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueAddRemove[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { limit := 80 q := makeLimitedPriorityQueueFun(priorityFunMod3[E], limit) result := func(index int) int { @@ -432,11 +432,11 @@ func testLimitedPriorityQueueAddRemove[E IntConvertable](factory Factory[E], mak testQueueAddRemove(factory, q, 100, 50, limit, result, t) } -func testLimitedQueueNoLimitAddRemove[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueNoLimitAddRemove[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueAddRemove(factory, makeLimitedQueueFun(150), t) } -func testLimitedQueueAddRemove[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueAddRemove[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { limit := 80 elementsToAdd := 100 elementsToRemoveAdd := 50 @@ -448,7 +448,7 @@ func testLimitedQueueAddRemove[E IntConvertable](factory Factory[E], makeLimited testQueueAddRemove(factory, q, elementsToAdd, elementsToRemoveAdd, limit, result, t) } -func testPriorityQueueAddRemove[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueAddRemove[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod3[E]) result := func(index int) int { if index%2 == 0 { @@ -460,13 +460,13 @@ func testPriorityQueueAddRemove[E IntConvertable](factory Factory[E], makePriori testQueueAddRemove(factory, q, elementsToAdd, 50, elementsToAdd, result, t) } -func testDefaultQueueAddRemove[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueAddRemove[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { elementsToAdd := 100 elementsToRemoveAdd := 50 testQueueAddRemove(factory, q, elementsToAdd, elementsToRemoveAdd, elementsToAdd, func(index int) int { return index + elementsToRemoveAdd }, t) } -func testQueueAddRemove[E IntConvertable](factory Factory[E], q Queue[E], elementsToAdd, elementsToRemoveAdd, elementsToRemove int, result func(index int) int, t *testing.T) { +func testQueueAddRemove[E IntConvertible](factory Factory[E], q Queue[E], elementsToAdd, elementsToRemoveAdd, elementsToRemove int, result func(index int) int, t *testing.T) { for i := 0; i < elementsToAdd; i++ { require.Truef(t, q.Add(factory.Create(i)), "failed to add element %d", i) } @@ -539,40 +539,40 @@ func TestLimitPriorityHashLimitedPriorityHashQueueLength(t *testing.T) { testLimitedPriorityQueueLength(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueNoLimitLength[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueNoLimitLength[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { testPriorityQueueLength(factory, func(priorityFun func(E) bool) Queue[E] { return makeLimitedPriorityQueueFun(priorityFun, 1500) }, t) } -func testLimitedPriorityQueueLength[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueLength[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { limit := 800 q := makeLimitedPriorityQueueFun(priorityFunMod3[E], limit) testQueueLength(factory, q, 1000, limit, t) } -func testLimitedQueueNoLimitLength[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueNoLimitLength[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueLength(factory, makeLimitedQueueFun(1500), t) } -func testLimitedQueueLength[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueLength[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { limit := 800 q := makeLimitedQueueFun(limit) testQueueLength(factory, q, 1000, limit, t) } -func testPriorityQueueLength[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueLength[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod3[E]) elementsToAdd := 1000 testQueueLength(factory, q, elementsToAdd, elementsToAdd, t) } -func testDefaultQueueLength[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueLength[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { elementsToAdd := 1000 testQueueLength(factory, q, elementsToAdd, elementsToAdd, t) } -func testQueueLength[E IntConvertable](factory Factory[E], q Queue[E], elementsToRemoveAdd, elementsToRemove int, t *testing.T) { +func testQueueLength[E IntConvertible](factory Factory[E], q Queue[E], elementsToRemoveAdd, elementsToRemove int, t *testing.T) { emptyLength := q.Length() require.Equalf(t, 0, emptyLength, "empty queue length mismatch") @@ -644,13 +644,13 @@ func TestLimitPriorityHashLimitedPriorityHashQueueGet(t *testing.T) { testLimitedPriorityQueueGet(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueNoLimitGet[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueNoLimitGet[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { testPriorityQueueGet(factory, func(priorityFun func(E) bool) Queue[E] { return makeLimitedPriorityQueueFun(priorityFun, 1500) }, t) } -func testLimitedPriorityQueueGet[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueGet[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { limit := 800 q := makeLimitedPriorityQueueFun(priorityFunMod2[E], limit) result := func(iteration int, index int) int { @@ -665,11 +665,11 @@ func testLimitedPriorityQueueGet[E IntConvertable](factory Factory[E], makeLimit testQueueGet(factory, q, 1000, result, t) } -func testLimitedQueueNoLimitGet[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueNoLimitGet[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueGet(factory, makeLimitedQueueFun(1500), t) } -func testLimitedQueueGet[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueGet[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { limit := 800 q := makeLimitedQueueFun(limit) result := func(iteration int, index int) int { @@ -681,7 +681,7 @@ func testLimitedQueueGet[E IntConvertable](factory Factory[E], makeLimitedQueueF testQueueGet(factory, q, 1000, result, t) } -func testPriorityQueueGet[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueGet[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod2[E]) result := func(iteration int, index int) int { if index <= iteration/2 { @@ -692,11 +692,11 @@ func testPriorityQueueGet[E IntConvertable](factory Factory[E], makePriorityQueu testQueueGet(factory, q, 1000, result, t) } -func testDefaultQueueGet[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueGet[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { testQueueGet(factory, q, 1000, func(iteration int, index int) int { return index }, t) } -func testQueueGet[E IntConvertable](factory Factory[E], q Queue[E], elementsToAdd int, result func(iteration int, index int) int, t *testing.T) { +func testQueueGet[E IntConvertible](factory Factory[E], q Queue[E], elementsToAdd int, result func(iteration int, index int) int, t *testing.T) { if testing.Short() { t.Skip("skipping Get test in short mode") // although it is not clear, why. Replacing require.Equalf in this code with `if a != b {t.Errorf(...)}` increases this test's performance significantly } @@ -758,13 +758,13 @@ func TestLimitPriorityHashLimitedPriorityHashQueueGetNegative(t *testing.T) { testLimitedPriorityQueueGetNegative(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueNoLimitGetNegative[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueNoLimitGetNegative[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { testPriorityQueueGetNegative(factory, func(priorityFun func(E) bool) Queue[E] { return makeLimitedPriorityQueueFun(priorityFun, 1500) }, t) } -func testLimitedPriorityQueueGetNegative[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueGetNegative[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { limit := 800 q := makeLimitedPriorityQueueFun(priorityFunMod2[E], limit) result := func(iteration int, index int) int { @@ -782,15 +782,15 @@ func testLimitedPriorityQueueGetNegative[E IntConvertable](factory Factory[E], m testQueueGetNegative(factory, q, 1000, result, t) } -func testLimitedQueueNoLimitGetNegative[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueNoLimitGetNegative[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueGetNegative(factory, makeLimitedQueueFun(1500), t) } -func testLimitedQueueGetNegative[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueGetNegative[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testDefaultQueueGetNegative(factory, makeLimitedQueueFun(800), t) } -func testPriorityQueueGetNegative[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueGetNegative[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod2[E]) result := func(iteration int, index int) int { if index >= -(iteration+iteration%2)/2 { @@ -801,11 +801,11 @@ func testPriorityQueueGetNegative[E IntConvertable](factory Factory[E], makePrio testQueueGetNegative(factory, q, 1000, result, t) } -func testDefaultQueueGetNegative[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testDefaultQueueGetNegative[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { testQueueGetNegative(factory, q, 1000, func(iteration int, index int) int { return iteration + index + 1 }, t) } -func testQueueGetNegative[E IntConvertable](factory Factory[E], q Queue[E], elementsToAdd int, result func(iteration int, index int) int, t *testing.T) { +func testQueueGetNegative[E IntConvertible](factory Factory[E], q Queue[E], elementsToAdd int, result func(iteration int, index int) int, t *testing.T) { if testing.Short() { t.Skip("skipping GetNegative test in short mode") // although it is not clear, why. Replacing require.Equalf in this code with `if a != b {t.Errorf(...)}` increases this test's performance significantly } @@ -851,21 +851,21 @@ func TestLimitPriorityHashLimitedPriorityHashQueueGetOutOfRangePanics(t *testing testLimitedPriorityQueueGetOutOfRangePanics(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueGetOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueGetOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { q := makeLimitedPriorityQueueFun(priorityFunMod2[E], 800) testQueueGetOutOfRangePanics(factory, q, t) } -func testLimitedQueueGetOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueGetOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testQueueGetOutOfRangePanics(factory, makeLimitedQueueFun(800), t) } -func testPriorityQueueGetOutOfRangePanics[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueGetOutOfRangePanics[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod2[E]) testQueueGetOutOfRangePanics(factory, q, t) } -func testQueueGetOutOfRangePanics[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testQueueGetOutOfRangePanics[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { for i := 0; i < 3; i++ { require.Truef(t, q.Add(factory.Create(i)), "failed to add element %d", i) } @@ -907,21 +907,21 @@ func TestLimitPriorityHashLimitedPriorityHashQueuePeekOutOfRangePanics(t *testin testLimitedPriorityQueuePeekOutOfRangePanics(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueuePeekOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueuePeekOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { q := makeLimitedPriorityQueueFun(priorityFunMod2[E], 800) testQueuePeekOutOfRangePanics(factory, q, t) } -func testLimitedQueuePeekOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueuePeekOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testQueuePeekOutOfRangePanics(factory, makeLimitedQueueFun(800), t) } -func testPriorityQueuePeekOutOfRangePanics[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueuePeekOutOfRangePanics[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod2[E]) testQueuePeekOutOfRangePanics(factory, q, t) } -func testQueuePeekOutOfRangePanics[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testQueuePeekOutOfRangePanics[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { require.Panicsf(t, func() { q.Peek() }, "should panic when peeking empty queue") require.Truef(t, q.Add(factory.Create(0)), "failed to add element 0") q.Remove() @@ -962,21 +962,21 @@ func TestLimitPriorityHashLimitedPriorityHashQueueRemoveOutOfRangePanics(t *test testLimitedPriorityQueueRemoveOutOfRangePanics(NewSimpleHashableFactory(), NewLimitPriorityHashLimitedPriorityHashQueue[SimpleHashable], t) } -func testLimitedPriorityQueueRemoveOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { +func testLimitedPriorityQueueRemoveOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedPriorityQueueFun func(priorityFun func(E) bool, limit int) Queue[E], t *testing.T) { q := makeLimitedPriorityQueueFun(priorityFunMod2[E], 800) testQueueRemoveOutOfRangePanics(factory, q, t) } -func testLimitedQueueRemoveOutOfRangePanics[E IntConvertable](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { +func testLimitedQueueRemoveOutOfRangePanics[E IntConvertible](factory Factory[E], makeLimitedQueueFun func(limit int) Queue[E], t *testing.T) { testQueueRemoveOutOfRangePanics(factory, makeLimitedQueueFun(800), t) } -func testPriorityQueueRemoveOutOfRangePanics[E IntConvertable](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { +func testPriorityQueueRemoveOutOfRangePanics[E IntConvertible](factory Factory[E], makePriorityQueueFun func(func(E) bool) Queue[E], t *testing.T) { q := makePriorityQueueFun(priorityFunMod2[E]) testQueueRemoveOutOfRangePanics(factory, q, t) } -func testQueueRemoveOutOfRangePanics[E IntConvertable](factory Factory[E], q Queue[E], t *testing.T) { +func testQueueRemoveOutOfRangePanics[E IntConvertible](factory Factory[E], q Queue[E], t *testing.T) { require.Panicsf(t, func() { q.Remove() }, "should panic when removing empty queue") require.Truef(t, q.Add(factory.Create(0)), "failed to add element 0") q.Remove() diff --git a/packages/util/pipe/test_util.go b/packages/util/pipe/test_util.go index b97de81724..4b37935b78 100644 --- a/packages/util/pipe/test_util.go +++ b/packages/util/pipe/test_util.go @@ -6,11 +6,11 @@ import ( "github.com/iotaledger/wasp/packages/hashing" ) -type IntConvertable interface { +type IntConvertible interface { AsInt() int } -type Factory[E IntConvertable] interface { +type Factory[E IntConvertible] interface { Create(int) E } @@ -20,8 +20,8 @@ type SimpleNothashable int var ( _ Hashable = SimpleHashable(0) - _ IntConvertable = SimpleHashable(0) - _ IntConvertable = SimpleNothashable(0) + _ IntConvertible = SimpleHashable(0) + _ IntConvertible = SimpleNothashable(0) _ Factory[SimpleHashable] = &SimpleHashableFactory{} _ Factory[SimpleNothashable] = &SimpleNothashableFactory{} ) @@ -65,14 +65,14 @@ func alwaysTrueFun(index int) bool { return true } -func priorityFunMod2[E IntConvertable](e E) bool { +func priorityFunMod2[E IntConvertible](e E) bool { return priorityFunMod(e, 2) } -func priorityFunMod3[E IntConvertable](e E) bool { +func priorityFunMod3[E IntConvertible](e E) bool { return priorityFunMod(e, 3) } -func priorityFunMod[E IntConvertable](e E, mod int) bool { +func priorityFunMod[E IntConvertible](e E, mod int) bool { return e.AsInt()%mod == 0 } diff --git a/packages/util/slice_struct.go b/packages/util/slice_struct.go new file mode 100644 index 0000000000..9d91796969 --- /dev/null +++ b/packages/util/slice_struct.go @@ -0,0 +1,71 @@ +package util + +import ( + "github.com/samber/lo" +) + +// Putting slice into a map is not acceptable as if you want to append to slice, +// you'll have to re-include the appended slice into the map. +type SliceStruct[E any] struct { + slice []E +} + +func NewSliceStruct[E any](elems ...E) *SliceStruct[E] { + return &SliceStruct[E]{slice: elems} +} + +func NewSliceStructLength[E any](length int) *SliceStruct[E] { + return NewSliceStructLengthCapacity[E](length, length) +} + +func NewSliceStructLengthCapacity[E any](length, capacity int) *SliceStruct[E] { + return &SliceStruct[E]{slice: make([]E, length, capacity)} +} + +func (s *SliceStruct[E]) Add(elem E) { + s.slice = append(s.slice, elem) +} + +func (s *SliceStruct[E]) Get(index int) E { + return s.slice[index] +} + +func (s *SliceStruct[E]) Set(index int, elem E) { + s.slice[index] = elem +} + +func (s *SliceStruct[E]) Length() int { + return len(s.slice) +} + +func (s *SliceStruct[E]) ForEach(forEachFun func(int, E) bool) bool { + for index, elem := range s.slice { + if !forEachFun(index, elem) { + return false + } + } + return true +} + +// Returns a reference to new SliceStruct with exactly the same elements +func (s *SliceStruct[E]) Clone() *SliceStruct[E] { + return s.CloneDeep(func(elem E) E { return elem }) // NOTE: this is not deep cloning as the passed function is a simple identity +} + +// Returns a reference to new SliceStruct with every element of the old SliceStruct cloned using provided function +func (s *SliceStruct[E]) CloneDeep(cloneFun func(E) E) *SliceStruct[E] { + result := make([]E, s.Length()) + s.ForEach(func(index int, elem E) bool { + result[index] = cloneFun(elem) + return true + }) + return NewSliceStruct(result...) +} + +func (s *SliceStruct[E]) ContainsBy(fun func(E) bool) bool { + return lo.ContainsBy(s.slice, fun) +} + +func (s *SliceStruct[E]) Find(fun func(E) bool) (E, bool) { + return lo.Find(s.slice, fun) +} diff --git a/packages/vm/core/blocklog/blockinfo.go b/packages/vm/core/blocklog/blockinfo.go index 1ac11f0f71..e74bf288f2 100644 --- a/packages/vm/core/blocklog/blockinfo.go +++ b/packages/vm/core/blocklog/blockinfo.go @@ -46,15 +46,17 @@ func (bi *BlockInfo) PreviousL1Commitment() *state.L1Commitment { } func (bi *BlockInfo) String() string { - ret := fmt.Sprintf("Block index: %d\n", bi.BlockIndex()) - ret += fmt.Sprintf("SchemaVersion: %d\n", bi.SchemaVersion) - ret += fmt.Sprintf("Timestamp: %d\n", bi.Timestamp.Unix()) - ret += fmt.Sprintf("Total requests: %d\n", bi.TotalRequests) - ret += fmt.Sprintf("off-ledger requests: %d\n", bi.NumOffLedgerRequests) - ret += fmt.Sprintf("Succesfull requests: %d\n", bi.NumSuccessfulRequests) - ret += fmt.Sprintf("Prev AliasOutput: %s\n", bi.PreviousAliasOutput.String()) - ret += fmt.Sprintf("Gas burned: %d\n", bi.GasBurned) - ret += fmt.Sprintf("Gas fee charged: %d\n", bi.GasFeeCharged) + ret := "{\n" + ret += fmt.Sprintf("\tBlock index: %d\n", bi.BlockIndex()) + ret += fmt.Sprintf("\tSchemaVersion: %d\n", bi.SchemaVersion) + ret += fmt.Sprintf("\tTimestamp: %d\n", bi.Timestamp.Unix()) + ret += fmt.Sprintf("\tTotal requests: %d\n", bi.TotalRequests) + ret += fmt.Sprintf("\toff-ledger requests: %d\n", bi.NumOffLedgerRequests) + ret += fmt.Sprintf("\tSuccessful requests: %d\n", bi.NumSuccessfulRequests) + ret += fmt.Sprintf("\tPrev AliasOutput: %s\n", bi.PreviousAliasOutput.String()) + ret += fmt.Sprintf("\tGas burned: %d\n", bi.GasBurned) + ret += fmt.Sprintf("\tGas fee charged: %d\n", bi.GasFeeCharged) + ret += "}\n" return ret } diff --git a/packages/vm/core/evm/evmtest/evm_test.go b/packages/vm/core/evm/evmtest/evm_test.go index 4743d1734e..d32b9ba4f3 100644 --- a/packages/vm/core/evm/evmtest/evm_test.go +++ b/packages/vm/core/evm/evmtest/evm_test.go @@ -1608,7 +1608,7 @@ func TestSolidityRevertMessage(t *testing.T) { require.EqualValues(t, "execution reverted: foobar", res.iscReceipt.ResolvedError) } -func TestCallContractCannotCauseStackOverlow(t *testing.T) { +func TestCallContractCannotCauseStackOverflow(t *testing.T) { env := initEVM(t) ethKey, _ := env.soloChain.NewEthereumAccountWithL2Funds() diff --git a/packages/vm/vmimpl/vmcontext.go b/packages/vm/vmimpl/vmcontext.go index b0c155164f..155e0cf932 100644 --- a/packages/vm/vmimpl/vmcontext.go +++ b/packages/vm/vmimpl/vmcontext.go @@ -156,7 +156,7 @@ func (vmctx *vmContext) saveBlockInfo(numRequests, numSuccess, numOffLedger uint blocklog.SaveNextBlockInfo(s, blockInfo) blocklog.Prune(s, blockInfo.BlockIndex(), vmctx.chainInfo.BlockKeepAmount) }) - vmctx.task.Log.Debugf("saved blockinfo: %s", blockInfo) + vmctx.task.Log.Debugf("saved blockinfo:\n%s", blockInfo) return nil } diff --git a/packages/vm/vmtxbuilder/txbuilder.go b/packages/vm/vmtxbuilder/txbuilder.go index bcc5f356b6..51f62f3100 100644 --- a/packages/vm/vmtxbuilder/txbuilder.go +++ b/packages/vm/vmtxbuilder/txbuilder.go @@ -44,7 +44,7 @@ type AnchorTransactionBuilder struct { // already consumed outputs, specified by entire Request. It is needed for checking validity consumed []isc.OnLedgerRequest - // view the acounts contract state + // view the accounts contract state accountsView AccountsContractRead // balances of native tokens loaded during the batch run diff --git a/packages/wasmvm/wasmclient/Cargo.toml b/packages/wasmvm/wasmclient/Cargo.toml index 793444eb62..34585a91e5 100644 --- a/packages/wasmvm/wasmclient/Cargo.toml +++ b/packages/wasmvm/wasmclient/Cargo.toml @@ -18,8 +18,8 @@ iota-crypto = { git = "https://github.com/iotaledger/crypto.rs", branch = "dev", wasmlib = { path = "../wasmlib" } #wasmlib = { git = "https://github.com/iotaledger/wasp", branch = "develop" } wasm-bindgen = "0.2.87" -serde = { version = "1.0.164", features = ["derive"] } -serde_json = "1.0.99" +serde = { version = "1.0.171", features = ["derive"] } +serde_json = "1.0.102" bech32 = "0.9.1" base64 = "0.21.2" reqwest = { version = "0.11.18", features = ["blocking", "json"] } diff --git a/packages/webapi/controllers/chain/chain.go b/packages/webapi/controllers/chain/chain.go index 378276f344..c693d2a296 100644 --- a/packages/webapi/controllers/chain/chain.go +++ b/packages/webapi/controllers/chain/chain.go @@ -50,7 +50,7 @@ func (c *Controller) getChainInfo(e echo.Context) error { return err } - chainInfo, err := c.chainService.GetChainInfoByChainID(chainID, e.Param(params.ParamBlockIndexOrTrieRoot)) + chainInfo, err := c.chainService.GetChainInfoByChainID(chainID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if errors.Is(err, interfaces.ErrChainNotFound) { return e.NoContent(http.StatusNotFound) } else if err != nil { @@ -59,7 +59,7 @@ func (c *Controller) getChainInfo(e echo.Context) error { evmChainID := uint16(0) if chainInfo.IsActive { - evmChainID, err = c.chainService.GetEVMChainID(chainID, e.Param(params.ParamBlockIndexOrTrieRoot)) + evmChainID, err = c.chainService.GetEVMChainID(chainID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return err } diff --git a/packages/webapi/controllers/chain/contracts.go b/packages/webapi/controllers/chain/contracts.go index 05bc210479..e606427969 100644 --- a/packages/webapi/controllers/chain/contracts.go +++ b/packages/webapi/controllers/chain/contracts.go @@ -17,7 +17,7 @@ func (c *Controller) getContracts(e echo.Context) error { return err } - contracts, err := c.chainService.GetContracts(chainID, e.Param(params.ParamBlockIndexOrTrieRoot)) + contracts, err := c.chainService.GetContracts(chainID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return err } diff --git a/packages/webapi/controllers/corecontracts/accounts.go b/packages/webapi/controllers/corecontracts/accounts.go index 00536067c5..f031f5a937 100644 --- a/packages/webapi/controllers/corecontracts/accounts.go +++ b/packages/webapi/controllers/corecontracts/accounts.go @@ -19,7 +19,7 @@ func (c *Controller) getAccounts(e echo.Context) error { return c.handleViewCallError(err, chainID) } - accounts, err := corecontracts.GetAccounts(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + accounts, err := corecontracts.GetAccounts(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -41,7 +41,7 @@ func (c *Controller) getTotalAssets(e echo.Context) error { return c.handleViewCallError(err, chainID) } - assets, err := corecontracts.GetTotalAssets(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + assets, err := corecontracts.GetTotalAssets(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -65,7 +65,7 @@ func (c *Controller) getAccountBalance(e echo.Context) error { return err } - assets, err := corecontracts.GetAccountBalance(ch, agentID, e.Param(params.ParamBlockIndexOrTrieRoot)) + assets, err := corecontracts.GetAccountBalance(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -89,7 +89,7 @@ func (c *Controller) getAccountNFTs(e echo.Context) error { return err } - nfts, err := corecontracts.GetAccountNFTs(ch, agentID, e.Param(params.ParamBlockIndexOrTrieRoot)) + nfts, err := corecontracts.GetAccountNFTs(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -115,7 +115,7 @@ func (c *Controller) getAccountFoundries(e echo.Context) error { return err } - foundries, err := corecontracts.GetAccountFoundries(ch, agentID, e.Param(params.ParamBlockIndexOrTrieRoot)) + foundries, err := corecontracts.GetAccountFoundries(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -136,7 +136,7 @@ func (c *Controller) getAccountNonce(e echo.Context) error { return err } - nonce, err := corecontracts.GetAccountNonce(ch, agentID, e.Param(params.ParamBlockIndexOrTrieRoot)) + nonce, err := corecontracts.GetAccountNonce(ch, agentID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -159,7 +159,7 @@ func (c *Controller) getNFTData(e echo.Context) error { return err } - nftData, err := corecontracts.GetNFTData(ch, *nftID, e.Param(params.ParamBlockIndexOrTrieRoot)) + nftData, err := corecontracts.GetNFTData(ch, *nftID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -175,7 +175,7 @@ func (c *Controller) getNativeTokenIDRegistry(e echo.Context) error { return c.handleViewCallError(err, chainID) } - registries, err := corecontracts.GetNativeTokenIDRegistry(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + registries, err := corecontracts.GetNativeTokenIDRegistry(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -202,7 +202,7 @@ func (c *Controller) getFoundryOutput(e echo.Context) error { return err } - foundryOutput, err := corecontracts.GetFoundryOutput(ch, uint32(serialNumber), e.Param(params.ParamBlockIndexOrTrieRoot)) + foundryOutput, err := corecontracts.GetFoundryOutput(ch, uint32(serialNumber), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } diff --git a/packages/webapi/controllers/corecontracts/blob.go b/packages/webapi/controllers/corecontracts/blob.go index 0e7d20b9ef..2175a16239 100644 --- a/packages/webapi/controllers/corecontracts/blob.go +++ b/packages/webapi/controllers/corecontracts/blob.go @@ -27,7 +27,7 @@ func (c *Controller) listBlobs(e echo.Context) error { return c.handleViewCallError(err, chainID) } - blobList, err := corecontracts.ListBlobs(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + blobList, err := corecontracts.ListBlobs(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -63,7 +63,7 @@ func (c *Controller) getBlobValue(e echo.Context) error { fieldKey := e.Param(params.ParamFieldKey) - blobValueBytes, err := corecontracts.GetBlobValue(ch, *blobHash, fieldKey, e.Param(params.ParamBlockIndexOrTrieRoot)) + blobValueBytes, err := corecontracts.GetBlobValue(ch, *blobHash, fieldKey, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -92,7 +92,7 @@ func (c *Controller) getBlobInfo(e echo.Context) error { return err } - blobInfo, ok, err := corecontracts.GetBlobInfo(ch, *blobHash, e.Param(params.ParamBlockIndexOrTrieRoot)) + blobInfo, ok, err := corecontracts.GetBlobInfo(ch, *blobHash, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } diff --git a/packages/webapi/controllers/corecontracts/blocklog.go b/packages/webapi/controllers/corecontracts/blocklog.go index f1796f4333..8f4b8b8aa1 100644 --- a/packages/webapi/controllers/corecontracts/blocklog.go +++ b/packages/webapi/controllers/corecontracts/blocklog.go @@ -47,7 +47,7 @@ func (c *Controller) getBlockInfo(e echo.Context) error { blockIndex := e.Param(params.ParamBlockIndex) if blockIndex == "" { - blockInfo, err = corecontracts.GetLatestBlockInfo(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + blockInfo, err = corecontracts.GetLatestBlockInfo(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } else { var blockIndexNum uint64 blockIndexNum, err = strconv.ParseUint(e.Param(params.ParamBlockIndex), 10, 64) @@ -55,7 +55,7 @@ func (c *Controller) getBlockInfo(e echo.Context) error { return apierrors.InvalidPropertyError(params.ParamBlockIndex, err) } - blockInfo, err = corecontracts.GetBlockInfo(ch, uint32(blockIndexNum), e.Param(params.ParamBlockIndexOrTrieRoot)) + blockInfo, err = corecontracts.GetBlockInfo(ch, uint32(blockIndexNum), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } if err != nil { return c.handleViewCallError(err, chainID) @@ -75,7 +75,7 @@ func (c *Controller) getRequestIDsForBlock(e echo.Context) error { blockIndex := e.Param(params.ParamBlockIndex) if blockIndex == "" { - requestIDs, err = corecontracts.GetRequestIDsForLatestBlock(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + requestIDs, err = corecontracts.GetRequestIDsForLatestBlock(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } else { var blockIndexNum uint64 blockIndexNum, err = params.DecodeUInt(e, params.ParamBlockIndex) @@ -83,7 +83,7 @@ func (c *Controller) getRequestIDsForBlock(e echo.Context) error { return err } - requestIDs, err = corecontracts.GetRequestIDsForBlock(ch, uint32(blockIndexNum), e.Param(params.ParamBlockIndexOrTrieRoot)) + requestIDs, err = corecontracts.GetRequestIDsForBlock(ch, uint32(blockIndexNum), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } if err != nil { @@ -111,7 +111,7 @@ func GetRequestReceipt(e echo.Context, c interfaces.ChainService) error { return err } - receipt, err := corecontracts.GetRequestReceipt(ch, requestID, e.Param(params.ParamBlockIndexOrTrieRoot)) + receipt, err := corecontracts.GetRequestReceipt(ch, requestID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { panic(err) } @@ -141,12 +141,12 @@ func (c *Controller) getRequestReceiptsForBlock(e echo.Context) error { if blockIndex == "" { var blockInfo *blocklog.BlockInfo - blockInfo, err = corecontracts.GetLatestBlockInfo(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + blockInfo, err = corecontracts.GetLatestBlockInfo(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } - blocklogReceipts, err = corecontracts.GetRequestReceiptsForBlock(ch, blockInfo.BlockIndex(), e.Param(params.ParamBlockIndexOrTrieRoot)) + blocklogReceipts, err = corecontracts.GetRequestReceiptsForBlock(ch, blockInfo.BlockIndex(), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } else { var blockIndexNum uint64 blockIndexNum, err = params.DecodeUInt(e, params.ParamBlockIndex) @@ -154,7 +154,7 @@ func (c *Controller) getRequestReceiptsForBlock(e echo.Context) error { return err } - blocklogReceipts, err = corecontracts.GetRequestReceiptsForBlock(ch, uint32(blockIndexNum), e.Param(params.ParamBlockIndexOrTrieRoot)) + blocklogReceipts, err = corecontracts.GetRequestReceiptsForBlock(ch, uint32(blockIndexNum), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) } if err != nil { return c.handleViewCallError(err, chainID) @@ -184,7 +184,7 @@ func (c *Controller) getIsRequestProcessed(e echo.Context) error { return err } - requestProcessed, err := corecontracts.IsRequestProcessed(ch, requestID, e.Param(params.ParamBlockIndexOrTrieRoot)) + requestProcessed, err := corecontracts.IsRequestProcessed(ch, requestID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -222,17 +222,17 @@ func (c *Controller) getBlockEvents(e echo.Context) error { return err } - events, err = corecontracts.GetEventsForBlock(ch, uint32(blockIndexNum), e.Param(params.ParamBlockIndexOrTrieRoot)) + events, err = corecontracts.GetEventsForBlock(ch, uint32(blockIndexNum), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } } else { - blockInfo, err := corecontracts.GetLatestBlockInfo(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + blockInfo, err := corecontracts.GetLatestBlockInfo(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } - events, err = corecontracts.GetEventsForBlock(ch, blockInfo.BlockIndex(), e.Param(params.ParamBlockIndexOrTrieRoot)) + events, err = corecontracts.GetEventsForBlock(ch, blockInfo.BlockIndex(), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -250,7 +250,7 @@ func (c *Controller) getContractEvents(e echo.Context) error { return err } - events, err := corecontracts.GetEventsForContract(ch, contractHname, e.Param(params.ParamBlockIndexOrTrieRoot)) + events, err := corecontracts.GetEventsForContract(ch, contractHname, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -267,7 +267,7 @@ func (c *Controller) getRequestEvents(e echo.Context) error { return err } - events, err := corecontracts.GetEventsForRequest(ch, requestID, e.Param(params.ParamBlockIndexOrTrieRoot)) + events, err := corecontracts.GetEventsForRequest(ch, requestID, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } diff --git a/packages/webapi/controllers/corecontracts/errors.go b/packages/webapi/controllers/corecontracts/errors.go index 2bffff8f48..097f7f09e9 100644 --- a/packages/webapi/controllers/corecontracts/errors.go +++ b/packages/webapi/controllers/corecontracts/errors.go @@ -29,7 +29,7 @@ func (c *Controller) getErrorMessageFormat(e echo.Context) error { return err } - messageFormat, err := corecontracts.ErrorMessageFormat(ch, contractHname, uint16(errorID), e.Param(params.ParamBlockIndexOrTrieRoot)) + messageFormat, err := corecontracts.ErrorMessageFormat(ch, contractHname, uint16(errorID), e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } diff --git a/packages/webapi/controllers/corecontracts/governance.go b/packages/webapi/controllers/corecontracts/governance.go index d4c60fb964..7cfd76898b 100644 --- a/packages/webapi/controllers/corecontracts/governance.go +++ b/packages/webapi/controllers/corecontracts/governance.go @@ -36,7 +36,7 @@ func (c *Controller) getChainInfo(e echo.Context) error { return c.handleViewCallError(err, chainID) } - chainInfo, err := corecontracts.GetChainInfo(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + chainInfo, err := corecontracts.GetChainInfo(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -52,7 +52,7 @@ func (c *Controller) getChainOwner(e echo.Context) error { return c.handleViewCallError(err, chainID) } - chainOwner, err := corecontracts.GetChainOwner(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + chainOwner, err := corecontracts.GetChainOwner(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } @@ -70,7 +70,7 @@ func (c *Controller) getAllowedStateControllerAddresses(e echo.Context) error { return c.handleViewCallError(err, chainID) } - addresses, err := corecontracts.GetAllowedStateControllerAddresses(ch, e.Param(params.ParamBlockIndexOrTrieRoot)) + addresses, err := corecontracts.GetAllowedStateControllerAddresses(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot)) if err != nil { return c.handleViewCallError(err, chainID) } diff --git a/renovate.json b/renovate.json index c4bd968be8..b388229702 100644 --- a/renovate.json +++ b/renovate.json @@ -15,13 +15,5 @@ ], "goGetDirs": [ "." - ], - "allowedPostUpgradeCommands": [ - "^\\./scripts/go_mod_tidy.sh$" - ], - "postUpgradeTasks": { - "commands": [ - "./scripts/go_mod_tidy.sh" - ] - } + ] } \ No newline at end of file diff --git a/tools/cluster/tests/inccounter_test.go b/tools/cluster/tests/inccounter_test.go index 5e63a0a776..59884af238 100644 --- a/tools/cluster/tests/inccounter_test.go +++ b/tools/cluster/tests/inccounter_test.go @@ -256,7 +256,7 @@ func testIncViewCounter(t *testing.T, env *ChainEnv) { require.EqualValues(t, 1, counter) } -// privtangle tests have accellerate milestones (check `startCoordinator` on `privtangle.go`) +// privtangle tests have accelerate milestones (check `startCoordinator` on `privtangle.go`) // right now each milestone is issued each 100ms which means a "1s increase" each 100ms // executed in cluster_test.go func testIncCounterTimelock(t *testing.T, env *ChainEnv) { diff --git a/tools/cluster/tests/return_unlock_condition_test.go b/tools/cluster/tests/return_unlock_condition_test.go index ae1b8ef707..7a5af6a99b 100644 --- a/tools/cluster/tests/return_unlock_condition_test.go +++ b/tools/cluster/tests/return_unlock_condition_test.go @@ -15,7 +15,7 @@ import ( "github.com/iotaledger/wasp/packages/transaction" ) -// buils a normal tx to post a request to inccounter, optionally adds SDRC +// builds a normal tx to post a request to inccounter, optionally adds SDRC func buildTX(t *testing.T, env *ChainEnv, addr iotago.Address, keyPair *cryptolib.KeyPair, addSDRC bool) *iotago.Transaction { outputs, err := env.Clu.L1Client().OutputMap(addr) require.NoError(t, err) diff --git a/tools/gascalibration/go.mod b/tools/gascalibration/go.mod index 70ce488a17..9485404ec5 100644 --- a/tools/gascalibration/go.mod +++ b/tools/gascalibration/go.mod @@ -24,17 +24,17 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b // indirect - github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/ethereum/go-ethereum v1.12.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.22.0 // indirect github.com/go-fonts/liberation v0.3.1 // indirect github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect github.com/go-ole/go-ole v1.2.6 // indirect @@ -52,15 +52,15 @@ require ( github.com/huin/goupnp v1.2.0 // indirect github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 // indirect + github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 // indirect github.com/iotaledger/iota.go v1.0.0 // indirect github.com/iotaledger/iota.go/v3 v3.0.0-rc.3 // indirect github.com/iotaledger/wasp v1.0.0-00010101000000-000000000000 // indirect @@ -76,7 +76,7 @@ require ( github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.27.6 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.16.0 // indirect @@ -84,7 +84,7 @@ require ( github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/samber/lo v1.38.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect @@ -102,13 +102,13 @@ require ( go.uber.org/goleak v1.2.1 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/image v0.7.0 // indirect - golang.org/x/net v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/grpc v1.55.0 // indirect diff --git a/tools/gascalibration/go.sum b/tools/gascalibration/go.sum index dc2724b969..6d0d14178f 100644 --- a/tools/gascalibration/go.sum +++ b/tools/gascalibration/go.sum @@ -1,4 +1,3 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= @@ -6,24 +5,17 @@ git.sr.ht/~sbinet/gg v0.4.1 h1:YccqPPS57/TpqX2fFnSRlisrqQ43gEdqVm3JtabPrp0= git.sr.ht/~sbinet/gg v0.4.1/go.mod h1:xKrQ22W53kn8Hlq+gzYeyyohGMwR8yGgSMlVpY/mHGc= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -31,29 +23,19 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b h1:92ve6F1Pls/eqd+V+102lOMRJatgpqqsQvbT9Bl/fjg= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -65,32 +47,15 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -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.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/getsentry/sentry-go v0.22.0 h1:XNX9zKbv7baSEI65l+H1GEJgSeIC1c7EN5kluWaP6dM= +github.com/getsentry/sentry-go v0.22.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= github.com/go-fonts/latin-modern v0.3.1 h1:/cT8A7uavYKvglYXvrdDw4oS5ZLkcOU22fa2HJ1/JVM= @@ -98,7 +63,6 @@ github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ= @@ -107,60 +71,36 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.2.0/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/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -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.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.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 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/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -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.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 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/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.2 h1:TXKcSGc2WaxPD2+bmzAsVthL4+pEN0YwXcL5qED83vk= @@ -168,103 +108,54 @@ github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/iotaledger/go-ethereum v1.12.0-wasp h1:rBMzSLRi+0WReEO5eYmm47fR+/2/GCmm0YUjoTalFro= github.com/iotaledger/go-ethereum v1.12.0-wasp/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 h1:cADhnifbOeGuGZfAw+QYq1DdRYSWxOQpq3fRzhN3aaE= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 h1:oXs44XoTd5IK6qy1Mcu/O607FGqH52RIAiCNBSExizA= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 h1:r0jnucfIUmtk1+y0gpWCga0z2XVHuxaWIZOr8m+2E28= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 h1:Qhgbik2YYYLik1AAb9newLNRvO3XMhdj1FOe1wHho0U= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 h1:mAifrfqpzx4AGvvdr7yEJ3GQUmEjUBlkzVoLk6+79Bc= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 h1:50uDxTKB/HWMhAhzognCBoY+xf4pOEKNaznoIqc2D1g= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 h1:yZH3ZhwbUlmefsY4WjOuSHIGIxZVUEHcGbe24rvwa+Y= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 h1:AF3u8en9xETBK14nByOFrk7rY1aRJBzlGo+8k9VqEIQ= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 h1:JWv+DePobyjR5K1tzE2w7bs79WzBLMuxYLIFC3idPvA= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 h1:GhlFUSZeNSpjA3+myBOJu04W2BKWaKvjJjqfunBA+Zg= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 h1:x0z1qd3CjuIw/sXmpkOwIWQUcsxBBpBSWgfAhahQiw8= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 h1:Zs3fuwTj4dvSVhBou8gm4CCTMsvdwnb/8B0I9ICDUPA= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 h1:N5teZ9ixsjyfGWlXNWg+/dxG0lkmNiqILvDrAa9SQos= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 h1:EMsp6JeHdpYYj632wkCxrXaL1ZffY53aqfDtYe9XzvE= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 h1:M66OueWagjBATFWGzBjIY6mN8bi2M9Aaiu8+7j4jaXE= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 h1:khNJmmG8ZOOR3Qx7iaSEHkL+4y3oseznnxz9GK1xUuM= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 h1:YK/dRP8Z2vmX+SOAuBVS99WU3zH1t5qaAB1Bj7/PFOc= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 h1:NmmRkAKLBIOjlT1tEF2NbPvzCawOr1Lgm99k1+ElZKM= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= github.com/iotaledger/iota.go v1.0.0 h1:tqm1FxJ/zOdzbrAaQ5BQpVF8dUy2eeGlSeWlNG8GoXY= github.com/iotaledger/iota.go v1.0.0/go.mod h1:RiKYwDyY7aCD1L0YRzHSjOsJ5mUR9yvQpvhZncNcGQI= github.com/iotaledger/iota.go/v3 v3.0.0-rc.3 h1:/2gH+AlsWX2T7f4uHvD7oAHmPRsW+SkjR29txzqpi5M= github.com/iotaledger/iota.go/v3 v3.0.0-rc.3/go.mod h1:R3m6d5AFI0I++HOaYQR7QU8hY//vUSwbOyqQ7Bco2O4= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93 h1:gb2I60XsNkyYmPd7PyeCkUMaFfoFuv3C4SlXlO1STHM= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= 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.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 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/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -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/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= @@ -274,7 +165,6 @@ github.com/oasisprotocol/ed25519 v0.0.0-20210505154701-76d8c688d86e/go.mod h1:IZ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/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.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -285,13 +175,11 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.10.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ= github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= 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/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -301,7 +189,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= @@ -311,47 +198,29 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= 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/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/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 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= @@ -366,29 +235,10 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= @@ -404,62 +254,37 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +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/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw= golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= -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/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 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.4.2/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.8.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-20181220203305-927f97764cc3/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-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -468,21 +293,14 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/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-20190222072716-a9d3bda3a223/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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/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-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/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= @@ -490,51 +308,31 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/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-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/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-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -546,21 +344,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNq gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM= gonum.org/v1/plot v0.13.0 h1:yb2Z/b8bY5h/xC4uix+ujJ+ixvPUvBmUOtM73CJzpsw= gonum.org/v1/plot v0.13.0/go.mod h1:mV4Bpu4PWTgN2CETURNF8hCMg7EtlZqJYCcmYo/t4Co= -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-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -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.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -568,25 +353,15 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ 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.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -594,12 +369,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/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-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= diff --git a/tools/gendoc/go.mod b/tools/gendoc/go.mod index a98d61ab4c..3e59904874 100644 --- a/tools/gendoc/go.mod +++ b/tools/gendoc/go.mod @@ -9,7 +9,7 @@ replace ( ) require ( - github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 + github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 github.com/iotaledger/hive.go/apputils v1.0.0-rc.1.0.20230417125513-e2e89991217f github.com/iotaledger/wasp v1.0.0-00010101000000-000000000000 ) @@ -24,10 +24,10 @@ require ( github.com/bygui86/multi-profile/v2 v2.1.0 // indirect github.com/bytecodealliance/wasmtime-go/v9 v9.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b // indirect - github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -45,7 +45,7 @@ require ( github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.22.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect @@ -71,17 +71,17 @@ require ( github.com/huin/goupnp v1.2.0 // indirect github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 // indirect - github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 // indirect + github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 // indirect github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a // indirect github.com/iotaledger/inx/go v1.0.0-rc.2 // indirect github.com/iotaledger/iota.go v1.0.0 // indirect @@ -124,7 +124,7 @@ require ( github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.9.0 // indirect + github.com/multiformats/go-multiaddr v0.10.1 // indirect github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect @@ -139,8 +139,8 @@ require ( github.com/pangpanglabs/echoswagger/v2 v2.4.1 // indirect github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.16.0 // indirect @@ -154,13 +154,13 @@ require ( github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/samber/lo v1.38.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/second-state/WasmEdge-go v0.12.0 // indirect + github.com/second-state/WasmEdge-go v0.12.1 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/status-im/keycard-go v0.2.0 // indirect github.com/stretchr/testify v1.8.4 // indirect @@ -181,13 +181,13 @@ require ( go.uber.org/fx v1.19.2 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.11.0 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.1 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/tools/gendoc/go.sum b/tools/gendoc/go.sum index a2d2165e8a..b4ddfe8c51 100644 --- a/tools/gendoc/go.sum +++ b/tools/gendoc/go.sum @@ -11,16 +11,11 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= 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= @@ -31,7 +26,6 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -45,7 +39,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72H github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -76,30 +69,23 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b h1:92ve6F1Pls/eqd+V+102lOMRJatgpqqsQvbT9Bl/fjg= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -114,10 +100,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -126,7 +110,6 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= @@ -135,8 +118,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -148,26 +129,21 @@ github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.22.0 h1:XNX9zKbv7baSEI65l+H1GEJgSeIC1c7EN5kluWaP6dM= +github.com/getsentry/sentry-go v0.22.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -178,7 +154,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -207,14 +182,10 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -244,7 +215,6 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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= @@ -310,7 +280,6 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -336,41 +305,38 @@ github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/iotaledger/go-ethereum v1.12.0-wasp h1:rBMzSLRi+0WReEO5eYmm47fR+/2/GCmm0YUjoTalFro= github.com/iotaledger/go-ethereum v1.12.0-wasp/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PTNgli6EbS4tV9qu3QAm/kBU3XaYZV2xdzys= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 h1:vdVG068l2cDUuyUSrdKRG9IZOSii74t5iWyrwfr0utc= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 h1:ywzdfG6X522zHDdMp4gFYyr4MXnPk5tN99MtdCEhumM= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= github.com/iotaledger/hive.go/apputils v1.0.0-rc.1.0.20230417125513-e2e89991217f h1:7WLntDniah8KzA5XLb4hwhtR+gR+UYIot9gDpXPJ824= github.com/iotaledger/hive.go/apputils v1.0.0-rc.1.0.20230417125513-e2e89991217f/go.mod h1:07HqeSxRXp/JFguDfDH4jb+dwDJ/jIE4xZ0iTMtSrGc= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 h1:cADhnifbOeGuGZfAw+QYq1DdRYSWxOQpq3fRzhN3aaE= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 h1:oXs44XoTd5IK6qy1Mcu/O607FGqH52RIAiCNBSExizA= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 h1:r0jnucfIUmtk1+y0gpWCga0z2XVHuxaWIZOr8m+2E28= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 h1:Qhgbik2YYYLik1AAb9newLNRvO3XMhdj1FOe1wHho0U= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 h1:mAifrfqpzx4AGvvdr7yEJ3GQUmEjUBlkzVoLk6+79Bc= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 h1:50uDxTKB/HWMhAhzognCBoY+xf4pOEKNaznoIqc2D1g= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 h1:apDCJqkZ+GMR7Cui5nycKD18+ykKagXCMakAAoGBt6U= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 h1:yZH3ZhwbUlmefsY4WjOuSHIGIxZVUEHcGbe24rvwa+Y= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 h1:AF3u8en9xETBK14nByOFrk7rY1aRJBzlGo+8k9VqEIQ= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 h1:JWv+DePobyjR5K1tzE2w7bs79WzBLMuxYLIFC3idPvA= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 h1:c6WCBtoUI4hBHxx9wnAqHjiCBiNsTE5mOUq+bZN0X1E= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 h1:GhlFUSZeNSpjA3+myBOJu04W2BKWaKvjJjqfunBA+Zg= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 h1:x0z1qd3CjuIw/sXmpkOwIWQUcsxBBpBSWgfAhahQiw8= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 h1:Zs3fuwTj4dvSVhBou8gm4CCTMsvdwnb/8B0I9ICDUPA= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 h1:N5teZ9ixsjyfGWlXNWg+/dxG0lkmNiqILvDrAa9SQos= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 h1:EMsp6JeHdpYYj632wkCxrXaL1ZffY53aqfDtYe9XzvE= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 h1:M66OueWagjBATFWGzBjIY6mN8bi2M9Aaiu8+7j4jaXE= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 h1:jiQzzYPHqDNleU5tLpKHETF39rUdabs8dgHbrtJ1urM= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 h1:khNJmmG8ZOOR3Qx7iaSEHkL+4y3oseznnxz9GK1xUuM= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 h1:YK/dRP8Z2vmX+SOAuBVS99WU3zH1t5qaAB1Bj7/PFOc= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 h1:NmmRkAKLBIOjlT1tEF2NbPvzCawOr1Lgm99k1+ElZKM= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 h1:T9Wg7bMu8NWoVDyVoPXFVvVF4OE4ZNybs3pSObffn3U= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a h1:mVYBXnSSVl9xRxzZReRdRQN43gUz3IMOxb+IEMQFTp4= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a/go.mod h1:9AA+oDJv4WGM0YdDm7Lh24XK5O9Jd9SPw3ApMJSSv7k= github.com/iotaledger/inx/go v1.0.0-rc.2 h1:SjHGHQ1pEe7/B0bnVIHCa1zQBvcC0QRwcYPzUGarrJU= @@ -385,11 +351,6 @@ github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= @@ -406,26 +367,16 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93 h1:gb2I60XsNkyYmPd7PyeCkUMaFfoFuv3C4SlXlO1STHM= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= @@ -438,7 +389,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 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= @@ -451,7 +401,6 @@ github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8c github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= github.com/labstack/echo/v4 v4.1.13/go.mod h1:3WZNypykZ3tnqpF2Qb4fPg27XDunFqgP3HGDmCMgv7U= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= @@ -481,7 +430,6 @@ github.com/libp2p/go-reuseport v0.3.0/go.mod h1:laea40AimhtfEqysZ71UpYj4S+R9VpH8 github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= @@ -489,12 +437,10 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 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.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -507,13 +453,10 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= @@ -550,7 +493,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -560,8 +502,8 @@ github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= -github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= +github.com/multiformats/go-multiaddr v0.10.1 h1:HghtFrWyZEPrpTvgAMFJi6gFdgHfs2cb0pyfDsk+lqU= +github.com/multiformats/go-multiaddr v0.10.1/go.mod h1:jLEZsA61rwWNZQTHHnqq2HNa+4os/Hz54eqiRnsRqYQ= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= @@ -580,10 +522,6 @@ github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/n github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= @@ -596,7 +534,6 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/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.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -619,16 +556,14 @@ github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c h1:Gcce/r5tSQeprxs github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c/go.mod h1:1iCZ0433JJMecYqCa+TdWA9Pax8MGl4ByuNDZ7eSnQY= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= 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/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4= 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= @@ -682,11 +617,9 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +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/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -696,10 +629,9 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= 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/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/second-state/WasmEdge-go v0.12.0 h1:CJFH/rwZMXIX/UeX4CRUzbcTUlXJfFNZTm3wiZ0Ck+8= -github.com/second-state/WasmEdge-go v0.12.0/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= +github.com/second-state/WasmEdge-go v0.12.1 h1:rIRiRF35+8CtcYTsiW4KfFNIh3faRb3LoG2c7cCqQyI= +github.com/second-state/WasmEdge-go v0.12.1/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -730,23 +662,15 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= 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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -762,7 +686,7 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -777,37 +701,24 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= github.com/wasmerio/wasmer-go v1.0.4/go.mod h1:0gzVdSfg6pysA6QVp6iVRPTagC6Wq9pOE8J86WKb2Fk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= @@ -844,12 +755,10 @@ go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1 golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -857,12 +766,11 @@ golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +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-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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= @@ -874,25 +782,21 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +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-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181220203305-927f97764cc3/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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -907,9 +811,8 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -934,7 +837,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -943,7 +845,6 @@ golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -970,23 +871,19 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -995,26 +892,21 @@ 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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/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-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1024,7 +916,6 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= @@ -1041,7 +932,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1053,10 +943,8 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG 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-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1090,15 +978,10 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1113,7 +996,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/tools/local-setup/README.md b/tools/local-setup/README.md index 2f43aaf2bd..6e96fe8bb0 100644 --- a/tools/local-setup/README.md +++ b/tools/local-setup/README.md @@ -28,7 +28,7 @@ You can stop execution with `docker-compose down`. After `docker compose down`: ``` - docker volume rm wasp-db hornet-nest-db +docker volume rm wasp-db hornet-nest-db ``` You'll need to re-create the volumes to spin the setup up again. @@ -76,4 +76,3 @@ ChainID: 1074 ### Re-build (wasp-devs only) If you made changes to the Wasp code and want to use it inside the setup, you can re-build the Wasp image using `build_container.sh` or `build_container.cmd`. - diff --git a/tools/wasp-cli/chain/deploy.go b/tools/wasp-cli/chain/deploy.go index 37d4257e29..9466b8fddf 100644 --- a/tools/wasp-cli/chain/deploy.go +++ b/tools/wasp-cli/chain/deploy.go @@ -70,7 +70,7 @@ func initDeployCmd() *cobra.Command { chainName = defaultChainFallback(chainName) if !util.IsSlug(chainName) { - log.Fatalf("invalid chain name: %s, must be in slug format, only lowercase and hypens, example: foo-bar", chainName) + log.Fatalf("invalid chain name: %s, must be in slug format, only lowercase and hyphens, example: foo-bar", chainName) } l1Client := cliclients.L1Client() diff --git a/tools/wasp-cli/go.mod b/tools/wasp-cli/go.mod index 9a91ba5a91..ae80a1866f 100644 --- a/tools/wasp-cli/go.mod +++ b/tools/wasp-cli/go.mod @@ -11,14 +11,14 @@ replace ( require ( github.com/ethereum/go-ethereum v1.12.0 github.com/hashicorp/go-version v1.6.0 - github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 + github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 github.com/iotaledger/iota.go/v3 v3.0.0-rc.3 github.com/iotaledger/wasp v1.0.0-00010101000000-000000000000 github.com/samber/lo v1.38.1 github.com/spf13/cobra v1.7.0 github.com/spf13/viper v1.16.0 - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 - golang.org/x/term v0.9.0 + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb + golang.org/x/term v0.10.0 ) require ( @@ -31,10 +31,10 @@ require ( github.com/bygui86/multi-profile/v2 v2.1.0 // indirect github.com/bytecodealliance/wasmtime-go/v9 v9.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b // indirect - github.com/cockroachdb/redact v1.1.3 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/containerd/cgroups v1.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -50,7 +50,7 @@ require ( github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect - github.com/getsentry/sentry-go v0.20.0 // indirect + github.com/getsentry/sentry-go v0.22.0 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect @@ -77,17 +77,17 @@ require ( github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 // indirect - github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 // indirect - github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 // indirect + github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 // indirect + github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 // indirect github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a // indirect github.com/iotaledger/inx/go v1.0.0-rc.2 // indirect github.com/iotaledger/iota.go v1.0.0 // indirect @@ -130,7 +130,7 @@ require ( github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.9.0 // indirect + github.com/multiformats/go-multiaddr v0.10.1 // indirect github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect github.com/multiformats/go-multibase v0.2.0 // indirect @@ -146,7 +146,7 @@ require ( github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect - github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect + github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.16.0 // indirect @@ -160,9 +160,9 @@ require ( github.com/quic-go/webtransport-go v0.5.3 // indirect github.com/raulk/go-watchdog v1.3.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/second-state/WasmEdge-go v0.12.0 // indirect + github.com/second-state/WasmEdge-go v0.12.1 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.5 // indirect @@ -189,12 +189,12 @@ require ( go.uber.org/fx v1.19.2 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.10.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.11.0 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.9.1 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/tools/wasp-cli/go.sum b/tools/wasp-cli/go.sum index b74c339af8..479edbf525 100644 --- a/tools/wasp-cli/go.sum +++ b/tools/wasp-cli/go.sum @@ -48,16 +48,11 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= 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= @@ -68,7 +63,6 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -82,7 +76,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72H github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -117,30 +110,23 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b h1:92ve6F1Pls/eqd+V+102lOMRJatgpqqsQvbT9Bl/fjg= github.com/cockroachdb/pebble v0.0.0-20230412222916-60cfeb46143b/go.mod h1:9lRMC4XN3/BLPtIp6kAKwIaHu369NOf2rMucPzipz50= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -156,10 +142,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190323231341-8198c7b169ec/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -168,7 +152,6 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= @@ -179,8 +162,6 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= @@ -195,21 +176,16 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.20.0 h1:bwXW98iMRIWxn+4FgPW7vMrjmbym6HblXALmhjHmQaQ= -github.com/getsentry/sentry-go v0.20.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.22.0 h1:XNX9zKbv7baSEI65l+H1GEJgSeIC1c7EN5kluWaP6dM= +github.com/getsentry/sentry-go v0.22.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -223,7 +199,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -252,14 +227,10 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -298,7 +269,6 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -382,7 +352,6 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -408,43 +377,40 @@ github.com/holiman/uint256 v1.2.2/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZm github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.2.0 h1:uOKW26NG1hsSSbXIZ1IR7XP9Gjd1U8pnLaCMgntmkmY= github.com/huin/goupnp v1.2.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/iotaledger/go-ethereum v1.12.0-wasp h1:rBMzSLRi+0WReEO5eYmm47fR+/2/GCmm0YUjoTalFro= github.com/iotaledger/go-ethereum v1.12.0-wasp/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7 h1:dTrD7X2PTNgli6EbS4tV9qu3QAm/kBU3XaYZV2xdzys= github.com/iotaledger/grocksdb v1.7.5-0.20230220105546-5162e18885c7/go.mod h1:ZRdPu684P0fQ1z8sXz4dj9H5LWHhz4a9oCtvjunkSrw= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9 h1:vdVG068l2cDUuyUSrdKRG9IZOSii74t5iWyrwfr0utc= -github.com/iotaledger/hive.go/app v0.0.0-20230425142119-6abddaf15db9/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9 h1:cADhnifbOeGuGZfAw+QYq1DdRYSWxOQpq3fRzhN3aaE= -github.com/iotaledger/hive.go/constraints v0.0.0-20230425142119-6abddaf15db9/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9 h1:oXs44XoTd5IK6qy1Mcu/O607FGqH52RIAiCNBSExizA= -github.com/iotaledger/hive.go/crypto v0.0.0-20230425142119-6abddaf15db9/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9 h1:r0jnucfIUmtk1+y0gpWCga0z2XVHuxaWIZOr8m+2E28= -github.com/iotaledger/hive.go/ds v0.0.0-20230425142119-6abddaf15db9/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9 h1:Qhgbik2YYYLik1AAb9newLNRvO3XMhdj1FOe1wHho0U= -github.com/iotaledger/hive.go/kvstore v0.0.0-20230425142119-6abddaf15db9/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9 h1:mAifrfqpzx4AGvvdr7yEJ3GQUmEjUBlkzVoLk6+79Bc= -github.com/iotaledger/hive.go/lo v0.0.0-20230425142119-6abddaf15db9/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9 h1:50uDxTKB/HWMhAhzognCBoY+xf4pOEKNaznoIqc2D1g= -github.com/iotaledger/hive.go/logger v0.0.0-20230425142119-6abddaf15db9/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9 h1:apDCJqkZ+GMR7Cui5nycKD18+ykKagXCMakAAoGBt6U= -github.com/iotaledger/hive.go/objectstorage v0.0.0-20230425142119-6abddaf15db9/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9 h1:yZH3ZhwbUlmefsY4WjOuSHIGIxZVUEHcGbe24rvwa+Y= -github.com/iotaledger/hive.go/runtime v0.0.0-20230425142119-6abddaf15db9/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9 h1:AF3u8en9xETBK14nByOFrk7rY1aRJBzlGo+8k9VqEIQ= -github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230425142119-6abddaf15db9/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9 h1:JWv+DePobyjR5K1tzE2w7bs79WzBLMuxYLIFC3idPvA= -github.com/iotaledger/hive.go/stringify v0.0.0-20230425142119-6abddaf15db9/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9 h1:c6WCBtoUI4hBHxx9wnAqHjiCBiNsTE5mOUq+bZN0X1E= -github.com/iotaledger/hive.go/web v0.0.0-20230425142119-6abddaf15db9/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15 h1:ywzdfG6X522zHDdMp4gFYyr4MXnPk5tN99MtdCEhumM= +github.com/iotaledger/hive.go/app v0.0.0-20230629181801-64c530ff9d15/go.mod h1:vMXrLYkkHAqQC8yGLXcB1Adq9s3hPPf8Dv4sfd/koas= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15 h1:GhlFUSZeNSpjA3+myBOJu04W2BKWaKvjJjqfunBA+Zg= +github.com/iotaledger/hive.go/constraints v0.0.0-20230629181801-64c530ff9d15/go.mod h1:bvXXc6quBdERMMKnirr2+iQU4WnTz4KDbdHcusW9Ats= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15 h1:x0z1qd3CjuIw/sXmpkOwIWQUcsxBBpBSWgfAhahQiw8= +github.com/iotaledger/hive.go/crypto v0.0.0-20230629181801-64c530ff9d15/go.mod h1:xp9Wbk2vp4LHb0xTbDRphSJLgLYvRNNe5lWHd8OLI5c= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15 h1:Zs3fuwTj4dvSVhBou8gm4CCTMsvdwnb/8B0I9ICDUPA= +github.com/iotaledger/hive.go/ds v0.0.0-20230629181801-64c530ff9d15/go.mod h1:wwPP73b6InomUeirqEfaYNqoTsuzxNZPa/ci4efzuyU= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15 h1:N5teZ9ixsjyfGWlXNWg+/dxG0lkmNiqILvDrAa9SQos= +github.com/iotaledger/hive.go/kvstore v0.0.0-20230629181801-64c530ff9d15/go.mod h1:oET9GdiN58SWw+INHuNwmiBlfmfRyoe1cJMx7TYk1Js= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15 h1:EMsp6JeHdpYYj632wkCxrXaL1ZffY53aqfDtYe9XzvE= +github.com/iotaledger/hive.go/lo v0.0.0-20230629181801-64c530ff9d15/go.mod h1:dsAfSt53PGgT3n675q2wFLGcvRlLNS3Affhf+vnFbb4= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15 h1:M66OueWagjBATFWGzBjIY6mN8bi2M9Aaiu8+7j4jaXE= +github.com/iotaledger/hive.go/logger v0.0.0-20230629181801-64c530ff9d15/go.mod h1:7ZE+E8JgqJ9zxg5/FOObEfYyBpC813TMv6Qzcm2YekY= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15 h1:jiQzzYPHqDNleU5tLpKHETF39rUdabs8dgHbrtJ1urM= +github.com/iotaledger/hive.go/objectstorage v0.0.0-20230629181801-64c530ff9d15/go.mod h1:E7/slsvlTsSP+laCKWbBOmSPg83UTh9mPm8ostFOlv4= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15 h1:khNJmmG8ZOOR3Qx7iaSEHkL+4y3oseznnxz9GK1xUuM= +github.com/iotaledger/hive.go/runtime v0.0.0-20230629181801-64c530ff9d15/go.mod h1:kYmuL6D9aDLqLpskEEC+DGKXC/9mx7wtLF0WItRuexs= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15 h1:YK/dRP8Z2vmX+SOAuBVS99WU3zH1t5qaAB1Bj7/PFOc= +github.com/iotaledger/hive.go/serializer/v2 v2.0.0-rc.1.0.20230629181801-64c530ff9d15/go.mod h1:NrZTRu5hrKwSxzPyA5G8BxaQakOLRvoFJM+5vtHDE04= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15 h1:NmmRkAKLBIOjlT1tEF2NbPvzCawOr1Lgm99k1+ElZKM= +github.com/iotaledger/hive.go/stringify v0.0.0-20230629181801-64c530ff9d15/go.mod h1:l/F3cA/+67QdNj+sohv2v4HhmsdOcWScoA+sVYoAE4c= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15 h1:T9Wg7bMu8NWoVDyVoPXFVvVF4OE4ZNybs3pSObffn3U= +github.com/iotaledger/hive.go/web v0.0.0-20230629181801-64c530ff9d15/go.mod h1:A3LLvpa7mREy3eWZf+UsD1A1ujo4YZHK+e2IHvou+HQ= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a h1:mVYBXnSSVl9xRxzZReRdRQN43gUz3IMOxb+IEMQFTp4= github.com/iotaledger/inx-app v1.0.0-rc.3.0.20230417131029-0bfe891d7c4a/go.mod h1:9AA+oDJv4WGM0YdDm7Lh24XK5O9Jd9SPw3ApMJSSv7k= github.com/iotaledger/inx/go v1.0.0-rc.2 h1:SjHGHQ1pEe7/B0bnVIHCa1zQBvcC0QRwcYPzUGarrJU= @@ -459,11 +425,6 @@ github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= @@ -481,26 +442,16 @@ github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93 h1:gb2I60XsNkyYmPd7PyeCkUMaFfoFuv3C4SlXlO1STHM= github.com/kape1395/kyber/v3 v3.0.14-0.20230124095845-ec682ff08c93/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1U= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= @@ -514,7 +465,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 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= @@ -527,7 +477,6 @@ github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8c github.com/labstack/echo-contrib v0.15.0 h1:9K+oRU265y4Mu9zpRDv3X+DGTqUALY6oRHCSZZKCRVU= github.com/labstack/echo-contrib v0.15.0/go.mod h1:lei+qt5CLB4oa7VHTE0yEfQSEB9XTJI1LUqko9UWvo4= github.com/labstack/echo/v4 v4.1.13/go.mod h1:3WZNypykZ3tnqpF2Qb4fPg27XDunFqgP3HGDmCMgv7U= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= @@ -557,7 +506,6 @@ github.com/libp2p/go-reuseport v0.3.0/go.mod h1:laea40AimhtfEqysZ71UpYj4S+R9VpH8 github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= github.com/libp2p/go-yamux/v4 v4.0.0/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -567,12 +515,10 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= 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.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -585,13 +531,10 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= 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/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= @@ -628,7 +571,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -638,8 +580,8 @@ github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= -github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= +github.com/multiformats/go-multiaddr v0.10.1 h1:HghtFrWyZEPrpTvgAMFJi6gFdgHfs2cb0pyfDsk+lqU= +github.com/multiformats/go-multiaddr v0.10.1/go.mod h1:jLEZsA61rwWNZQTHHnqq2HNa+4os/Hz54eqiRnsRqYQ= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= @@ -658,10 +600,6 @@ github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/n github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= @@ -674,7 +612,6 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/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.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -697,16 +634,14 @@ github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c h1:Gcce/r5tSQeprxs github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c/go.mod h1:1iCZ0433JJMecYqCa+TdWA9Pax8MGl4ByuNDZ7eSnQY= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= 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/petermattis/goid v0.0.0-20230518223814-80aa455d8761 h1:W04oB3d0J01W5jgYRGKsV8LCM6g9EkCvPkZcmFuy0OE= +github.com/petermattis/goid v0.0.0-20230518223814-80aa455d8761/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4= 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= @@ -762,11 +697,9 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +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/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -777,10 +710,9 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= 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/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/second-state/WasmEdge-go v0.12.0 h1:CJFH/rwZMXIX/UeX4CRUzbcTUlXJfFNZTm3wiZ0Ck+8= -github.com/second-state/WasmEdge-go v0.12.0/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= +github.com/second-state/WasmEdge-go v0.12.1 h1:rIRiRF35+8CtcYTsiW4KfFNIh3faRb3LoG2c7cCqQyI= +github.com/second-state/WasmEdge-go v0.12.1/go.mod h1:HyBf9hVj1sRAjklsjc1Yvs9b5RcmthPG9z99dY78TKg= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -811,29 +743,21 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= @@ -868,37 +792,24 @@ github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYm github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/wasmerio/wasmer-go v1.0.4 h1:MnqHoOGfiQ8MMq2RF6wyCeebKOe84G88h5yv+vmxJgs= github.com/wasmerio/wasmer-go v1.0.4/go.mod h1:0gzVdSfg6pysA6QVp6iVRPTagC6Wq9pOE8J86WKb2Fk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -943,14 +854,12 @@ go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1 golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/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-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -959,10 +868,9 @@ golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -973,8 +881,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +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/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1001,20 +909,18 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +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-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181220203305-927f97764cc3/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-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1023,7 +929,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1051,10 +956,9 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1087,7 +991,6 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1101,7 +1004,6 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1154,20 +1056,18 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/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-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1178,27 +1078,23 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1246,7 +1142,6 @@ golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= @@ -1287,7 +1182,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1332,10 +1226,8 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1383,15 +1275,11 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1406,7 +1294,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/tools/wasp-cli/waspcmd/cmd.go b/tools/wasp-cli/waspcmd/cmd.go index 3b4b4ce0c4..2c130e6b4d 100644 --- a/tools/wasp-cli/waspcmd/cmd.go +++ b/tools/wasp-cli/waspcmd/cmd.go @@ -38,7 +38,7 @@ func initAddWaspNodeCmd() *cobra.Command { nodeURL := args[1] if !util.IsSlug(nodeName) { - log.Fatalf("invalid node name: %s, must be in slug format, only lowercase and hypens, example: foo-bar", nodeName) + log.Fatalf("invalid node name: %s, must be in slug format, only lowercase and hyphens, example: foo-bar", nodeName) } _, err := apiextensions.ValidateAbsoluteURL(nodeURL)