From e846eca366612f0515ebf552fc9f693283e1caf3 Mon Sep 17 00:00:00 2001 From: testinginprod <98415576+testinginprod@users.noreply.github.com> Date: Wed, 21 Feb 2024 10:36:21 +0100 Subject: [PATCH] refactor(auth): refactor auth/tx to use x/tx (#19224) Co-authored-by: Facundo Co-authored-by: Matt Kocubinski Co-authored-by: Facundo Medica <14063057+facundomedica@users.noreply.github.com> --- baseapp/abci_test.go | 13 - baseapp/abci_utils_test.go | 36 +- baseapp/utils_test.go | 5 +- client/tx/tx_test.go | 6 +- simapp/gomod2nix.toml | 2089 ++++++++++++++++- tests/e2e/auth/suite.go | 1 + tests/e2e/tx/benchmarks_test.go | 2 +- tests/e2e/tx/service_test.go | 65 +- tests/go.mod | 2 +- .../integration/auth/client/cli/suite_test.go | 1 + tests/integration/bank/app_test.go | 34 +- tests/integration/slashing/slashing_test.go | 6 +- .../tx/aminojson/aminojson_test.go | 14 + tests/integration/tx/decode_test.go | 11 + testutil/sims/simulation_helpers.go | 6 +- types/mempool/mempool_test.go | 2 + types/registry/registry.go | 52 - x/auth/go.mod | 3 + x/auth/go.sum | 6 +- x/auth/tx/adapter.go | 130 - x/auth/tx/aux_test.go | 1 + x/auth/tx/builder.go | 670 ++---- x/auth/tx/builder_test.go | 335 --- x/auth/tx/config.go | 52 +- x/auth/tx/config/depinject.go | 4 +- x/auth/tx/config_test.go | 1 + x/auth/tx/decoder.go | 173 +- x/auth/tx/encode_decode_test.go | 281 --- x/auth/tx/encoder.go | 30 +- x/auth/tx/gogotx.go | 302 +++ x/auth/tx/gogotx_test.go | 1 + x/auth/tx/legacy_amino_json.go | 10 +- x/auth/tx/legacy_amino_json_test.go | 223 -- x/auth/tx/query.go | 20 +- x/auth/tx/service.go | 57 +- x/auth/tx/sigs.go | 17 +- x/auth/tx/testutil/suite.go | 6 +- x/genutil/gentx_test.go | 1 + x/slashing/go.mod | 3 + x/slashing/go.sum | 6 +- x/tx/decode/decode.go | 10 +- x/tx/go.mod | 4 + x/tx/go.sum | 6 +- x/tx/signing/textual/e2e_test.go | 4 + .../textual/internal/testdata/e2e.json | 6 +- .../signing/textual/internal/testdata/tx.json | 8 +- 46 files changed, 2914 insertions(+), 1801 deletions(-) delete mode 100644 types/registry/registry.go delete mode 100644 x/auth/tx/adapter.go delete mode 100644 x/auth/tx/builder_test.go delete mode 100644 x/auth/tx/encode_decode_test.go create mode 100644 x/auth/tx/gogotx.go create mode 100644 x/auth/tx/gogotx_test.go delete mode 100644 x/auth/tx/legacy_amino_json_test.go diff --git a/baseapp/abci_test.go b/baseapp/abci_test.go index 769349f84e20..a4f254260bea 100644 --- a/baseapp/abci_test.go +++ b/baseapp/abci_test.go @@ -930,19 +930,6 @@ func TestABCI_InvalidTransaction(t *testing.T) { require.EqualValues(t, sdkerrors.ErrUnknownRequest.Codespace(), space, err) require.EqualValues(t, sdkerrors.ErrUnknownRequest.ABCICode(), code, err) } - - // Transaction with an unregistered message - { - txBuilder := suite.txConfig.NewTxBuilder() - err = txBuilder.SetMsgs(&testdata.MsgCreateDog{}) - require.NoError(t, err) - tx := txBuilder.GetTx() - - _, _, err := suite.baseApp.SimDeliver(suite.txConfig.TxEncoder(), tx) - space, code, _ := errorsmod.ABCIInfo(err, false) - require.EqualValues(t, sdkerrors.ErrTxDecode.ABCICode(), code) - require.EqualValues(t, sdkerrors.ErrTxDecode.Codespace(), space) - } } func TestABCI_TxGasLimits(t *testing.T) { diff --git a/baseapp/abci_utils_test.go b/baseapp/abci_utils_test.go index 9d1cbac1aa85..d0845c51040d 100644 --- a/baseapp/abci_utils_test.go +++ b/baseapp/abci_utils_test.go @@ -469,15 +469,15 @@ func (s *ABCIUtilsTestSuite) TestDefaultProposalHandler_PriorityNonceMempoolTxSe testTxs[i].size = int(cmttypes.ComputeProtoSizeForTxs([]cmttypes.Tx{bz})) } - s.Require().Equal(testTxs[0].size, 111) - s.Require().Equal(testTxs[1].size, 121) - s.Require().Equal(testTxs[2].size, 112) - s.Require().Equal(testTxs[3].size, 112) - s.Require().Equal(testTxs[4].size, 195) - s.Require().Equal(testTxs[5].size, 205) - s.Require().Equal(testTxs[6].size, 196) - s.Require().Equal(testTxs[7].size, 196) - s.Require().Equal(testTxs[8].size, 196) + s.Require().Equal(180, testTxs[0].size) + s.Require().Equal(190, testTxs[1].size) + s.Require().Equal(181, testTxs[2].size) + s.Require().Equal(181, testTxs[3].size) + s.Require().Equal(263, testTxs[4].size) + s.Require().Equal(273, testTxs[5].size) + s.Require().Equal(264, testTxs[6].size) + s.Require().Equal(264, testTxs[7].size) + s.Require().Equal(264, testTxs[8].size) testCases := map[string]struct { ctx sdk.Context @@ -490,7 +490,7 @@ func (s *ABCIUtilsTestSuite) TestDefaultProposalHandler_PriorityNonceMempoolTxSe ctx: s.ctx, txInputs: []testTx{testTxs[0], testTxs[1], testTxs[2], testTxs[3]}, req: &abci.RequestPrepareProposal{ - MaxTxBytes: 111 + 112, + MaxTxBytes: 180 + 181, }, expectedTxs: []int{0, 3}, }, @@ -498,7 +498,7 @@ func (s *ABCIUtilsTestSuite) TestDefaultProposalHandler_PriorityNonceMempoolTxSe ctx: s.ctx, txInputs: []testTx{testTxs[4], testTxs[5], testTxs[6], testTxs[7], testTxs[8]}, req: &abci.RequestPrepareProposal{ - MaxTxBytes: 195 + 196, + MaxTxBytes: 263 + 264, }, expectedTxs: []int{4, 8}, }, @@ -507,7 +507,7 @@ func (s *ABCIUtilsTestSuite) TestDefaultProposalHandler_PriorityNonceMempoolTxSe ctx: s.ctx, txInputs: []testTx{testTxs[9], testTxs[10], testTxs[11]}, req: &abci.RequestPrepareProposal{ - MaxTxBytes: 195 + 196, + MaxTxBytes: 263 + 264, }, expectedTxs: []int{9}, }, @@ -571,9 +571,7 @@ func marshalDelimitedFn(msg proto.Message) ([]byte, error) { func buildMsg(t *testing.T, txConfig client.TxConfig, value []byte, secrets [][]byte, nonces []uint64) sdk.Tx { t.Helper() builder := txConfig.NewTxBuilder() - _ = builder.SetMsgs( - &baseapptestutil.MsgKeyValue{Value: value}, - ) + require.Equal(t, len(secrets), len(nonces)) signatures := make([]signingtypes.SignatureV2, 0) for index, secret := range secrets { @@ -586,6 +584,14 @@ func buildMsg(t *testing.T, txConfig client.TxConfig, value []byte, secrets [][] Data: &signingtypes.SingleSignatureData{}, }) } + + _ = builder.SetMsgs( + &baseapptestutil.MsgKeyValue{ + Signer: sdk.AccAddress(signatures[0].PubKey.Bytes()).String(), + Value: value, + }, + ) + setTxSignatureWithSecret(t, builder, signatures...) return builder.GetTx() } diff --git a/baseapp/utils_test.go b/baseapp/utils_test.go index 50cda679ef58..acf9d84b1047 100644 --- a/baseapp/utils_test.go +++ b/baseapp/utils_test.go @@ -352,6 +352,7 @@ func setFailOnHandler(t *testing.T, cfg client.TxConfig, tx signing.Tx, fail boo msgs[i] = &baseapptestutil.MsgCounter{ Counter: msg.(*baseapptestutil.MsgCounter).Counter, FailOnHandler: fail, + Signer: sdk.AccAddress("addr").String(), } } @@ -367,7 +368,9 @@ func wonkyMsg(t *testing.T, cfg client.TxConfig, tx signing.Tx) signing.Tx { builder.SetMemo(tx.GetMemo()) msgs := tx.GetMsgs() - msgs = append(msgs, &baseapptestutil.MsgCounter2{}) + msgs = append(msgs, &baseapptestutil.MsgCounter2{ + Signer: sdk.AccAddress("wonky").String(), + }) err := builder.SetMsgs(msgs...) require.NoError(t, err) diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 42553a4835f5..205f388fdbe3 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -417,14 +417,16 @@ func TestPreprocessHook(t *testing.T) { err = txfDirect.PreprocessTx(from, txb) requireT.NoError(err) - hasExtOptsTx, ok := txb.(ante.HasExtensionOptionsTx) + tx := txb.GetTx() + hasExtOptsTx, ok := tx.(ante.HasExtensionOptionsTx) requireT.True(ok) hasOneExt := len(hasExtOptsTx.GetExtensionOptions()) == 1 requireT.True(hasOneExt) opt := hasExtOptsTx.GetExtensionOptions()[0] - requireT.Equal(opt, extAny) + requireT.Equal(opt.TypeUrl, extAny.TypeUrl) + requireT.Equal(opt.Value, extAny.Value) } func testSigners(require *require.Assertions, tr signing.Tx, pks ...cryptotypes.PubKey) []signingtypes.SignatureV2 { diff --git a/simapp/gomod2nix.toml b/simapp/gomod2nix.toml index 8ac217a9d521..7e642f2e2dc0 100644 --- a/simapp/gomod2nix.toml +++ b/simapp/gomod2nix.toml @@ -1,6 +1,12 @@ schema = 3 [mod] + [mod."4d63.com/gocheckcompilerdirectives"] + version = "v1.2.1" + hash = "sha256-y/GMRxJ47nMNZHiVn/4AA2AmmVx73u+TO/c95GyLzlk=" + [mod."4d63.com/gochecknoglobals"] + version = "v0.2.1" + hash = "sha256-xg9HRunGRN3lGKbhbAbTpP1vUnXQ3MlaWT4jnxtC75Q=" [mod."buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go"] version = "v1.32.0-20230509103710-5e5b9fdd0180.1" hash = "sha256-+BS0SWZDFyUHohKwCt2pN3ybSR8NZ8DcfqZxhcJn4ho=" @@ -10,18 +16,384 @@ schema = 3 [mod."cloud.google.com/go"] version = "v0.112.0" hash = "sha256-lmNLoqmLURfxu+a6V/SeoP8xVn0Wi2SD7uxxAtSjm+o=" + [mod."cloud.google.com/go/accessapproval"] + version = "v1.7.5" + hash = "sha256-l6qkntMUopS9T0BoNfNFXI51tH0AsGBoOD2a/3FZez8=" + [mod."cloud.google.com/go/accesscontextmanager"] + version = "v1.8.5" + hash = "sha256-NoIhrzG63tSLzICLY2twmETzRWERJ4U6NINHYZfwuAA=" + [mod."cloud.google.com/go/aiplatform"] + version = "v1.58.2" + hash = "sha256-FoUvuNrSkGq8bsTbDj5bRvI+NVKkkl3jyZ32GFNIvGA=" + [mod."cloud.google.com/go/analytics"] + version = "v0.23.0" + hash = "sha256-uwKr6mZKGegTub2JWbVSFA3fYwePTXXPOMYPAKEj8IE=" + [mod."cloud.google.com/go/apigateway"] + version = "v1.6.5" + hash = "sha256-PKlUxME6vmfBF4pb+Inf19s2r7dSITgofotKq/52oeE=" + [mod."cloud.google.com/go/apigeeconnect"] + version = "v1.6.5" + hash = "sha256-V3qLeW/JlTZDwo4Jfhn57QRjcL9DwKDIzTdC2VarxVw=" + [mod."cloud.google.com/go/apigeeregistry"] + version = "v0.8.3" + hash = "sha256-YJY8MDaFbbWnDJZWT22bOl4qFi/XAjkFDlYGih4sIS8=" + [mod."cloud.google.com/go/apikeys"] + version = "v0.5.0" + hash = "sha256-P8kGD73sd8+z+vjsowa49oN1shpbgvPGJzZfY7npzUk=" + [mod."cloud.google.com/go/appengine"] + version = "v1.8.5" + hash = "sha256-KUXg4wYerbor+D9uxU1E8b/l9yCkSmHxYIXOqlQR7i4=" + [mod."cloud.google.com/go/area120"] + version = "v0.8.5" + hash = "sha256-ruL3o3JmT0YVMzGVArG3hNoMwkXhuhG8NJnRQSLAH5A=" + [mod."cloud.google.com/go/artifactregistry"] + version = "v1.14.7" + hash = "sha256-2fI4MGCJns9pbcyKjXGFmSjZjSuGRzigisE/fcNBxeI=" + [mod."cloud.google.com/go/asset"] + version = "v1.17.1" + hash = "sha256-CTmeYwP+AcCcD0S9rj03mg3baeCcbX6xuwI3Df5bt8k=" + [mod."cloud.google.com/go/assuredworkloads"] + version = "v1.11.5" + hash = "sha256-skpoDDVAYDgPFctG0bgw2wJ1rjwsVAHvnQ2NgJvI3Tc=" + [mod."cloud.google.com/go/automl"] + version = "v1.13.5" + hash = "sha256-DV4c+0G7dsipU+jEodahvh58Yw2HOPch8QuVL9/d1yI=" + [mod."cloud.google.com/go/baremetalsolution"] + version = "v1.2.4" + hash = "sha256-c43LB2LSBbP8N8tGjzqWgdZDRQT02IcxAWfP6YIBNVw=" + [mod."cloud.google.com/go/batch"] + version = "v1.8.0" + hash = "sha256-ki2OukDJ79U0yzmxpTFIWp/+74eQvIK9FLG/0TneQgo=" + [mod."cloud.google.com/go/beyondcorp"] + version = "v1.0.4" + hash = "sha256-spd3pOl+mG/iPNg5llPx8pzBmsIyR8rr+6hapR9WuBA=" + [mod."cloud.google.com/go/bigquery"] + version = "v1.58.0" + hash = "sha256-0kAHp35pRWp24Dvj4iwofzXT01Qwr6OvqXjd73G0jwg=" + [mod."cloud.google.com/go/billing"] + version = "v1.18.2" + hash = "sha256-TR8qADbDXtvNoVE+AM9YzhdPQABzXbBDXX7xZyAeuWU=" + [mod."cloud.google.com/go/binaryauthorization"] + version = "v1.8.1" + hash = "sha256-/QI+mNnWfJBTXINpYrGemKhLk8eOmXGs8/QhPKziIPE=" + [mod."cloud.google.com/go/certificatemanager"] + version = "v1.7.5" + hash = "sha256-QetgusC4SZFsdXG1iLk69b5mbQ5/zOXwfhGcW5hKjuU=" + [mod."cloud.google.com/go/channel"] + version = "v1.17.5" + hash = "sha256-SRy2a0rw+OBuBuHini8aBxCgQYm7/boK/h9zjNd4eFc=" + [mod."cloud.google.com/go/cloudbuild"] + version = "v1.15.1" + hash = "sha256-zapdFmf3jO2PWgwMfxNrlssI/cr1yZlyBhG65TeP7HU=" + [mod."cloud.google.com/go/clouddms"] + version = "v1.7.4" + hash = "sha256-1Q4pSSOL/A/67E7xk/JnYQ2V/qVeqj9ujmpvj+uhYF0=" + [mod."cloud.google.com/go/cloudtasks"] + version = "v1.12.6" + hash = "sha256-46TBrJDf5LH1i840rHuo5FyXlLyaXviTmrm4T+YpB08=" [mod."cloud.google.com/go/compute"] version = "v1.23.4" hash = "sha256-zyAlGqHLAu/RCSBDEZk2ex/nVLhKnpYycwyaByizGhM=" [mod."cloud.google.com/go/compute/metadata"] version = "v0.2.3" hash = "sha256-kYB1FTQRdTDqCqJzSU/jJYbVUGyxbkASUKbEs36FUyU=" + [mod."cloud.google.com/go/contactcenterinsights"] + version = "v1.13.0" + hash = "sha256-a1kIba/25ayOy+IVKtmCyxDZsfKbPF49NGVEbahqyKo=" + [mod."cloud.google.com/go/container"] + version = "v1.30.1" + hash = "sha256-Z6odee/O+H/s3nBzIDXiwqimXv3CPeJTHMveP72xrJ4=" + [mod."cloud.google.com/go/containeranalysis"] + version = "v0.11.4" + hash = "sha256-gx/Jl67yUw9q2PQdV6TCRdPk+acO5PPNNQOaop+v/zA=" + [mod."cloud.google.com/go/datacatalog"] + version = "v1.19.3" + hash = "sha256-nww6kYUUQkBJxl7SGTrCFj6m/wlXgDRcfY8qajm2Gl4=" + [mod."cloud.google.com/go/dataflow"] + version = "v0.9.5" + hash = "sha256-dakkIWjL8cVqk7UPSW9kroNxCNqRMnnQ9H2paBn0RSU=" + [mod."cloud.google.com/go/dataform"] + version = "v0.9.2" + hash = "sha256-NsWoCeEMGHaLn/1FfQeQ2LiL6zRTl/n7vomC5o3aMIY=" + [mod."cloud.google.com/go/datafusion"] + version = "v1.7.5" + hash = "sha256-Zc7fpzt9pdsUh9tEs2v1j+QcD8/Aa44q6EJxO/Lls0o=" + [mod."cloud.google.com/go/datalabeling"] + version = "v0.8.5" + hash = "sha256-MiKOLDEO7v9q1ilYSk7I1ChgwwkjKR69rL4GK1aKnV8=" + [mod."cloud.google.com/go/dataplex"] + version = "v1.14.1" + hash = "sha256-OZD8+6HBI10RVpTvuYTXTBGFnovf8Lz6StFki8jlThI=" + [mod."cloud.google.com/go/dataproc"] + version = "v1.12.0" + hash = "sha256-bz26oQUkIZSpxAY8K7q2NwR8FNgbBw7lyU5HhQ44YHM=" + [mod."cloud.google.com/go/dataproc/v2"] + version = "v2.4.0" + hash = "sha256-uXuRecFc/hUjMqO5sZOJ42yt6d5Z0Q/vO1EM5961Zy0=" + [mod."cloud.google.com/go/dataqna"] + version = "v0.8.5" + hash = "sha256-XjlGJI2C2qIK+Yjy0yaxOLanTFusHIDBwr/DaEbTj74=" + [mod."cloud.google.com/go/datastore"] + version = "v1.15.0" + hash = "sha256-YHGPHb2Ofd54sYlMBhDyptwz/24Kq2DAJ8eyTdZPwvA=" + [mod."cloud.google.com/go/datastream"] + version = "v1.10.4" + hash = "sha256-QBXSo+keSSzrhTweZP6z/iaM2JyPfZOkaa0ryNhOGcU=" + [mod."cloud.google.com/go/deploy"] + version = "v1.17.1" + hash = "sha256-f9V/Ycd4yCY4CfvccmZ0DdVWhJztjAQ89XAX7Jb9ZZ4=" + [mod."cloud.google.com/go/dialogflow"] + version = "v1.48.2" + hash = "sha256-omXpdBQLNbgt6ADleMaAZdM9g+Z0qLZfDf4avIEZzpk=" + [mod."cloud.google.com/go/dlp"] + version = "v1.11.2" + hash = "sha256-66yAoABUziQaDnU9q0qC/yiai+KibctKgX+0g81/gvI=" + [mod."cloud.google.com/go/documentai"] + version = "v1.23.8" + hash = "sha256-MuAr2Mi28ahBkBN67+c1TPIMZOS1vQHr08ST07/dCsM=" + [mod."cloud.google.com/go/domains"] + version = "v0.9.5" + hash = "sha256-b3kfnj+dhPWim9Dvo8J81EHvTOR/7Qj9a4JVfR/iwVc=" + [mod."cloud.google.com/go/edgecontainer"] + version = "v1.1.5" + hash = "sha256-jZWR7j7EFULHi1VaTwuPTpRPnHx0T78MHUMP9j0Nx+s=" + [mod."cloud.google.com/go/errorreporting"] + version = "v0.3.0" + hash = "sha256-izkDfq82fTUj8bt/+c/CCZdtWz14Av+Wy0HucORHgzU=" + [mod."cloud.google.com/go/essentialcontacts"] + version = "v1.6.6" + hash = "sha256-FvBAxBxlmIC8X7m7TNWMdwn7Lh9mC7zrz/ChYRhskC4=" + [mod."cloud.google.com/go/eventarc"] + version = "v1.13.4" + hash = "sha256-yiGNimZUAOj/wX4gcg5zEmwXuj79ODW4ue9509ATtjc=" + [mod."cloud.google.com/go/filestore"] + version = "v1.8.1" + hash = "sha256-HuTU3qZsZB1qEXNut1msYCF2w5RSEpQNvHlceojQg8k=" + [mod."cloud.google.com/go/firestore"] + version = "v1.14.0" + hash = "sha256-LVB0JVoh1c3vETjZ09IzLhBBbWslMr5TXY4zdwZ5daM=" + [mod."cloud.google.com/go/functions"] + version = "v1.16.0" + hash = "sha256-ulagHnm86kDszH9sKdHwqLdYPO+F3UIwM1swaQ5wUuI=" + [mod."cloud.google.com/go/gaming"] + version = "v1.9.0" + hash = "sha256-dSb8f75gSmUxBx7acF2BGs+hyOugcmynyLPjbkO4ZD8=" + [mod."cloud.google.com/go/gkebackup"] + version = "v1.3.5" + hash = "sha256-WR+f8G7T7Z9ny27HGRBfVhBVuhqVVVoZonsKVRrVJkE=" + [mod."cloud.google.com/go/gkeconnect"] + version = "v0.8.5" + hash = "sha256-0jOPm5p2Qx5biPCtrSI3Tl+5FJ3WxlNJq8rmvS+a9CQ=" + [mod."cloud.google.com/go/gkehub"] + version = "v0.14.5" + hash = "sha256-YTe609OOfnz0G4xcN4GkPZaY2653XvD9rwTckKPgmD4=" + [mod."cloud.google.com/go/gkemulticloud"] + version = "v1.1.1" + hash = "sha256-k4MzZApsYjyDA/Z32gRT7fJFREjS62XcGvYDzc5WO0k=" + [mod."cloud.google.com/go/grafeas"] + version = "v0.3.4" + hash = "sha256-3GKGzi9YCxbPkgMNzh3J339fr9EhcKEIzgEuOoXqTlQ=" + [mod."cloud.google.com/go/gsuiteaddons"] + version = "v1.6.5" + hash = "sha256-OeIkFjmTjeuPIHrz6XnmOYdMywvU2RkaCD648Zo4HUY=" [mod."cloud.google.com/go/iam"] version = "v1.1.6" hash = "sha256-u91oZdyy/wgk3J8Z+4mWmn+YliSBIATu6kpyH20Dd8k=" + [mod."cloud.google.com/go/iap"] + version = "v1.9.4" + hash = "sha256-ahAOR8X3pT4CQH4NOpu79xDMZuJQM7o/MwIvuxs/Tts=" + [mod."cloud.google.com/go/ids"] + version = "v1.4.5" + hash = "sha256-X9By50ek9SnHO+D70H6isACkcOfS4F3smhJtA0uQbG4=" + [mod."cloud.google.com/go/iot"] + version = "v1.7.5" + hash = "sha256-Rscs8a7dJR0vWy31ucOQWCZVrI0VJbFMAvxAFXL7JSs=" + [mod."cloud.google.com/go/kms"] + version = "v1.15.6" + hash = "sha256-62LtbiIbPdSEfBlZFpNo0AiNpNO2AN4jJtRyWF8aedU=" + [mod."cloud.google.com/go/language"] + version = "v1.12.3" + hash = "sha256-UWUhLwQ7Rx7T1YalXMXQBkP3oq2h8ICu7ekqV3pp5YM=" + [mod."cloud.google.com/go/lifesciences"] + version = "v0.9.5" + hash = "sha256-Zaq+/vD7Mg5DXdeAwp2O7Sci1HDA83aZApDDIK6Mnv0=" + [mod."cloud.google.com/go/logging"] + version = "v1.9.0" + hash = "sha256-WtHr835RGbov/qchd30Av1Kd2LAvnudcrvebEBBWFgw=" + [mod."cloud.google.com/go/longrunning"] + version = "v0.5.5" + hash = "sha256-eL0U/Rs78tFLyWFBkcNzoUAJCX3YP3QYDvdzYb/V21g=" + [mod."cloud.google.com/go/managedidentities"] + version = "v1.6.5" + hash = "sha256-BAb5/KF27V9IlpAzcbYmpAID+6s6EyzbOKwtWGfv474=" + [mod."cloud.google.com/go/maps"] + version = "v1.6.4" + hash = "sha256-r4LFAHfyf46E9nEt0UZlqaz3qZ3+WgDjwn3zx2p60HE=" + [mod."cloud.google.com/go/mediatranslation"] + version = "v0.8.5" + hash = "sha256-pK8NVyqUzOQo455EC+PKP26wQHWCsA52D1HAI2IWy6k=" + [mod."cloud.google.com/go/memcache"] + version = "v1.10.5" + hash = "sha256-4uvFHZqFxQc2Et7sbbK1cmds+ZJjcU1KQVGjb07ieE4=" + [mod."cloud.google.com/go/metastore"] + version = "v1.13.4" + hash = "sha256-4XNxiTna62JjVDULYwFrUVAP2d/wWD1GeWEfrqdewCY=" + [mod."cloud.google.com/go/monitoring"] + version = "v1.17.1" + hash = "sha256-KVXV/VTslds/AGadNasSDyFe1ZRFA1cKd7WKsARwGyk=" + [mod."cloud.google.com/go/networkconnectivity"] + version = "v1.14.4" + hash = "sha256-ewOmXlohjniaXeA1Udnm/qcvO45lNNrY0+PEoRHYKwI=" + [mod."cloud.google.com/go/networkmanagement"] + version = "v1.9.4" + hash = "sha256-Uf73E7kx4K9tYhezwp+MRifZomXcDl6yhgPaVKlUk/I=" + [mod."cloud.google.com/go/networksecurity"] + version = "v0.9.5" + hash = "sha256-Ig+vTD6lMhIozzcv2Zs7xPxQQiNRyXN0oGtqVVQZ0QQ=" + [mod."cloud.google.com/go/notebooks"] + version = "v1.11.3" + hash = "sha256-DiOIYRP8tf+vGAnYLWahaPrQIKUyuGlbugVKHl17+iI=" + [mod."cloud.google.com/go/optimization"] + version = "v1.6.3" + hash = "sha256-o7ivJnzQlmdjmP28uGlrhat4iYaAuNeXzlnivUq/RMk=" + [mod."cloud.google.com/go/orchestration"] + version = "v1.8.5" + hash = "sha256-sssyqHPsc5Vn4/qLwaoYL531ZfR9pjb0eRbw1EVBQgs=" + [mod."cloud.google.com/go/orgpolicy"] + version = "v1.12.1" + hash = "sha256-l0BQiUm1KZGpvSp6ZRGIQZWyE5WuNm6+MxpwgqJcaj0=" + [mod."cloud.google.com/go/osconfig"] + version = "v1.12.5" + hash = "sha256-xeSQBZWZqF7YJFT2J3QDNEMc70wyh+q1y+fPWhsA1Dk=" + [mod."cloud.google.com/go/oslogin"] + version = "v1.13.1" + hash = "sha256-RVntBL3lv9Vt/FJ84qCm0vscGW9eT6tPYkZf0CzRoSk=" + [mod."cloud.google.com/go/phishingprotection"] + version = "v0.8.5" + hash = "sha256-rwnVpErjbx4pCMr/8JnIu71g80p0rwddbalkX2eUJc8=" + [mod."cloud.google.com/go/policytroubleshooter"] + version = "v1.10.3" + hash = "sha256-hbA+VP8RatLaw4C8NSx5git/RmpNqsW5CzWFlKEOvF4=" + [mod."cloud.google.com/go/privatecatalog"] + version = "v0.9.5" + hash = "sha256-ecvZvHnCvSd6BqaHrxu/2QJiHsHzQ1QYxW+fKdyvE1Q=" + [mod."cloud.google.com/go/pubsub"] + version = "v1.36.1" + hash = "sha256-HbVOFOWsmfXiCA7eD9P4JOytJvbIM7ZYtRin1jtdCLs=" + [mod."cloud.google.com/go/pubsublite"] + version = "v1.8.1" + hash = "sha256-5z1QQLGjlKyQjIUjFzhDHquy6EFngUNL2RzXx+Z0RJw=" + [mod."cloud.google.com/go/recaptchaenterprise"] + version = "v1.3.1" + hash = "sha256-BqLAck56BUbzlJab91P1tr4RcJEhggjkXqAyl6yt2hE=" + [mod."cloud.google.com/go/recaptchaenterprise/v2"] + version = "v2.9.2" + hash = "sha256-5RdDIVFpQMi3MP9VBMhNbEy7My8FXS4FIyIvnShw3Vk=" + [mod."cloud.google.com/go/recommendationengine"] + version = "v0.8.5" + hash = "sha256-XUswlSYe7TXzwKxjRslAQKo28pwDtcsQxvrKzyakM5Q=" + [mod."cloud.google.com/go/recommender"] + version = "v1.12.1" + hash = "sha256-96L0aTrY5s4crWalPmsA4Zm86s5/wr+wLDYAGUFGhUE=" + [mod."cloud.google.com/go/redis"] + version = "v1.14.2" + hash = "sha256-69RNE7CcfZb+bG1c344B5dOlkraxSukXjJgSfu518Rs=" + [mod."cloud.google.com/go/resourcemanager"] + version = "v1.9.5" + hash = "sha256-lbLpnDvbEzAhaFtbo+OA/hZKc/7U1pmk3J1MSUhH/m0=" + [mod."cloud.google.com/go/resourcesettings"] + version = "v1.6.5" + hash = "sha256-QZq2BhwVbcPRAKNUN5DcoCTwACD+letMt7dgV7+4jVw=" + [mod."cloud.google.com/go/retail"] + version = "v1.15.1" + hash = "sha256-02TIEx8rH9nKhchQAa7rt44Iiu1+0oiZBVR4ZOjMsd0=" + [mod."cloud.google.com/go/run"] + version = "v1.3.4" + hash = "sha256-IBv61uWJvPGbppDiLW5+K6WBYDM1Zgn8KIh03cWdTx4=" + [mod."cloud.google.com/go/scheduler"] + version = "v1.10.6" + hash = "sha256-6m1HxgOUrRowsyItNjA2U2izfOMrPvyRMskLpZ5Jzco=" + [mod."cloud.google.com/go/secretmanager"] + version = "v1.11.5" + hash = "sha256-31v8CiOfeu+UX7AWhsZr7OsvTc7Ft/pTmsN/T+Ag16Q=" + [mod."cloud.google.com/go/security"] + version = "v1.15.5" + hash = "sha256-6nWpUJqvQsZ20OMtvPoELLU5eVsRAHdE7BTr62+erHo=" + [mod."cloud.google.com/go/securitycenter"] + version = "v1.24.4" + hash = "sha256-JKrJbHCLfbaMCPWTibSS7A8U6SUdaPtOO7wqXKx1EIg=" + [mod."cloud.google.com/go/servicecontrol"] + version = "v1.10.0" + hash = "sha256-5PeYzsCDxoA2bt+33LaiG0y2nrGJcNuqRZ91en7os1A=" + [mod."cloud.google.com/go/servicedirectory"] + version = "v1.11.4" + hash = "sha256-qaM8vOPIm6t3EGTvZy7VUalPjOJhm6OPhvrvs8eY8Uk=" + [mod."cloud.google.com/go/servicemanagement"] + version = "v1.6.0" + hash = "sha256-Qqdyym2+xjDSE17+WO3tCyoO1u0Z5zW1AnDUv1uTPrU=" + [mod."cloud.google.com/go/serviceusage"] + version = "v1.5.0" + hash = "sha256-kih/A/KsaQJkIised1oxIigjVnueSqLypX69LPIrwV8=" + [mod."cloud.google.com/go/shell"] + version = "v1.7.5" + hash = "sha256-LTB5ZxQWNsSK4dHRMhGaLaiemP6dkpOSU9wFD7yhrCY=" + [mod."cloud.google.com/go/spanner"] + version = "v1.56.0" + hash = "sha256-tmducAB2D8DQsP2pkjnokzhradB6/KwMHubykz3Cw7g=" + [mod."cloud.google.com/go/speech"] + version = "v1.21.1" + hash = "sha256-wh8x2KWXkI410IWdbxIWEJsosAekqfLX2rlOPdk3fPo=" [mod."cloud.google.com/go/storage"] version = "v1.36.0" hash = "sha256-dRKH1NEyAfEpVo5Mma677L7z0JO9Mfd1bv1lr1uFngI=" + [mod."cloud.google.com/go/storagetransfer"] + version = "v1.10.4" + hash = "sha256-oKBP5cNv2KnkE8zRa1nv/ZT7H0UrLLs3MZ038HiqGoE=" + [mod."cloud.google.com/go/talent"] + version = "v1.6.6" + hash = "sha256-Z8REZUvMq40mIIZ9LGJeD0fQpx4YZ/k2iEYF33hk6ms=" + [mod."cloud.google.com/go/texttospeech"] + version = "v1.7.5" + hash = "sha256-F51PddEyY3Vf7bRhvGjEvOnysXKHv+6yVkemTezu0Mw=" + [mod."cloud.google.com/go/tpu"] + version = "v1.6.5" + hash = "sha256-AuUSSh9KMu+dSDaQuuc4wqy+GD51oOLVv0j4rRivVIM=" + [mod."cloud.google.com/go/trace"] + version = "v1.10.5" + hash = "sha256-opwY8mcpJZcwzrnpKfBT0wkSzNnqsnWD7KSZgPQFzzg=" + [mod."cloud.google.com/go/translate"] + version = "v1.10.1" + hash = "sha256-BrVUwaG0GDfXAPZl7g7m3DdQJUbz4KSjz6nBYkZZFIY=" + [mod."cloud.google.com/go/video"] + version = "v1.20.4" + hash = "sha256-9MyO44uKDb3yvCMluvz4rmNKosKHhUPXdOA+Um8js3E=" + [mod."cloud.google.com/go/videointelligence"] + version = "v1.11.5" + hash = "sha256-i4JzHLIk5Lt5+8yvFuguTg/dbRb5jSZZHIAH5+W6YQM=" + [mod."cloud.google.com/go/vision"] + version = "v1.2.0" + hash = "sha256-xR55vdJeaqonhs4e0dV/vS5RcWU4VWzL2HsIG58hCyM=" + [mod."cloud.google.com/go/vision/v2"] + version = "v2.7.6" + hash = "sha256-PNdCVzBe625X72x6Y0X6vm4//tOucZesHxIeJICmfag=" + [mod."cloud.google.com/go/vmmigration"] + version = "v1.7.5" + hash = "sha256-5UxwI4DVfUq/amU+MerFWvWsXaExGtyA8StV31XPOxs=" + [mod."cloud.google.com/go/vmwareengine"] + version = "v1.1.1" + hash = "sha256-me12QyZYoHAu56ATu0+EK5s6Cr53+VJdY1IC2T5k7vk=" + [mod."cloud.google.com/go/vpcaccess"] + version = "v1.7.5" + hash = "sha256-lvy+A+v6BK3/TTJX3RFNulQKvcRmFM0OcNVfdAJ7Y6Q=" + [mod."cloud.google.com/go/webrisk"] + version = "v1.9.5" + hash = "sha256-eNEADr3lT1oubm9Y69mYKXICETl1IhLZMUuRCmcDwMA=" + [mod."cloud.google.com/go/websecurityscanner"] + version = "v1.6.5" + hash = "sha256-3qkJllxiZPOev0Hw98CmteMLMEpXR0w97nb5kdosouA=" + [mod."cloud.google.com/go/workflows"] + version = "v1.12.4" + hash = "sha256-DDFPTDYV7lD14QDqICe1AjneBp1oIz00L8FZUF88QWY=" [mod."cosmossdk.io/collections"] version = "v0.4.0" hash = "sha256-minFyzgO/D+Oda4E3B1qvOAN5qd65SjS6nmjca4cp/8=" @@ -37,9 +409,21 @@ schema = 3 [mod."cosmossdk.io/store"] version = "v1.0.2" hash = "sha256-mEaBNfU892M3V6qTMEDXb1GLaywlyouTRC5XfVqNSMs=" + [mod."dario.cat/mergo"] + version = "v1.0.0" + hash = "sha256-jlpc8dDj+DmiOU4gEawBu8poJJj9My0s9Mvuk9oS8ww=" + [mod."dmitri.shuralyov.com/gpu/mtl"] + version = "v0.0.0-20190408044501-666a987793e9" + hash = "sha256-H+xcbVdCNDahWZPgwk4k+XxnM73g0hwaFY7x+OAATcc=" [mod."filippo.io/edwards25519"] version = "v1.1.0" hash = "sha256-9ACANrgWZSd5HYPfDZHY8DVbPSC9LOMgy8deq3rDOoc=" + [mod."gioui.org"] + version = "v0.0.0-20210308172011-57750fc8a0a6" + hash = "sha256-oETHvx6UoU1kozoRHUjWYtxmakKPtiB2M15bUKllprU=" + [mod."git.sr.ht/~sbinet/gg"] + version = "v0.3.1" + hash = "sha256-LWCy7oT3OoqkrU9o4NZzx18KChh6m7ujCv9cnx2QhrI=" [mod."github.com/99designs/go-keychain"] version = "v0.0.0-20191008050251-8e49817e8af4" hash = "sha256-4EndKcspGC3GOPCmctXF1NnWzxWwMyY/OQpFMmr8Sc0=" @@ -47,21 +431,195 @@ schema = 3 version = "v1.2.0" hash = "sha256-emQlH+RQpESoFCzpHS38fEhs1SLjotxNPlRK4B5Aybs=" replaced = "github.com/cosmos/keyring" + [mod."github.com/Abirdcfly/dupword"] + version = "v0.0.11" + hash = "sha256-pmgB5cbKgg3X04ph13mOn4DykSROKwJSx0hRPB2lJBY=" + [mod."github.com/AndreasBriese/bbloom"] + version = "v0.0.0-20190306092124-e2d15f34fcf9" + hash = "sha256-ul3qjRXe6Bc7mI+fPmfufN1Rab8AaSNXMv6pfKvOcxY=" + [mod."github.com/Antonboom/errname"] + version = "v0.1.9" + hash = "sha256-9nabf+xbsxGzGGHbQODA6i6xzGzsjfF0aEOad+C39IU=" + [mod."github.com/Antonboom/nilnil"] + version = "v0.1.3" + hash = "sha256-liFo7csP2tOIgcx7iyHbB1Yi8bgohoxNe8M6SK9y5LQ=" + [mod."github.com/Azure/go-ansiterm"] + version = "v0.0.0-20230124172434-306776ec8161" + hash = "sha256-17hCoOE3HBv6cjpcukfBS6/ULgTuoUZ7RNbi5korH2M=" + [mod."github.com/BurntSushi/toml"] + version = "v1.2.1" + hash = "sha256-Z1dlsUTjF8SJZCknYKt7ufJz8NPGg9P9+W17DQn+LO0=" + [mod."github.com/BurntSushi/xgb"] + version = "v0.0.0-20160522181843-27f122750802" + hash = "sha256-ck+gNOSXNYy/ji6mpSX3OTHgCDm2nww+3ZKu4lAXl6I=" + [mod."github.com/CloudyKit/fastprinter"] + version = "v0.0.0-20200109182630-33d98a066a53" + hash = "sha256-KUuNS6OlaDUfpKIvZWJr8fiUR8ki/hUwMZiunNj0cxo=" + [mod."github.com/CloudyKit/jet"] + version = "v2.1.3-0.20180809161101-62edd43e4f88+incompatible" + hash = "sha256-8miTZrst+5xd5ZwCIWSebArAsGZ8aWaYECtkVBnwR9A=" + [mod."github.com/CloudyKit/jet/v6"] + version = "v6.2.0" + hash = "sha256-22PSPgN9ajVbm0gbhnrPWgroacipQaL7AMLsECzzd7A=" [mod."github.com/DataDog/datadog-go"] version = "v4.8.3+incompatible" hash = "sha256-9KvlVQdgyJ1ulDa6wkLb0ACdjc+R0U91hdb7nxodrA0=" [mod."github.com/DataDog/zstd"] version = "v1.5.5" hash = "sha256-tSw0aq0pPyroZtQYYb9lWOtPVNaQOt8skYQ4TMXGvAQ=" + [mod."github.com/Djarvur/go-err113"] + version = "v0.0.0-20210108212216-aea10b59be24" + hash = "sha256-CjpyMf/lB+cvUCNX181R8jQLzW6f0SrCafQpsz1Ummk=" + [mod."github.com/GaijinEntertainment/go-exhaustruct/v2"] + version = "v2.3.0" + hash = "sha256-+EIXVd0hKs0PmEQXMtGzhXwDu1xKPWhDK3GmPJPJYV0=" + [mod."github.com/GoogleCloudPlatform/cloudsql-proxy"] + version = "v0.0.0-20190129172621-c8b1d7a94ddf" + hash = "sha256-PbPgDsa4gb1+L7umxadBxTvSlMIV3QOH6hWcwZoCTLM=" + [mod."github.com/HdrHistogram/hdrhistogram-go"] + version = "v1.1.2" + hash = "sha256-GZWNKwUmZLQ+krFvyFwBlGp/cLw/ihYuMuhKutuQIlA=" + [mod."github.com/Joker/hpp"] + version = "v1.0.0" + hash = "sha256-Ar8wC5myjeKCZZnNSyNrKKtXGc/kKAwQR0Q2XKec2PY=" + [mod."github.com/Joker/jade"] + version = "v1.1.3" + hash = "sha256-264xyHGlF/hqJGY28YAFFh4VcsoJ0W/5HrgcJAdLKZs=" + [mod."github.com/Knetic/govaluate"] + version = "v3.0.1-0.20171022003610-9aa49832a739+incompatible" + hash = "sha256-Qs7qeK+Mrlm4ToAEYvN+OY6X7SRFV808frvKNr6gNhE=" + [mod."github.com/Masterminds/semver"] + version = "v1.5.0" + hash = "sha256-3fEInOXFdzCiGdDZ1s9otEes7VXiL8Q1RVB3zXRPJsQ=" + [mod."github.com/Masterminds/semver/v3"] + version = "v3.2.0" + hash = "sha256-JaGYNQwDxFCsLwzYVoJY4RUpP4dtiRlV14t2dVAg4oQ=" [mod."github.com/Microsoft/go-winio"] version = "v0.6.1" hash = "sha256-BL0BVaHtmPKQts/711W59AbHXjGKqFS4ZTal0RYnR9I=" + [mod."github.com/Nvveen/Gotty"] + version = "v0.0.0-20120604004816-cd527374f1e5" + hash = "sha256-2EwwPSTvPqMcKRKxCXX1OhknkkO/8fGGtmaAa27Im/o=" + [mod."github.com/OneOfOne/xxhash"] + version = "v1.2.2" + hash = "sha256-JvJnJFr9NFh5u+b7BgNEIwZR6scXW8l8RkT1DXmGTtY=" + [mod."github.com/OpenPeeDeeP/depguard"] + version = "v1.1.1" + hash = "sha256-MIKOpGigjNK+03Ajdljlunc8Z5bEVPTPrtfe4rrbASw=" + [mod."github.com/ProtonMail/go-crypto"] + version = "v0.0.0-20230828082145-3c4c8a2d2371" + hash = "sha256-YxAaQgQoTOhD8hE+aT+T8ytKKxcQW6tgoL2MAU7nTvo=" + [mod."github.com/Shopify/goreferrer"] + version = "v0.0.0-20220729165902-8cddb4f5de06" + hash = "sha256-zyP8NdtP79I7DOH7bUw54pY5ge1yWkSIbh4jnp8gel4=" + [mod."github.com/Shopify/sarama"] + version = "v1.19.0" + hash = "sha256-kU5TtVhy9HctSKm6Lu4xRE4/xSnQLXnsQjeFGWGOm3c=" + [mod."github.com/Shopify/toxiproxy"] + version = "v2.1.4+incompatible" + hash = "sha256-RYVa3BtYTYvATCTADda1piGbQFnxJrEFKpMSLjw+ExI=" + [mod."github.com/VividCortex/gohistogram"] + version = "v1.0.0" + hash = "sha256-zubR+TIR7DgyESAOLM/DC0DqR1K7zXM+YL+OmGfed/o=" + [mod."github.com/aclements/go-gg"] + version = "v0.0.0-20170118225347-6dbb4e4fefb0" + hash = "sha256-tdpyd+XqvN3JPo8bZD+jIeLPI4O88N20VKX1c+6pqKQ=" + [mod."github.com/aclements/go-moremath"] + version = "v0.0.0-20210112150236-f10218a38794" + hash = "sha256-h4jxtNP0s+DmVw9bBlWT/5SFlWm6EHaxVYaweCThO1w=" + [mod."github.com/adlio/schema"] + version = "v1.3.3" + hash = "sha256-wzsSA1DHW8WtGckbVAIk3+dkmtjRNAUqsGCyknxKEdQ=" + [mod."github.com/afex/hystrix-go"] + version = "v0.0.0-20180502004556-fa1af6a1f4f5" + hash = "sha256-Vmss3HtnycQWVwde+Gi/L76wN2lEx803dSYgCcYAkn4=" + [mod."github.com/ajg/form"] + version = "v1.5.1" + hash = "sha256-wHKZnoL8gW3YL8frdMIbs703ZX/NruuW5dV13PhxlG8=" + [mod."github.com/ajstarks/deck"] + version = "v0.0.0-20200831202436-30c9fc6549a9" + hash = "sha256-cXG8amgPps7I8wQQKC7lfl/EEuTkV4GtxUT+QCO992g=" + [mod."github.com/ajstarks/deck/generate"] + version = "v0.0.0-20210309230005-c3f852c02e19" + hash = "sha256-T7X8Xz8zPLTZAXj3SB/c/ONmPhSo5pUhPl++w6ZAXuw=" + [mod."github.com/ajstarks/svgo"] + version = "v0.0.0-20211024235047-1546f124cd8b" + hash = "sha256-sPwt5sImKFk949TzUeYEF2UiJDqHxXFJKRL2Y7JWJ6Y=" + [mod."github.com/alecthomas/kingpin/v2"] + version = "v2.4.0" + hash = "sha256-wF8AHp7jHB5NLlbWh29IPCqQeEBwWcw/MYN2ixR3P9o=" + [mod."github.com/alecthomas/template"] + version = "v0.0.0-20190718012654-fb15b899a751" + hash = "sha256-RsS4qxdRQ3q+GejA8D9Iu31A/mZNms4LbJ7518jWiu4=" + [mod."github.com/alecthomas/units"] + version = "v0.0.0-20211218093645-b94a6e3cc137" + hash = "sha256-uriYmwxT69xbmWKO/5OAyeMa2lFBOJDrU2KtQh/+ZjY=" + [mod."github.com/alexkohler/prealloc"] + version = "v1.0.0" + hash = "sha256-+D6PMR+aOD+ayCYQoIH4aLu+yNu7EzJPkPxJ/7FHMQQ=" + [mod."github.com/alingse/asasalint"] + version = "v0.0.11" + hash = "sha256-GOhT8GUNdl8eruKyNZuuTlrA4tky9myEvpe90dkYf6s=" + [mod."github.com/andybalholm/brotli"] + version = "v1.0.5" + hash = "sha256-/qS8wU8yZQJ+uTOg66rEl9s7spxq9VIXF5L1BcaEClc=" + [mod."github.com/antihax/optional"] + version = "v1.0.0" + hash = "sha256-QGaiZUrNRq6obhRvPiG034d3EmUBCMMyKrnjROhGoMc=" + [mod."github.com/apache/arrow/go/v12"] + version = "v12.0.1" + hash = "sha256-SbrBq+xrFdLeAdcgWxQ0Tzuz3VkP3QYN9MOD6bQLDic=" + [mod."github.com/apache/thrift"] + version = "v0.16.0" + hash = "sha256-4jsjTxU5CZ6feurBx3pIY2JF5FsoMewVOQHeVtgHkdA=" + [mod."github.com/armon/circbuf"] + version = "v0.0.0-20150827004946-bbbad097214e" + hash = "sha256-klQjllsJZqZ2KPNx1mZT9XP+UAJkuBhmTnZdNlAflEM=" + [mod."github.com/armon/consul-api"] + version = "v0.0.0-20180202201655-eb2c6b5be1b6" + hash = "sha256-aVqUesaJyU/nrgwlfG2p16VxcF6Hyk4s8diMp0Nuzsg=" + [mod."github.com/armon/go-metrics"] + version = "v0.4.1" + hash = "sha256-usxTUHA0QQMdM6sHi2z51nmnEKMbA0qUilxJFpWHlYE=" + [mod."github.com/armon/go-radix"] + version = "v0.0.0-20180808171621-7fddfc383310" + hash = "sha256-ZHU4pyBqHHRuQJuYr2K+LqeAnLX9peX07cmSYK+GDHk=" + [mod."github.com/aryann/difflib"] + version = "v0.0.0-20170710044230-e206f873d14a" + hash = "sha256-tQk7egU+OcLzLBlJx6H8QFCoPf2FdBIM/mIZarpO6wM=" + [mod."github.com/ashanbrown/forbidigo"] + version = "v1.5.1" + hash = "sha256-i196ClKXbxmQpA+JZ+kmOasSf84SsZA4IB1xvhYNZ2Q=" + [mod."github.com/ashanbrown/makezero"] + version = "v1.1.1" + hash = "sha256-GLoE0pIdC/BrHYSbLsYph76p+278u+TSnYE/yWvP66Q=" + [mod."github.com/aws/aws-lambda-go"] + version = "v1.13.3" + hash = "sha256-qd4LhYF3pE6qtIwMIuR0KwpIMVc1+tG6lrL1lJ/BPxE=" [mod."github.com/aws/aws-sdk-go"] version = "v1.45.25" hash = "sha256-ZzeU4WSHm5shDqGnK2mXC2p18NyAO+hKZHP7l1KR69k=" + [mod."github.com/aws/aws-sdk-go-v2"] + version = "v1.9.1" + hash = "sha256-92PzisvrWbywQFjOdJfAZblBG+OQ8vD4CuUpgmASdic=" + [mod."github.com/aws/aws-sdk-go-v2/service/cloudwatch"] + version = "v1.8.1" + hash = "sha256-LmL1Iy7wYrB3lXtyjcnB5F7XyQ28RPqeMgMafa6Pf0w=" + [mod."github.com/aws/smithy-go"] + version = "v1.8.0" + hash = "sha256-3Swyj6mCE3AM+i+N8ATEvM5hvM7MIgVpFp/mquVYbdU=" [mod."github.com/aymanbagabas/go-osc52/v2"] version = "v2.0.1" hash = "sha256-6Bp0jBZ6npvsYcKZGHHIUSVSTAMEyieweAX2YAKDjjg=" + [mod."github.com/aymerick/douceur"] + version = "v0.2.0" + hash = "sha256-NiBX8EfOvLXNiK3pJaZX4N73YgfzdrzRXdiBFe3X3sE=" + [mod."github.com/aymerick/raymond"] + version = "v2.0.3-0.20180322193309-b565731e1464+incompatible" + hash = "sha256-/Vj9a/AO/6+K2g2vfCy+oRB9rYLmTAR9Oa0lsgHtmeM=" + [mod."github.com/benbjohnson/clock"] + version = "v1.1.0" + hash = "sha256-BT/n9ag/E26FwEybLeqT1eOGlk6HsDIAp8A7LUssBfc=" [mod."github.com/beorn7/perks"] version = "v1.0.1" hash = "sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4=" @@ -74,24 +632,126 @@ schema = 3 [mod."github.com/bits-and-blooms/bitset"] version = "v1.10.0" hash = "sha256-/Kkx33umYGS1keFnkmJ+DHgIAtkEDNI42nVpKYfUOTs=" + [mod."github.com/bkielbasa/cyclop"] + version = "v1.2.0" + hash = "sha256-LJTTZzDgsxWnU69s6fc9WqPLGC+sbB8JgqNQ6W0tg/M=" + [mod."github.com/blang/semver/v4"] + version = "v4.0.0" + hash = "sha256-dJC22MjnfT5WqJ7x7Tc3Bvpw9tFnBn9HqfWFiM57JVc=" + [mod."github.com/blizzy78/varnamelen"] + version = "v0.8.0" + hash = "sha256-0+DAj7fTIgRLoPmmb+N1cYdi/VhLDj+fK11x3w6Dyxo=" + [mod."github.com/bombsimon/wsl/v3"] + version = "v3.4.0" + hash = "sha256-/+pozJf7x7+snr4mfvpbZXSTS9Ch5EYYQkKgue5uTac=" + [mod."github.com/boombuler/barcode"] + version = "v1.0.1" + hash = "sha256-mdptFdhAM2+xm8RBOuViCi/l5qtoIO3fdT+rPuC7nmw=" + [mod."github.com/breml/bidichk"] + version = "v0.2.4" + hash = "sha256-vxUHCOvArZ/Pt0s1EFsu1X2a0cK3Xbyu3pl/nzJuzvI=" + [mod."github.com/breml/errchkjson"] + version = "v0.3.1" + hash = "sha256-Jt3YqJqG3B0Yw805k8SrqE6Qkw7UtodfSxes7wI8RyA=" [mod."github.com/btcsuite/btcd/btcec/v2"] version = "v2.3.2" hash = "sha256-natWs+yIAuD1UI07iZtjPilroQLfXizFn3lNOiOT83U=" + [mod."github.com/btcsuite/btcd/btcutil"] + version = "v1.1.3" + hash = "sha256-6Y9sP1yvPBO8PhqmFVVXNV7dxsXlERDAB+TPTEfW3kI=" + [mod."github.com/btcsuite/btcd/chaincfg/chainhash"] + version = "v1.0.1" + hash = "sha256-vix0j/KGNvoKjhlKgVeSLY6un2FHeIEoZWMC4z3yvZ4=" + [mod."github.com/bufbuild/buf"] + version = "v1.15.1" + hash = "sha256-fQuqY+ImY0ESEBvNTYHWn0Rjt3pjBlSDmiYwNIMk9P4=" + [mod."github.com/bufbuild/connect-go"] + version = "v1.5.2" + hash = "sha256-tZNMxheADUhHBOKtFBezOYiLWTR0Ztviq05ogh+uwXw=" + [mod."github.com/bufbuild/protocompile"] + version = "v0.5.1" + hash = "sha256-PPzU9ULXFO38KNtfFNFNRHAoIwP/wAddw6BfyVydKy4=" + [mod."github.com/butuzov/ireturn"] + version = "v0.1.1" + hash = "sha256-aan9v3ZuzyWUnZxWu2zyUGOmrXoPH8GeCTWB2ksnlWc=" + [mod."github.com/bytedance/sonic"] + version = "v1.9.1" + hash = "sha256-u8fAQs/8St/jKxhnsDVh9eVZdN28S+S/hA1yqu/UQLs=" + [mod."github.com/casbin/casbin/v2"] + version = "v2.37.0" + hash = "sha256-jajrqLCbEUephuZRhIDLJY7glWoSaXHLm6dXepeQrYo=" + [mod."github.com/cenkalti/backoff"] + version = "v2.2.1+incompatible" + hash = "sha256-aMpsIH8tC5An/Ldb4yTweEbi/4e5gi7InGitPKimxNU=" [mod."github.com/cenkalti/backoff/v4"] version = "v4.1.3" hash = "sha256-u6MEDopHoTWAZoVvvXOKnAg++xre53YgQx0gmf6t2KU=" + [mod."github.com/census-instrumentation/opencensus-proto"] + version = "v0.4.1" + hash = "sha256-5fDJyebvtDYK8mnpLW09yIQ7L9i8IfWSy1k/hdMw94g=" [mod."github.com/cespare/xxhash"] version = "v1.1.0" hash = "sha256-nVDTtXH9PC3yJ0THaQZEN243UP9xgLi/clt5xRqj3+M=" [mod."github.com/cespare/xxhash/v2"] version = "v2.2.0" hash = "sha256-nPufwYQfTkyrEkbBrpqM3C2vnMxfIz6tAaBmiUP7vd4=" + [mod."github.com/charithe/durationcheck"] + version = "v0.0.10" + hash = "sha256-t1SzX6U55OpGdn5C1tD7iUYvrtM/XFHDwLbc6pre2Yo=" + [mod."github.com/chavacava/garif"] + version = "v0.0.0-20230227094218-b8c73b2037b8" + hash = "sha256-NiQp4UixMU4r7hVNDEc0g/nOtq8Kv+h1GKox2k4UOIg=" + [mod."github.com/cheekybits/is"] + version = "v0.0.0-20150225183255-68e9c0620927" + hash = "sha256-jbwqhZZJedT65ImkUXWfzMqxuwUAzygG8isPzOH3a9Y=" + [mod."github.com/cheggaaa/pb"] + version = "v1.0.27" + hash = "sha256-T8E4qTQN/evR6mkWxd2EZhTW26K9WhMYJhnEh7UtKbk=" + [mod."github.com/chenzhuoyu/base64x"] + version = "v0.0.0-20221115062448-fe3a3abad311" + hash = "sha256-xmONcYkIXgXomJYHR521Dr9F3XbbUM14bgf7KJ5FIFc=" + [mod."github.com/chigopher/pathlib"] + version = "v0.12.0" + hash = "sha256-d7jG8HZ/cSZTFgh612pidn/roZP3ta+SV0Ur7A/p8Vo=" + [mod."github.com/chzyer/logex"] + version = "v1.2.1" + hash = "sha256-vN+FbG5y5ihY5b7Vz5EpKcJoZ0ywbiaEZnTQdvLIPjE=" [mod."github.com/chzyer/readline"] version = "v1.5.1" hash = "sha256-6wKd6/JZ9/O7FwSyNKE3KOt8fVPZEunqbTHQUxlOUNc=" + [mod."github.com/chzyer/test"] + version = "v1.0.0" + hash = "sha256-Gvn/d0DwOUEOfDbPWaYlEynAQQ35iqx5sVpi0S2jras=" + [mod."github.com/circonus-labs/circonus-gometrics"] + version = "v2.3.1+incompatible" + hash = "sha256-+tn0rEeNHyqGPdE6yadE3TIG9b/vet0RFBPAEE6OXGg=" + [mod."github.com/circonus-labs/circonusllhist"] + version = "v0.1.3" + hash = "sha256-cexab5zNhQQl+Eek1/OsuDZj7XG17SHdJqi/ckXS8og=" + [mod."github.com/clbanning/mxj"] + version = "v1.8.4" + hash = "sha256-ZG1Z+YS6ZaKM8Ic9xvU9fe9LFwybhnBhQUKthvcPqhw=" + [mod."github.com/clbanning/x2j"] + version = "v0.0.0-20191024224557-825249438eec" + hash = "sha256-R8zypK+YhSbbnDosHVwQsLor+Q260OdDsZg3slc5p3o=" + [mod."github.com/client9/misspell"] + version = "v0.3.4" + hash = "sha256-MIKnt4va/nPl+5cCgOvCyRGIORTnguieQhlj8ery4BU=" + [mod."github.com/cloudflare/circl"] + version = "v1.3.3" + hash = "sha256-ItdVkU53Ep01553/tJ4MdAwoTpPljRxiBW9sAd7p0xI=" + [mod."github.com/cncf/udpa/go"] + version = "v0.0.0-20220112060539-c52dc94e7fbe" + hash = "sha256-3E8BNhFNIdSJg92cUmfB2fAUawpcQPQxtSDO8S5h7Is=" + [mod."github.com/cncf/xds/go"] + version = "v0.0.0-20231109132714-523115ebc101" + hash = "sha256-NdomSc8YWhKSXAa6o75T8R5vLOLgkh1hRPv92lbyz1Y=" [mod."github.com/cockroachdb/apd/v2"] version = "v2.0.2" hash = "sha256-UrPHkvqVF8V78+kXKmjTHl79XsgDBnqFsje5BMYh0E4=" + [mod."github.com/cockroachdb/datadriven"] + version = "v1.0.3-0.20230413201302-be42291fc80f" + hash = "sha256-nDbyP1HPTCElSNeRnLSpDOcbI6ckJSnevmmd4VnOEUQ=" [mod."github.com/cockroachdb/errors"] version = "v1.11.1" hash = "sha256-ufKtavyfW/i3ZemiqDqKGc0JM+f0IBi6bZWkZyb/jdc=" @@ -104,15 +764,48 @@ schema = 3 [mod."github.com/cockroachdb/redact"] version = "v1.1.5" hash = "sha256-0rtT7LRO0wxf9XovOK8GXRrhmx8OcbdPK/mXOKbJdog=" + [mod."github.com/cockroachdb/sentry-go"] + version = "v0.6.1-cockroachdb.2" + hash = "sha256-3C9tuGU6f2DOz6yPcOdUf1LRvCXFg+prfqAPob9Sz2E=" [mod."github.com/cockroachdb/tokenbucket"] version = "v0.0.0-20230807174530-cc333fc44b06" hash = "sha256-yZdBXkTVzPxRYntI9I2Gu4gkI11m52Nwl8RNNdlXSrA=" + [mod."github.com/codahale/hdrhistogram"] + version = "v0.0.0-20161010025455-3a0bb77429bd" + hash = "sha256-p9BZ4OPNXcssJwM1k6pSvcVADXonNr6YSMH3Jd27Vf0=" + [mod."github.com/codegangsta/inject"] + version = "v0.0.0-20150114235600-33e0aa1cb7c0" + hash = "sha256-UjG3ItBHuFybFQ9wHatiM6JJs1n6t/wYxMDQ9EeeCss=" [mod."github.com/cometbft/cometbft"] version = "v0.38.5" hash = "sha256-F1NmnJxYCt3dTDS6Z/9zbCEUf2vjUdQs9mQiZEhxyj0=" [mod."github.com/cometbft/cometbft-db"] - version = "v0.8.0" - hash = "sha256-Tlm2V9zDs/wVoFvMmJSdCzCdZKiFRC7Qk8FS3FaqQyk=" + version = "v0.9.1" + hash = "sha256-ftRdle5ok2aCyqT3u5rYY0jKB8WT8uDus26Pw4Mo1go=" + [mod."github.com/containerd/continuity"] + version = "v0.3.0" + hash = "sha256-AIyKhRGeaJA8iHX3cH6lcoEIEKUwMrLHdQqWMtAqo5o=" + [mod."github.com/coreos/bbolt"] + version = "v1.3.2" + hash = "sha256-otoFfHibSdPIg6A/d6yLeKTC0ocTJrtNnpsXZq6hpY0=" + [mod."github.com/coreos/etcd"] + version = "v3.3.10+incompatible" + hash = "sha256-fCyJRKX9dgcb2JwqiQL/OshS3Ilmm7bY3OCISxZ6l68=" + [mod."github.com/coreos/go-etcd"] + version = "v2.0.0+incompatible" + hash = "sha256-Uo5heUPCLTGZ8ns1Zi48kuNnPtvJ/7kLXpMGpT4kY/U=" + [mod."github.com/coreos/go-semver"] + version = "v0.3.0" + hash = "sha256-ielBK5+kGscOuygfFNNr5iKuuF1qKBiXLlK8eGuA4Bw=" + [mod."github.com/coreos/go-systemd"] + version = "v0.0.0-20190321100706-95778dfbb74e" + hash = "sha256-1WiFUSLDPxsSVafwCkzz0xjpC0W7bNX/sJ0wRBVrvn4=" + [mod."github.com/coreos/go-systemd/v22"] + version = "v22.5.0" + hash = "sha256-E2zXikbmIQImghstLUWuey1YgA0Folu3F+fi5k4hCxA=" + [mod."github.com/coreos/pkg"] + version = "v0.0.0-20180928190104-399ea9e2e55f" + hash = "sha256-R4EcMkhMPi5fSE5SU8Oa1FlvP5VEysXPaX9GYqnW15w=" [mod."github.com/cosmos/btcutil"] version = "v1.0.5" hash = "sha256-t572Sr5iiHcuMKLMWa2i+LBAt192oa+G1oA371tG/eI=" @@ -132,68 +825,273 @@ schema = 3 version = "v1.4.11" hash = "sha256-hXJIGN8Arg09ldCgrSyYZK+xMelYavEj2I3ltxJfAqE=" [mod."github.com/cosmos/iavl"] - version = "v1.0.0" - hash = "sha256-Zm1TfR7vBJ7zMT0whznStO42S0t6hyrwpbUnDmM3MlI=" + version = "v1.0.1" + hash = "sha256-owSjZEVLrFoLjO/wm8bxbVLhqRv/uX+8usdVMnbOn/s=" [mod."github.com/cosmos/ics23/go"] version = "v0.10.0" hash = "sha256-KYEv727BO/ht63JO02xiKFGFAddg41Ve9l2vSSZZBq0=" [mod."github.com/cosmos/ledger-cosmos-go"] version = "v0.13.3" hash = "sha256-4f73odipfgWku0/gK2UtXbrBXvj8kT9sg4IhnfAP/S0=" + [mod."github.com/cpuguy83/go-md2man"] + version = "v1.0.10" + hash = "sha256-XP8oKAx5LgQ0fO1rjO9tWnbXB431VOzXVaRDPUP900g=" + [mod."github.com/cpuguy83/go-md2man/v2"] + version = "v2.0.3" + hash = "sha256-FAMxR5eBO9LQp6ev1b7zaPUS5aoNz1GtsPpoArjiJVw=" [mod."github.com/creachadair/atomicfile"] version = "v0.3.3" hash = "sha256-sm0lJGGjpm27HQlOc8C3QgWHjlyjJZ/tKIO5qpSNH7E=" + [mod."github.com/creachadair/command"] + version = "v0.0.7" + hash = "sha256-BBt4w2GEDgXczhMHTP3xcjM7S4r4zy9s3pvEMDRdpow=" + [mod."github.com/creachadair/mtest"] + version = "v0.0.0-20231015022703-31f2ea539dce" + hash = "sha256-/TnB7HDHeovyrAaLyVIEq/MVTDNejPB9Anuwik/mbn4=" [mod."github.com/creachadair/tomledit"] version = "v0.0.25" hash = "sha256-EW3K2z4sfCdgKTQsjTpHxV96xdnTbnggu1EF34BlTzk=" + [mod."github.com/creack/pty"] + version = "v1.1.9" + hash = "sha256-Rj6c4/3IApJcS36iPVIEdlMSC/SWmywnpqk1500ik5k=" + [mod."github.com/curioswitch/go-reassign"] + version = "v0.2.0" + hash = "sha256-p/Scj8JNKxZ6KHcw3hLSEXcfSRrKsvhV5su6t5C8kO0=" + [mod."github.com/cyphar/filepath-securejoin"] + version = "v0.2.4" + hash = "sha256-heCD0xMxlwnHCHcRBgTjVexHOLyWI2zRW3E8NFKoLzk=" + [mod."github.com/daixiang0/gci"] + version = "v0.10.1" + hash = "sha256-kYAGwnolemaKj0Fg6s8rr4gv4FHb/+xbZDVLCvSxhyE=" [mod."github.com/danieljoos/wincred"] version = "v1.2.0" hash = "sha256-LHcvTJCc8++bFndbd8ZgMSTe4L5h2C4rN+cSWHCz54Y=" [mod."github.com/davecgh/go-spew"] version = "v1.1.2-0.20180830191138-d8f796af33cc" hash = "sha256-fV9oI51xjHdOmEx6+dlq7Ku2Ag+m/bmbzPo6A4Y74qc=" + [mod."github.com/decred/dcrd/crypto/blake256"] + version = "v1.0.1" + hash = "sha256-YvgssFO1q59EURkk33WEjW0emS8km3i/8YXpfI0+/xo=" [mod."github.com/decred/dcrd/dcrec/secp256k1/v4"] version = "v4.2.0" hash = "sha256-Mw+axGW3RzaRFzcYc7/9/gpqZgWXZHeyT2c4USFtAQA=" + [mod."github.com/denis-tingaikin/go-header"] + version = "v0.4.3" + hash = "sha256-Lv1VMHXTWbRIzxg62wacQg0W3YkeFpm3sZq34f912eU=" [mod."github.com/desertbit/timer"] version = "v0.0.0-20180107155436-c41aec40b27f" hash = "sha256-abLOtEcomAqCWLphd2X6WkD/ED764w6sa6unox4BXss=" + [mod."github.com/dgraph-io/badger"] + version = "v1.6.0" + hash = "sha256-7VG/4wXe5Ww6jo9SFWTYOolIyxUyDu7ZrvYrGqy3L74=" [mod."github.com/dgraph-io/badger/v2"] version = "v2.2007.4" hash = "sha256-+KwqZJZpViv8S3TqUVvPXrFoMgWFyS3NoLsi4RR5fGk=" [mod."github.com/dgraph-io/ristretto"] version = "v0.1.1" hash = "sha256-Wr9ovXhGi71+n37EnrpIj2o9goyaQHtY4Vvurv6IVlY=" + [mod."github.com/dgrijalva/jwt-go"] + version = "v3.2.0+incompatible" + hash = "sha256-t5rhczm+60rYmMg0mZTp86dJkzuGp/OLd5ccXek+oiI=" [mod."github.com/dgryski/go-farm"] version = "v0.0.0-20200201041132-a6ae2369ad13" hash = "sha256-aOMlPwFY36bLiiIx4HonbCYRAhagk5N6HAWN7Ygif+E=" + [mod."github.com/dgryski/go-rendezvous"] + version = "v0.0.0-20200823014737-9f7001d12a5f" + hash = "sha256-n/7xo5CQqo4yLaWMSzSN1Muk/oqK6O5dgDOFWapeDUI=" + [mod."github.com/dgryski/go-sip13"] + version = "v0.0.0-20181026042036-e10d5fee7954" + hash = "sha256-pgVia6npFluwOrbY1DyEgy5X2zzgHTe+pAkIrdyK3pU=" + [mod."github.com/djherbis/atime"] + version = "v1.1.0" + hash = "sha256-+DaFFmzWr9Ab0P+qcm0d3ayPYx11YyOz56nBeH8pX3c=" + [mod."github.com/docker/cli"] + version = "v23.0.1+incompatible" + hash = "sha256-ckbEh+7rLRonJly6uP/iokLdvxhaSs/wrq2vB7CFOHU=" + [mod."github.com/docker/distribution"] + version = "v2.8.1+incompatible" + hash = "sha256-xB+w8Uaz8T6jb2LOJU5XAoMHFg/YQd3MfDFOUNKlMxE=" + [mod."github.com/docker/docker"] + version = "v23.0.1+incompatible" + hash = "sha256-ocpz9cwzB61uheXEYS9J0oCYnwXBTEt+Z9YrkcgMF9U=" + [mod."github.com/docker/docker-credential-helpers"] + version = "v0.7.0" + hash = "sha256-Np+esoutU1psMWB0G1ayKwaWVn/XemIXxlVlooXphzg=" + [mod."github.com/docker/go-connections"] + version = "v0.4.0" + hash = "sha256-GHNIjOuuNp5lFQ308+nDNwQPGESCVV7bCUxSW5ZxZlc=" + [mod."github.com/docker/go-units"] + version = "v0.5.0" + hash = "sha256-iK/V/jJc+borzqMeqLY+38Qcts2KhywpsTk95++hImE=" [mod."github.com/dustin/go-humanize"] version = "v1.0.1" hash = "sha256-yuvxYYngpfVkUg9yAmG99IUVmADTQA0tMbBXe0Fq0Mc=" [mod."github.com/dvsekhvalnov/jose2go"] version = "v1.6.0" hash = "sha256-IXn2BuUp4fi/i2zf1tGGW1m9xoYh3VCksB6GJ5Sf06g=" + [mod."github.com/eapache/go-resiliency"] + version = "v1.1.0" + hash = "sha256-/Ynpe49dMLxerhl/veyog9JCC5PEAjKyqCYXTtjgr/4=" + [mod."github.com/eapache/go-xerial-snappy"] + version = "v0.0.0-20180814174437-776d5712da21" + hash = "sha256-LUUdtFE10fzGDhDZ4MD/rkijNzvw1+/tD4v3s1sgjFk=" + [mod."github.com/eapache/queue"] + version = "v1.1.0" + hash = "sha256-z2MXjC0gr8c7rGr1FzHmx98DsTclTta2fsM+kiwptx0=" + [mod."github.com/edsrzf/mmap-go"] + version = "v1.0.0" + hash = "sha256-k1DYvCqO3BKNcGEve/nMW0RxzMkK2tGfXbUbycqcVSo=" + [mod."github.com/eknkc/amber"] + version = "v0.0.0-20171010120322-cdade1c07385" + hash = "sha256-qXW4k+4Y20OnOH3T3y3wxnMAGmpvS04Pf8zyyfxJXJQ=" [mod."github.com/emicklei/dot"] - version = "v1.6.0" - hash = "sha256-SQ8UXIOJGsToegDOefk8CYrIycGSjCsqVV5ZTlyCCiw=" + version = "v1.6.1" + hash = "sha256-zOpoaepCfPLmU9iQji/Ait+SVEHI9eF3rwtW0h/8lho=" + [mod."github.com/emirpasic/gods"] + version = "v1.18.1" + hash = "sha256-hGDKddjLj+5dn2woHtXKUdd49/3xdsqnhx7VEdCu1m4=" + [mod."github.com/envoyproxy/go-control-plane"] + version = "v0.11.1" + hash = "sha256-VO8XOuOOLLb7GL8g/KJJjaXeHS/dbEyyLLKtAb9TUHU=" + [mod."github.com/envoyproxy/protoc-gen-validate"] + version = "v1.0.2" + hash = "sha256-Bn5bMERW93AjCTughY4kbSy0yZTh2WE+KJE+awG+X80=" + [mod."github.com/esimonov/ifshort"] + version = "v1.0.4" + hash = "sha256-yjJTn4jLHGCqAQJ7+B8SKScGZeEvBS3yQeFKxUTXY2w=" + [mod."github.com/etcd-io/bbolt"] + version = "v1.3.3" + hash = "sha256-DM/GTsa/Oi+i+lVLgj4xFL5xXAhprJwz+LEnPZ/9wDY=" + [mod."github.com/ettle/strcase"] + version = "v0.1.1" + hash = "sha256-ngcZkeyWBkS5IMxlPbpdsfxS1QDWMWmJAuirlJgWYtk=" + [mod."github.com/facebookgo/ensure"] + version = "v0.0.0-20200202191622-63f1cf65ac4c" + hash = "sha256-ZvQLMu0LBtRB4lMgY4DlsKxiRUzmh8W4KvGYJF4icRc=" + [mod."github.com/facebookgo/stack"] + version = "v0.0.0-20160209184415-751773369052" + hash = "sha256-o6JL8oyrSBcgbdkvjUi4PT5OnfwgyXgbPQDA82sB2R8=" + [mod."github.com/facebookgo/subset"] + version = "v0.0.0-20200203212716-c811ad88dec4" + hash = "sha256-oBhWz9Haw/ZuqJofQ7psThNrr1f6GHHgxq8agev7TOo=" + [mod."github.com/fasthttp-contrib/websocket"] + version = "v0.0.0-20160511215533-1f3b11f56072" + hash = "sha256-J620vRd+Z+bSRSRWx+UyS8VqW4IAIPkvuEUYGiuvTPk=" [mod."github.com/fatih/color"] version = "v1.15.0" hash = "sha256-7b+scFVQeEUoXfeCDd8X2gS8GMoWA+HxjK8wfbypa5s=" + [mod."github.com/fatih/structs"] + version = "v1.1.0" + hash = "sha256-OCmubTLF1anwNnkvFZDYHnF6hFlX0WDoe/9+dDlaMPM=" + [mod."github.com/fatih/structtag"] + version = "v1.2.0" + hash = "sha256-Y2pjiEmMsxfUH8LONU2/f8k1BibOHeLKJmi4uZm/SSU=" + [mod."github.com/felixge/fgprof"] + version = "v0.9.3" + hash = "sha256-Q0EOEvkwqNbB/yR85MGrbzoahGbWbSw8ISmP0KTdAw8=" [mod."github.com/felixge/httpsnoop"] version = "v1.0.4" hash = "sha256-c1JKoRSndwwOyOxq9ddCe+8qn7mG9uRq2o/822x5O/c=" + [mod."github.com/firefart/nonamedreturns"] + version = "v1.0.4" + hash = "sha256-PRaeBHz+xyYHMx6UqUOsBrvskkARZlbNVdW4l7Em9IE=" + [mod."github.com/flosch/pongo2"] + version = "v0.0.0-20190707114632-bbf5a6c351f4" + hash = "sha256-eCvCD84YEyLg0aHpXVAGq9mbuXoCcWLqVN3aDy8qEHs=" + [mod."github.com/flosch/pongo2/v4"] + version = "v4.0.2" + hash = "sha256-MQa2y64XpNPa3dKEerYJT5eFTrAk7flts9h2LG1QQQY=" + [mod."github.com/fogleman/gg"] + version = "v1.3.0" + hash = "sha256-Fs2JI0FmF4N5EzXJzGAPZMxZxo6wKyebkN/iBZ9sdNo=" + [mod."github.com/fortytw2/leaktest"] + version = "v1.3.0" + hash = "sha256-nadQDsXLcSwzZeU5TWgJVDB2yQFSNLjaN/Pj7uH7BxE=" + [mod."github.com/franela/goblin"] + version = "v0.0.0-20200105215937-c9ffbefa60db" + hash = "sha256-zm2juQIvmoSI/sKOtgOn7DCQwW6rCfyrjcaxRaJ5sGE=" + [mod."github.com/franela/goreq"] + version = "v0.0.0-20171204163338-bcd34c9993f8" + hash = "sha256-Sx911OBB67XYUSbjoGtJ5I/WL+aXR67FpCu4wiwQqhQ=" + [mod."github.com/frankban/quicktest"] + version = "v1.14.6" + hash = "sha256-4DRq4JlaahwdLSQlx8gVuMoC4U9JmDI84jeNx8hO0D4=" [mod."github.com/fsnotify/fsnotify"] version = "v1.7.0" hash = "sha256-MdT2rQyQHspPJcx6n9ozkLbsktIOJutOqDuKpNAtoZY=" + [mod."github.com/fzipp/gocyclo"] + version = "v0.6.0" + hash = "sha256-Gz8F24WCZXiQ0rlc2qKknHhu1IwxzbarwHyeYXpEVGo=" + [mod."github.com/gabriel-vasile/mimetype"] + version = "v1.4.2" + hash = "sha256-laV+IkgbnEG07h1eFfPISqp0ctnLXfzchz/CLR1lftk=" + [mod."github.com/gavv/httpexpect"] + version = "v2.0.0+incompatible" + hash = "sha256-eo/yVBdSCAlQyXp5oRdX5JG5M0zlSYNJKj8yGzU9Czc=" [mod."github.com/getsentry/sentry-go"] version = "v0.27.0" hash = "sha256-PTkTzVNogqFA/5rc6INLY6RxK5uR1AoJFOO+pOPdE7Q=" + [mod."github.com/ghemawat/stream"] + version = "v0.0.0-20171120220530-696b145b53b9" + hash = "sha256-CO/d2Kpi78Y2BUofLSTa1R6BvU/NJtZS3dZ9YeGWDEQ=" + [mod."github.com/ghodss/yaml"] + version = "v1.0.0" + hash = "sha256-D+2i+EwF2YptR0m/OG4WIVVLL7tUC7XvgRQef2usfGo=" + [mod."github.com/gin-contrib/sse"] + version = "v0.1.0" + hash = "sha256-zYbMTao+1F+385Lvsba9roLmmt9eYqr57sUWo0LCVhw=" + [mod."github.com/gin-gonic/gin"] + version = "v1.9.1" + hash = "sha256-3FHywH5QuhTeQcdF8v06jt9vIkH0ON6ydpMYciAc8xQ=" + replaced = "github.com/gin-gonic/gin" + [mod."github.com/go-check/check"] + version = "v0.0.0-20180628173108-788fd7840127" + hash = "sha256-KsRJNTprd1UijnJusbHwQGM7Bdm45Jt/QL+cIUGNa2w=" + [mod."github.com/go-chi/chi/v5"] + version = "v5.0.8" + hash = "sha256-BMr7IqnWSVYnRuEtsDmd0WD0v5sG15QUyaUaWTemG7A=" + [mod."github.com/go-critic/go-critic"] + version = "v0.7.0" + hash = "sha256-/uuOzLycei4ADOZdVYxKa8zVRZ+WeWd8S/040qIu1o8=" + [mod."github.com/go-errors/errors"] + version = "v1.4.2" + hash = "sha256-TkRLJlgaVlNxRD9c0ky+CN99tKL4Gx9W06H5a273gPM=" + [mod."github.com/go-fonts/dejavu"] + version = "v0.1.0" + hash = "sha256-acjdnw1MaSnZdGLDBoEIucXacoqLBAowGBcM67oWXc0=" + [mod."github.com/go-fonts/latin-modern"] + version = "v0.2.0" + hash = "sha256-1KQzyodpPk5unTmAVZCdvrmNsRClDgx9oMhe5Mvbk1c=" + [mod."github.com/go-fonts/liberation"] + version = "v0.2.0" + hash = "sha256-LQvoqcozOLVCg+0l9enJ5df00VDY9GnQnhasQyjuYgg=" + [mod."github.com/go-fonts/stix"] + version = "v0.1.0" + hash = "sha256-hEzLsmV/p2kZ1qNhxbtENT2S/zCF+t659NyhD9PdbJk=" + [mod."github.com/go-git/gcfg"] + version = "v1.5.1-0.20230307220236-3a3c6141e376" + hash = "sha256-f4k0gSYuo0/q3WOoTxl2eFaj7WZpdz29ih6CKc8Ude8=" + [mod."github.com/go-git/go-billy/v5"] + version = "v5.5.0" + hash = "sha256-4XUoD2bOCMCdu83egb/y8kY/Fm0s1rWgPMtiahh38OQ=" + [mod."github.com/go-git/go-git/v5"] + version = "v5.11.0" + hash = "sha256-2yUM/FlV+nYxacVynJCnDZeMub4Iu8JL2WBHmlnwOkE=" + [mod."github.com/go-gl/glfw"] + version = "v0.0.0-20190409004039-e6da0acd62b1" + hash = "sha256-tqPStzM1xOuEWqAv4pBbzB+lNIxEqqyCCP0wWCbrlyY=" + [mod."github.com/go-gl/glfw/v3.3/glfw"] + version = "v0.0.0-20200222043503-6f7a984d4dc4" + hash = "sha256-6BfEsip1tEBelFTsKVtn2okCTb+0UsqEdIljg+PIjiE=" [mod."github.com/go-kit/kit"] version = "v0.13.0" hash = "sha256-EncDzq0JVtY+NLlW5lD+nbVewNYTTrfzlOxI4PuwREw=" [mod."github.com/go-kit/log"] version = "v0.2.1" hash = "sha256-puLJ+up45X2j9E3lXvBPKqHPKOA/sFAhfCqGxsITW/Y=" + [mod."github.com/go-latex/latex"] + version = "v0.0.0-20210823091927-c0d11ff05a81" + hash = "sha256-+RDz+XGdQlriZctFVNJcBBs2B8HTShlYZLfLEtSIrGs=" [mod."github.com/go-logfmt/logfmt"] version = "v0.6.0" hash = "sha256-RtIG2qARd5sT10WQ7F3LR8YJhS8exs+KiuUiVf75bWg=" @@ -203,18 +1101,117 @@ schema = 3 [mod."github.com/go-logr/stdr"] version = "v1.2.2" hash = "sha256-rRweAP7XIb4egtT1f2gkz4sYOu7LDHmcJ5iNsJUd0sE=" + [mod."github.com/go-martini/martini"] + version = "v0.0.0-20170121215854-22fa46961aab" + hash = "sha256-kHpDnnH+PeH8gjBfQlKxxrK1sx+HcyAC1rFUu3gdNwY=" + [mod."github.com/go-ole/go-ole"] + version = "v1.2.6" + hash = "sha256-+oxitLeJxYF19Z6g+6CgmCHJ1Y5D8raMi2Cb3M6nXCs=" + [mod."github.com/go-pdf/fpdf"] + version = "v0.6.0" + hash = "sha256-dMo+6TKU7/gdDX+tNSdMmyo38jS99IaoLymsVKHVyl4=" + [mod."github.com/go-playground/assert/v2"] + version = "v2.2.0" + hash = "sha256-jBDvfGBS2EWzN6Ve+ZU2TyAj3c2Wqbxw88kz2NsBq44=" + [mod."github.com/go-playground/locales"] + version = "v0.14.1" + hash = "sha256-BMJGAexq96waZn60DJXZfByRHb8zA/JP/i6f/YrW9oQ=" + [mod."github.com/go-playground/universal-translator"] + version = "v0.18.1" + hash = "sha256-2/B2qP51zfiY+k8G0w0D03KXUc7XpWj6wKY7NjNP/9E=" + [mod."github.com/go-playground/validator/v10"] + version = "v10.14.0" + hash = "sha256-9bZ6GTH3Lr7bYLgOIurHmMOyiZna4wW6QyuEP3dHX5g=" + [mod."github.com/go-redis/redis/v8"] + version = "v8.11.5" + hash = "sha256-KhVE/KR5oUCOQ42Hk7J7oa99A1Gu4+KJYknhgYI2G6w=" + [mod."github.com/go-sql-driver/mysql"] + version = "v1.4.1" + hash = "sha256-2d2aKcq9juUUsHMxuZgC4Xl6t2WtluWuF4cW1a2Pbk8=" + [mod."github.com/go-stack/stack"] + version = "v1.8.0" + hash = "sha256-26RlTEcAkbewMUtmirKrDGQ1WJlNousp69v7HMopYnI=" + [mod."github.com/go-task/slim-sprig"] + version = "v0.0.0-20210107165309-348f09dbbbc0" + hash = "sha256-jgza4peLzeJlwmMh/c1gNkmtwA9YtSdGaBzBUDXhIZo=" + [mod."github.com/go-toolsmith/astcast"] + version = "v1.1.0" + hash = "sha256-Rv3tAJMtJMeKGWmRB5ZzWQXEdK2XIVRa3moJy/7Dzfw=" + [mod."github.com/go-toolsmith/astcopy"] + version = "v1.1.0" + hash = "sha256-1lTbBAzJ4CxTkbj1p/mavpePTxx+v1e0YSFSJ5HJsaU=" + [mod."github.com/go-toolsmith/astequal"] + version = "v1.1.0" + hash = "sha256-6xJLqWaar1nmOXENzV1nOw7LdbdZDmZkePRyBfUx51s=" + [mod."github.com/go-toolsmith/astfmt"] + version = "v1.1.0" + hash = "sha256-omjnkc5IHddHio3FGRpn301TV4tzcf3Ko2UbMPmvcSk=" + [mod."github.com/go-toolsmith/astp"] + version = "v1.1.0" + hash = "sha256-Ev7Lv6yuljrsa8g0iZWnW7C+OBHzBNvJF9dVyIfHTF0=" + [mod."github.com/go-toolsmith/strparse"] + version = "v1.1.0" + hash = "sha256-liWm3KYyVmGRbCbXyacb+A0Tngd9UB0n+2COqGUj2e0=" + [mod."github.com/go-toolsmith/typep"] + version = "v1.1.0" + hash = "sha256-wx/fkwaGGPtIIm1P9kxloUNf3ZumrzrHcWkudxqBmCA=" + [mod."github.com/go-xmlfmt/xmlfmt"] + version = "v1.1.2" + hash = "sha256-GYWn8Zxss0LLjCUG/0UdBoCLG0sgFdIXk/1QPk2oFSo=" + [mod."github.com/go-zookeeper/zk"] + version = "v1.0.2" + hash = "sha256-6uMpoTfoOxkl9HqfYfxnjro93+PItGjoWs9Vwfnd/Xw=" + [mod."github.com/gobwas/glob"] + version = "v0.2.3" + hash = "sha256-hYHMUdwxVkMOjSKjR7UWO0D0juHdI4wL8JEy5plu/Jc=" + [mod."github.com/gobwas/httphead"] + version = "v0.1.0" + hash = "sha256-6wFni/JkK2GqtVs3IW+GxHRNoSu4EJfzaBRGX2hF1IA=" + [mod."github.com/gobwas/pool"] + version = "v0.2.1" + hash = "sha256-py8/+Wo5Q83EbYMUKK5U/4scRcyMo2MjOoxqi5y+sUY=" + [mod."github.com/gobwas/ws"] + version = "v1.1.0" + hash = "sha256-acKk+P+NtXvrOaT6WhJzI6RLUeB1ejITtGjqabx74pg=" + [mod."github.com/goccy/go-json"] + version = "v0.10.2" + hash = "sha256-6fMD2/Rku8HT0zDdeA23pX0YxbohiIOC8OJNYbylJTQ=" [mod."github.com/godbus/dbus"] version = "v0.0.0-20190726142602-4481cbc300e2" hash = "sha256-R7Gb9+Zjy80FbQSDGketoVEqfdOQKuOVTfWRjQ5kxZY=" + [mod."github.com/godbus/dbus/v5"] + version = "v5.0.4" + hash = "sha256-jtigTU/SgVZuQuH3nIFpRKIr95oGlsQowUfjndgPwhI=" + [mod."github.com/gofrs/flock"] + version = "v0.8.1" + hash = "sha256-pm3JJjYx+DjthmmdnIZQ4PvvtUVlpUTGiucIvmNI0dY=" + [mod."github.com/gofrs/uuid"] + version = "v4.4.0+incompatible" + hash = "sha256-ohZ4Cm8mGudJWKvl5suoW4zOfe/SVs9ZAEcAJXzwC5I=" + [mod."github.com/gofrs/uuid/v5"] + version = "v5.0.0" + hash = "sha256-mUI/kbJCjKFeNg2yPySHioMPgDogu9AcGOcdt7RKvfY=" [mod."github.com/gogo/googleapis"] version = "v1.4.1" hash = "sha256-4KgwVRIA6GOV/Lkv11c/vj2RMlgu4ZMjwJGeyb2DZC4=" [mod."github.com/gogo/protobuf"] version = "v1.3.2" hash = "sha256-pogILFrrk+cAtb0ulqn9+gRZJ7sGnnLLdtqITvxvG6c=" + [mod."github.com/gogo/status"] + version = "v1.1.0" + hash = "sha256-i0vzgFt/SkK+GKXIkHGybyujXcZVoJRELiY0mD7+Zak=" + [mod."github.com/golang-jwt/jwt"] + version = "v3.2.2+incompatible" + hash = "sha256-LOkpuXhWrFayvVf1GOaOmZI5YKEsgqVSb22aF8LnCEM=" + [mod."github.com/golang-jwt/jwt/v4"] + version = "v4.0.0" + hash = "sha256-m/Enz2eiBx6tht0G04UV5tyiFyu6q1fTG5h5NbYQgW0=" + [mod."github.com/golang/freetype"] + version = "v0.0.0-20170609003504-e2365dfdc4a0" + hash = "sha256-AHAFBd20/tqxohkWyQkui2bUef9i1HWYgk9LOIFErvA=" [mod."github.com/golang/glog"] - version = "v1.1.2" - hash = "sha256-sxvf1xMel10gNBqyGIFGFcyjupdM+nVMKUQ/lMLh3Ak=" + version = "v1.2.0" + hash = "sha256-eCWkUlsWbHSjsuTw8HcNpj3KxT+QPvW5SSIv88hAsxA=" [mod."github.com/golang/groupcache"] version = "v0.0.0-20210331224755-41bb18bfe9da" hash = "sha256-7Gs7CS9gEYZkbu5P4hqPGBpeGZWC64VDwraSKFF+VR0=" @@ -227,45 +1224,180 @@ schema = 3 [mod."github.com/golang/snappy"] version = "v0.0.4" hash = "sha256-Umx+5xHAQCN/Gi4HbtMhnDCSPFAXSsjVbXd8n5LhjAA=" + [mod."github.com/golangci/check"] + version = "v0.0.0-20180506172741-cfe4005ccda2" + hash = "sha256-cPr+VH0PBTv/PE++lbXmEd74jv67OkgX8GuHB827E1A=" + [mod."github.com/golangci/dupl"] + version = "v0.0.0-20180902072040-3e9179ac440a" + hash = "sha256-9OSu/ZP/deZbJUfOEfo3Kc9Tvy4hJIwBPsFOH4t0rNw=" + [mod."github.com/golangci/go-misc"] + version = "v0.0.0-20220329215616-d24fe342adfe" + hash = "sha256-zxlz0lqJjAAExSKVmCiRMNzv6zcyXkG6b2olxuxGZl4=" + [mod."github.com/golangci/gofmt"] + version = "v0.0.0-20220901101216-f2edd75033f2" + hash = "sha256-k+rSHQPqZsnPeBwM7BvZzFTYoGmbchoVmIXD/+dmpV8=" + [mod."github.com/golangci/golangci-lint"] + version = "v1.52.0" + hash = "sha256-e13ZBOMCVmBwxpCSCk6dVC5JX88qPGfWKnHyKmbPIh0=" + [mod."github.com/golangci/lint-1"] + version = "v0.0.0-20191013205115-297bf364a8e0" + hash = "sha256-rOuNPlUFvXoonHgdgnoqreAxYBOhUfCQHnS+VdOO6pY=" + [mod."github.com/golangci/maligned"] + version = "v0.0.0-20180506175553-b1d89398deca" + hash = "sha256-eL8+V3gs5ScOoTwZ/9gXU0AruyHfk120HFqBe2qkghY=" + [mod."github.com/golangci/misspell"] + version = "v0.4.0" + hash = "sha256-HWE+MRbjpnKuAes88m4QF7RqJT/sejovh04KdFXkbkg=" + [mod."github.com/golangci/revgrep"] + version = "v0.0.0-20220804021717-745bb2f7c2e6" + hash = "sha256-R/Tmct9+33jEgn+QT/7v6brDZrLvFcxXQ4SeiRQBO5M=" + [mod."github.com/golangci/unconvert"] + version = "v0.0.0-20180507085042-28b1c447d1f4" + hash = "sha256-qrFJeGchSucba+8IYW0LNA+WZxe6PrvRcPNOOkx4se0=" + [mod."github.com/gomodule/redigo"] + version = "v1.7.1-0.20190724094224-574c33c3df38" + hash = "sha256-5hNHChYsk2Ghl0pDNSNOo0+uA0lbhaduhUHinnBF/OI=" + [mod."github.com/gonum/blas"] + version = "v0.0.0-20181208220705-f22b278b28ac" + hash = "sha256-pVCMv1HcVvtzh2PXsNT7kCYqMIuoCen+wUrctSQ8HLM=" + [mod."github.com/gonum/floats"] + version = "v0.0.0-20181209220543-c233463c7e82" + hash = "sha256-oKQyCzQpJdPeZtnOWFAZccimaWMZDv3dA+x9aVsEFZA=" + [mod."github.com/gonum/internal"] + version = "v0.0.0-20181124074243-f884aa714029" + hash = "sha256-SHdHo81dDqxXSXYgRARkvpDAE4ju0uOyyGk5EXVyqbY=" + [mod."github.com/gonum/lapack"] + version = "v0.0.0-20181123203213-e4cdc5a0bff9" + hash = "sha256-HzNpqrKpGKBFzTR+VmpCu8FZRWHECtVZU6O/usTVgkc=" + [mod."github.com/gonum/matrix"] + version = "v0.0.0-20181209220409-c518dec07be9" + hash = "sha256-9PhienY2LL4JIroa0QkWFOCv0b232Dklw/P6jOb6QwA=" [mod."github.com/google/btree"] version = "v1.1.2" hash = "sha256-K7V2obq3pLM71Mg0vhhHtZ+gtaubwXPQx3xcIyZDCjM=" + [mod."github.com/google/flatbuffers"] + version = "v2.0.8+incompatible" + hash = "sha256-10N9pnZB4J5IEaR8fTLH438DtDIeIAaxH86D1xtT+x4=" [mod."github.com/google/go-cmp"] version = "v0.6.0" hash = "sha256-qgra5jze4iPGP0JSTVeY5qV5AvEnEu39LYAuUCIkMtg=" + [mod."github.com/google/go-containerregistry"] + version = "v0.13.0" + hash = "sha256-37ifDdMIv4DVaccEzpNZGlxuaUXG/JHed8TBwdBjENA=" + [mod."github.com/google/go-pkcs11"] + version = "v0.2.1-0.20230907215043-c6f79328ddf9" + hash = "sha256-wHs3wEJ68rgYJaMGMKUN1G5Jv5WqHu9cdxVOdTT08K8=" + [mod."github.com/google/go-querystring"] + version = "v1.1.0" + hash = "sha256-itsKgKghuX26czU79cK6C2n+lc27jm5Dw1XbIRgwZJY=" + [mod."github.com/google/gofuzz"] + version = "v1.2.0" + hash = "sha256-T6Gz741l45L3F6Dt7fiAuQvQQg59Qtap3zG05M2cfqU=" + [mod."github.com/google/martian"] + version = "v2.1.0+incompatible" + hash = "sha256-N3tPu89U5MQqmtFIqSEfqEXNgnHf883TAmXKvA2N8KQ=" + [mod."github.com/google/martian/v3"] + version = "v3.3.2" + hash = "sha256-1Do4coCj31yfWlXMJZcQj7T2CBDyFlukwQwfLNYmT5k=" [mod."github.com/google/orderedcode"] version = "v0.0.1" hash = "sha256-KrExYovtUQrHGI1mPQf57jGw8soz7eWOC2xqEaV0uGk=" + [mod."github.com/google/pprof"] + version = "v0.0.0-20230228050547-1710fef4ab10" + hash = "sha256-ts+I48BUzyra4LFY+qc7I7uPliuMMAh1d1UfANDBqPo=" + [mod."github.com/google/renameio"] + version = "v0.1.0" + hash = "sha256-XQ5yI+LMfFQuK7+T3Xx5jiaRP7GmiQSsPkFmm1TpIs4=" [mod."github.com/google/s2a-go"] version = "v0.1.7" hash = "sha256-E+SX/3VmRI5qN7SbnRP4Tt+gQTq93pScpY9U2tTmIU0=" + [mod."github.com/google/safehtml"] + version = "v0.0.2" + hash = "sha256-wmFewpA4E8LV67+HnL/S9DngmsbmJTKmzU6dnw1qRXA=" [mod."github.com/google/uuid"] version = "v1.5.0" hash = "sha256-DasOte4xANR1VND5XEHKGhpGiyYq74TJmNrgWeIRX4U=" [mod."github.com/googleapis/enterprise-certificate-proxy"] version = "v0.3.2" hash = "sha256-wVuR3QC0mYFl5LNeKdRXdKdod7BGP5sv2h6VVib85v8=" + [mod."github.com/googleapis/gax-go"] + version = "v0.0.0-20161107002406-da06d194a00e" + hash = "sha256-9zdBANeCYIzyhSQfNUbDXi/ObK6zwwdGXzherROvz0A=" [mod."github.com/googleapis/gax-go/v2"] version = "v2.12.0" hash = "sha256-ZcXS+1B11UaJHf8D15N3ZCh00fiMUncpHd+eNRffLZ4=" + [mod."github.com/googleapis/go-type-adapters"] + version = "v1.0.0" + hash = "sha256-u3ajruRV/EN2E1WKet/zoe3zmRrAy4C5F2Dx8bpQwoc=" + [mod."github.com/googleapis/google-cloud-go-testing"] + version = "v0.0.0-20210719221736-1c9a4c676720" + hash = "sha256-OXmO31apo0w76GBYqV8rQLNn6IkQXTrlmhKqmDQm95E=" + [mod."github.com/gopherjs/gopherjs"] + version = "v0.0.0-20181017120253-0766667cb4d1" + hash = "sha256-AuXnjjoLbFZ85Oi8sldH117MBh+yCUB9HU5Y5syJ7Lg=" + [mod."github.com/gordonklaus/ineffassign"] + version = "v0.0.0-20230107090616-13ace0543b28" + hash = "sha256-QqCpKhHTQFSnCCj38deLUNU74jpKvqOiJFfNE4Ae/u8=" + [mod."github.com/gorilla/context"] + version = "v1.1.1" + hash = "sha256-pA7z/VCUIHuoP4wOeeJx+tLUFx7G8HQBjK6yfZCF5A4=" + [mod."github.com/gorilla/css"] + version = "v1.0.0" + hash = "sha256-Mmt/IqHpgrtWpbr/AKcJyf/USQTqEuv1HVivY4eHzoQ=" [mod."github.com/gorilla/handlers"] version = "v1.5.2" hash = "sha256-2WQeVCe7vQg+8MpNLMhOGsRdbrcWLpbtUhUX8mbiQrs=" [mod."github.com/gorilla/mux"] version = "v1.8.1" hash = "sha256-nDABvAhlYgxUW2N/brrep7NkQXoSGcHhA+XI4+tK0F0=" + [mod."github.com/gorilla/securecookie"] + version = "v1.1.1" + hash = "sha256-IBBYWfdOuXvQsb01DaA8tBizCfAE1J2KLXIn3W+NeJk=" [mod."github.com/gorilla/websocket"] version = "v1.5.0" hash = "sha256-EYVgkSEMo4HaVrsWKqnsYRp8SSS8gNf7t+Elva02Ofc=" + [mod."github.com/gostaticanalysis/analysisutil"] + version = "v0.7.1" + hash = "sha256-kyLDWIxSa6zcIUSNGwakXb8zISsGBk8fsjI+WYj7DNs=" + [mod."github.com/gostaticanalysis/comment"] + version = "v1.4.2" + hash = "sha256-aUcqaFw64P+JNSfpAX5UdqUG9V07j0DsBBUuM9thUy8=" + [mod."github.com/gostaticanalysis/forcetypeassert"] + version = "v0.1.0" + hash = "sha256-TzVAS0FVT0ozw0iAGqWMQSR6npY16sHLwEPp+WmbMsU=" + [mod."github.com/gostaticanalysis/nilerr"] + version = "v0.1.1" + hash = "sha256-3ZytvTZVHxnoH1sDdlvqvXk6gjUnYRCHr6oxaeiZ4Tc=" + [mod."github.com/gotestyourself/gotestyourself"] + version = "v2.2.0+incompatible" + hash = "sha256-BYTGCeD1GH0nUMxaP1ARTpfGk3vQroDNAgb3LYKhon4=" [mod."github.com/grpc-ecosystem/go-grpc-middleware"] version = "v1.4.0" hash = "sha256-0UymBjkg41C9MPqkBLz/ZY9WbimZrabpJk+8C/X63h8=" + [mod."github.com/grpc-ecosystem/go-grpc-prometheus"] + version = "v1.2.0" + hash = "sha256-XtdBJuUYTXEokPrUetjD6iEqxFTBgyrm1M0X7r+1Uys=" [mod."github.com/grpc-ecosystem/grpc-gateway"] version = "v1.16.0" hash = "sha256-wLymGic7wZ6fSiBYDAaGqnQ9Ste1fUWeqXeolZXCHvI=" + [mod."github.com/grpc-ecosystem/grpc-gateway/v2"] + version = "v2.11.3" + hash = "sha256-jnuNObVfKtdS/YZWNG17aRtKskG3gieSHGOBgyOcTmg=" [mod."github.com/gsterjov/go-libsecret"] version = "v0.0.0-20161001094733-a6f4afe4910c" hash = "sha256-Z5upjItPU9onq5t7VzhdQFp13lMJrSiE3gNRapuK6ic=" + [mod."github.com/guptarohit/asciigraph"] + version = "v0.5.5" + hash = "sha256-7sobelRCDY8mC5FYyGZmNsvUsEMxRulqPnUucNRN5J8=" + [mod."github.com/hashicorp/consul/api"] + version = "v1.25.1" + hash = "sha256-nbqKZqxZCSf6RVRyV8ED8IalSc1DXUBWfNEYlCncKZ4=" + [mod."github.com/hashicorp/consul/sdk"] + version = "v0.3.0" + hash = "sha256-lF47JPGfmeGjpuQw9VSNs2Mi+G7FQLKrrHteX3iXfpU=" + [mod."github.com/hashicorp/errwrap"] + version = "v1.1.0" + hash = "sha256-6lwuMQOfBq+McrViN3maJTIeh4f8jbEqvLy2c9FvvFw=" [mod."github.com/hashicorp/go-cleanhttp"] version = "v0.5.2" hash = "sha256-N9GOKYo7tK6XQUFhvhImtL7PZW/mr4C4Manx/yPVvcQ=" @@ -281,72 +1413,342 @@ schema = 3 [mod."github.com/hashicorp/go-metrics"] version = "v0.5.3" hash = "sha256-5jQftEvEhL88yWeVnu+IZKzV5p9osZcgFmwP1zlrjzY=" + [mod."github.com/hashicorp/go-msgpack"] + version = "v0.5.3" + hash = "sha256-2OUYjD/Jt12TFBrtH0wRqg+lzRljDxSIhk2CqBLUczo=" + [mod."github.com/hashicorp/go-multierror"] + version = "v1.1.1" + hash = "sha256-ANzPEUJIZIlToxR89Mn7Db73d9LGI51ssy7eNnUgmlA=" [mod."github.com/hashicorp/go-plugin"] version = "v1.5.2" hash = "sha256-bdBT9TyHUJkUogQZWj0waniVv/Qauy/iKEbegyK2HZA=" + [mod."github.com/hashicorp/go-retryablehttp"] + version = "v0.5.3" + hash = "sha256-VOrwoDMzGszP5zNXkyi79YHJwy6svg1bBicppHuNFQE=" + [mod."github.com/hashicorp/go-rootcerts"] + version = "v1.0.2" + hash = "sha256-prifkrFs+lawGTig3GwxddR0QM9E1+IpgZWCKoOnS5M=" [mod."github.com/hashicorp/go-safetemp"] version = "v1.0.0" hash = "sha256-g5i9m7FSRInQzZ4iRpIsoUu685AY7fppUwjhuZCezT8=" + [mod."github.com/hashicorp/go-sockaddr"] + version = "v1.0.0" + hash = "sha256-orG+SHVsp5lgNRCErmhMLABVFQ3ZWfYIJ/4LTFzlvao=" + [mod."github.com/hashicorp/go-syslog"] + version = "v1.0.0" + hash = "sha256-YRuq6oPMwAFVY7mvwpMDvZqGwNnb5CjBYyKI/x5mbCc=" + [mod."github.com/hashicorp/go-uuid"] + version = "v1.0.1" + hash = "sha256-s1wIvBu37z4U3qK9sdUR1CtbD39N6RwfX4HgDCpCa0s=" [mod."github.com/hashicorp/go-version"] version = "v1.6.0" hash = "sha256-UV0equpmW6BiJnp4W3TZlSJ+PTHuTA+CdOs2JTeHhjs=" + [mod."github.com/hashicorp/go.net"] + version = "v0.0.1" + hash = "sha256-JKal3E+wPO+Hk838opKV4HHKB4O72Xy+77ncXlLkWRk=" [mod."github.com/hashicorp/golang-lru"] version = "v1.0.2" hash = "sha256-yy+5botc6T5wXgOe2mfNXJP3wr+MkVlUZ2JBkmmrA48=" [mod."github.com/hashicorp/hcl"] version = "v1.0.0" hash = "sha256-xsRCmYyBfglMxeWUvTZqkaRLSW+V2FvNodEDjTGg1WA=" + [mod."github.com/hashicorp/logutils"] + version = "v1.0.0" + hash = "sha256-e8t8Dm8sp/PzKClN1TOmFcrTAWNh4mZHSW7cAjVx3Bw=" + [mod."github.com/hashicorp/mdns"] + version = "v1.0.0" + hash = "sha256-ravx4tklQG43OEjPiJn68iJM9ODZ6hgU0idFCEOiJGM=" + [mod."github.com/hashicorp/memberlist"] + version = "v0.1.3" + hash = "sha256-IsxqevYulPt+2VGtlq068Jyq1YfIk4Ohh9TgakIGxnc=" + [mod."github.com/hashicorp/serf"] + version = "v0.10.1" + hash = "sha256-kA+c1UDJV/bVH0w3TY1XbKMvxLF8Wi23mEj5joX01Kc=" [mod."github.com/hashicorp/yamux"] version = "v0.1.1" hash = "sha256-jr4ZFM3XHSwGoZcRcmmdGTq4IqxBTnimojIPDgK0USU=" [mod."github.com/hdevalence/ed25519consensus"] version = "v0.2.0" hash = "sha256-KTbeKMOT/HCJjDHqyciQjJPPgpNk6H0VyQCCbeGgs7Y=" + [mod."github.com/hexops/gotextdiff"] + version = "v1.0.3" + hash = "sha256-wVs5uJs2KHU1HnDCDdSe0vIgNZylvs8oNidDxwA3+O0=" + [mod."github.com/hpcloud/tail"] + version = "v1.0.0" + hash = "sha256-7ByBr/RcOwIsGPCiCUpfNwUSvU18QAY+HMnCJr8uU1w=" + [mod."github.com/huandu/go-assert"] + version = "v1.1.5" + hash = "sha256-XhiT+paU3cVnuvyr85j4BEzVGKEyseujHXy1HzYahQY=" [mod."github.com/huandu/skiplist"] version = "v1.2.0" hash = "sha256-/r4QP1SldMlhpkr1ZQFHImSYaeMZEtqBW7R53yN+JtQ=" + [mod."github.com/hudl/fargo"] + version = "v1.4.0" + hash = "sha256-FUScC+rOWQYbZWC+w9E8Y9//0Nf6Td1lhm8u78sK86I=" + [mod."github.com/hydrogen18/memlistener"] + version = "v1.0.0" + hash = "sha256-j399YIIhwEClTKV0X43PVQxIdFnHHthL6qDwjnXYHyE=" [mod."github.com/iancoleman/strcase"] version = "v0.3.0" hash = "sha256-lVOk4klrikSCUviR16qcyAr6eoIbniUSfsLFOE1ZLpk=" + [mod."github.com/ianlancetaylor/demangle"] + version = "v0.0.0-20200824232613-28f6c0f3b639" + hash = "sha256-A+Wg+8KOpMZfhAKyOFIK79fcdYuKHRp6cIC0J4QZWGc=" + [mod."github.com/imkira/go-interpol"] + version = "v1.1.0" + hash = "sha256-8NaipC19EEqREyLc0QZq9aDGz+SFOFyhgeyCK9wdEKA=" [mod."github.com/improbable-eng/grpc-web"] version = "v0.15.0" hash = "sha256-9oqKb5Y3hjleOFE2BczbEzLH6q2Jg7kUTP/M8Yk4Ne4=" [mod."github.com/inconshreveable/mousetrap"] version = "v1.1.0" hash = "sha256-XWlYH0c8IcxAwQTnIi6WYqq44nOKUylSWxWO/vi+8pE=" + [mod."github.com/influxdata/influxdb1-client"] + version = "v0.0.0-20200827194710-b269163b24ab" + hash = "sha256-yZaf6VOfkLypk1thVW0Q9n2UKhZFAtOvGO3MfgaRoV4=" + [mod."github.com/informalsystems/tm-load-test"] + version = "v1.3.0" + hash = "sha256-F1JrHLFdCd+Wd8Olwj94aqYQKCF2ix/z+yBd+dgSVzg=" + [mod."github.com/iris-contrib/blackfriday"] + version = "v2.0.0+incompatible" + hash = "sha256-NY57AtaJ7YT8B5kn2PgemqYH4mImIxrTqb1iqbb6cb4=" + [mod."github.com/iris-contrib/go.uuid"] + version = "v2.0.0+incompatible" + hash = "sha256-ZehOVx9WMWSBkrwJBQQrpieEzB/d2shz42wZBex7gFk=" + [mod."github.com/iris-contrib/httpexpect/v2"] + version = "v2.12.1" + hash = "sha256-A+OhqnjPIymSin/e3r+HfgKgP2MGdjBql3Z0c04sbdc=" + [mod."github.com/iris-contrib/i18n"] + version = "v0.0.0-20171121225848-987a633949d0" + hash = "sha256-Tu75HKzjXmMIi0iAAft5txLyByQE3ZnOQbvboB/Gze4=" + [mod."github.com/iris-contrib/jade"] + version = "v1.1.4" + hash = "sha256-5SahmCpAThOuGed1qEuj1UIOiR4xY5JE52c1Mp06J64=" + [mod."github.com/iris-contrib/schema"] + version = "v0.0.6" + hash = "sha256-2jk46kocpQGmswalwwFI5P8B4AHR1xkTnbPdtFa9VFo=" + [mod."github.com/jbenet/go-context"] + version = "v0.0.0-20150711004518-d14ea06fba99" + hash = "sha256-VANNCWNNpARH/ILQV9sCQsBWgyL2iFT+4AHZREpxIWE=" + [mod."github.com/jdxcode/netrc"] + version = "v0.0.0-20221124155335-4616370d1a84" + hash = "sha256-wZChpskR7cmzSgsngM885e+FU9FLkhL3qMf8lYiBUvk=" + [mod."github.com/jgautheron/goconst"] + version = "v1.5.1" + hash = "sha256-chBWxOy9V4pO3hMaeCoKwnQxIEYiSejUOD3QDBCpaoE=" + [mod."github.com/jhump/protoreflect"] + version = "v1.15.3" + hash = "sha256-enU5pgPhcXmQQQXQr7fcTxDC6A1V1qbFHWa5b9bMmwM=" + [mod."github.com/jingyugao/rowserrcheck"] + version = "v1.1.1" + hash = "sha256-VUF78T0baVeM+DAieZdi9hXSxllYelGphUwYGOitgtw=" + [mod."github.com/jinzhu/copier"] + version = "v0.3.5" + hash = "sha256-Z752BUyBsHzkp1c+a/3WpVctYj5TObGBKHK94afHorQ=" + [mod."github.com/jirfag/go-printf-func-name"] + version = "v0.0.0-20200119135958-7558a9eaa5af" + hash = "sha256-9i0U7WSs7MX+N4IdhKngWY2ng8vuR3RMr1T3SwPmSNY=" [mod."github.com/jmespath/go-jmespath"] version = "v0.4.0" hash = "sha256-xpT9g2qIXmPq7eeHUXHiDqJeQoHCudh44G/KCSFbcuo=" + [mod."github.com/jmespath/go-jmespath/internal/testify"] + version = "v1.5.1" + hash = "sha256-eOjXyGv7P1x+iO9rPrmAGvNj2JH5p36OgSiVyJv/hyI=" [mod."github.com/jmhodges/levigo"] version = "v1.0.0" hash = "sha256-xEd0mDBeq3eR/GYeXjoTVb2sPs8sTCosn5ayWkcgENI=" + [mod."github.com/jonboulle/clockwork"] + version = "v0.1.0" + hash = "sha256-dEV9aGzJRIrYfPpuJux3guJNvZGi+5dfseGurZqGHd8=" + [mod."github.com/josharian/intern"] + version = "v1.0.0" + hash = "sha256-LJR0QE2vOQ2/2shBbO5Yl8cVPq+NFrE3ers0vu9FRP0=" + [mod."github.com/jpillora/backoff"] + version = "v1.0.0" + hash = "sha256-uxHg68NN8hrwPCrPfLYYprZHf7dMyEoPoF46JFx0IHU=" + [mod."github.com/json-iterator/go"] + version = "v1.1.12" + hash = "sha256-To8A0h+lbfZ/6zM+2PpRpY3+L6725OPC66lffq6fUoM=" + [mod."github.com/jstemmer/go-junit-report"] + version = "v0.9.1" + hash = "sha256-fK6zLXQU8y+h+SqyeCUldA5OFPA/j0Wlbizk6AG60c4=" + [mod."github.com/jtolds/gls"] + version = "v4.20.0+incompatible" + hash = "sha256-Zu5naRjnwOYBzRv0CYhIZTizA0AajzOg7mJrL7Bo/cw=" + [mod."github.com/juju/errors"] + version = "v0.0.0-20181118221551-089d3ea4e4d5" + hash = "sha256-OR3sG/c6VRBUJXdIPl4JCpaP5bzArXv81PP9IMtR3xQ=" + [mod."github.com/juju/loggo"] + version = "v0.0.0-20180524022052-584905176618" + hash = "sha256-pL0ST0vpUJJ5Rgw7Cbf1R+e/kHspes6FcZIcL4oB8UM=" + [mod."github.com/juju/testing"] + version = "v0.0.0-20180920084828-472a3e8b2073" + hash = "sha256-hGusbwSHfnAai2J8nVdjbQB6wZCWd2XVqWrxCaZgkhc=" + [mod."github.com/julienschmidt/httprouter"] + version = "v1.3.0" + hash = "sha256-YVbnyFLVZX1mtqcwM1SStQdhcQsPHyi1ltpOrD3w2qg=" + [mod."github.com/julz/importas"] + version = "v0.1.0" + hash = "sha256-a3kUhwknXeIG4cFUm1zMS2NxqIR8BHyR3VUDHKVn1og=" + [mod."github.com/jung-kurt/gofpdf"] + version = "v1.0.3-0.20190309125859-24315acbbda5" + hash = "sha256-A+2EhBbfC3dM1Bdinpx/NmT2YwbwKwMfBHTYb9n7wkg=" + [mod."github.com/junk1tm/musttag"] + version = "v0.5.0" + hash = "sha256-UX4qaPq6hvvMmye+aoHGL0f6e5Nf3JAfFPdFjdU97s4=" + [mod."github.com/k0kubun/colorstring"] + version = "v0.0.0-20150214042306-9440f1994b88" + hash = "sha256-cmGwhftooSUXKypIpMV3nvcrmMusIJjtT5P4eZSfWkc=" + [mod."github.com/kataras/blocks"] + version = "v0.0.7" + hash = "sha256-sXTcBIPuifzEgqe8m0Oe45A19egRGY1C+ZndaKWxxuY=" + [mod."github.com/kataras/golog"] + version = "v0.1.8" + hash = "sha256-ntu8ZRt+bSEWTxtns2dvpDocE7aL+Z0V80GgdzmUX/k=" + [mod."github.com/kataras/iris/v12"] + version = "v12.2.0" + hash = "sha256-MsC1VN0IPuGbp5e1VM90yivThf7sQ63QGpTSccAy+yY=" + [mod."github.com/kataras/jwt"] + version = "v0.1.8" + hash = "sha256-3AKX8wmQ6RaRMAyhe1JirEl1P0ZiMNRJZ3D1yzBRuCU=" + [mod."github.com/kataras/neffos"] + version = "v0.0.21" + hash = "sha256-Gd3M1U+jK8zRv4Ah7P5aDMJJ8IqDMkXGdJjv+hL8FZY=" + [mod."github.com/kataras/pio"] + version = "v0.0.11" + hash = "sha256-EQdyRDSQpWSZX2Byr5TqO6moEV7r9fhTxnwpzpjlOxY=" + [mod."github.com/kataras/sitemap"] + version = "v0.0.6" + hash = "sha256-NmAX6wCT1Z5n44O5TId4iovDUxH/ukgLKEGmchAMS8Q=" + [mod."github.com/kataras/tunnel"] + version = "v0.0.4" + hash = "sha256-yhCeH7eM8F+BxOy/y5MyAI0F0ghfLFUB/5aemIBZM54=" + [mod."github.com/kevinburke/ssh_config"] + version = "v1.2.0" + hash = "sha256-Ta7ZOmyX8gG5tzWbY2oES70EJPfI90U7CIJS9EAce0s=" + [mod."github.com/kisielk/errcheck"] + version = "v1.6.3" + hash = "sha256-t5ValY4I3RzsomJP7mJjJSN9wU1HLQrajxpqmrri/oU=" + [mod."github.com/kisielk/gotool"] + version = "v1.0.0" + hash = "sha256-lsdQkue8gFz754PGqczUnvGiCQq87SruQtdrDdQVTpE=" + [mod."github.com/kkHAIKE/contextcheck"] + version = "v1.1.4" + hash = "sha256-lYGjXevAPZCSD7mVmC6shLpv62opHZpNtBUREDCWeT0=" + [mod."github.com/klauspost/asmfmt"] + version = "v1.3.2" + hash = "sha256-YxIVqPGsqxvOY0Qz4Jw5FuO9IbplCICjChosnHrSCgc=" [mod."github.com/klauspost/compress"] version = "v1.17.6" hash = "sha256-SU/joptkmHjvb/qUGyF2yy2uh/xZSJ2OQNeOlyrzxO0=" + [mod."github.com/klauspost/cpuid"] + version = "v1.2.1" + hash = "sha256-PZG2qUuB1LglFF7EG7Hy4N8sXQqOu5TW3esMnSHj4YA=" + [mod."github.com/klauspost/cpuid/v2"] + version = "v2.2.4" + hash = "sha256-EjWkW6py3nYOut+YY9waTI2OegIFQWuJRS1hZ+F+obU=" + [mod."github.com/klauspost/pgzip"] + version = "v1.2.5" + hash = "sha256-o2cjgEGdaw2ktMGtaeBvOjS/6H/q4xI3Ngcc8TWTxlQ=" + [mod."github.com/konsorten/go-windows-terminal-sequences"] + version = "v1.0.3" + hash = "sha256-9HojTXKv7b3HiEhYaKXDxraEfvU5vrg47FbCjTRpOvs=" + [mod."github.com/kr/fs"] + version = "v0.1.0" + hash = "sha256-+Cjz0rGmdNIV1QL4z8h7JAjHATa5pKndwSnD1M0J74c=" + [mod."github.com/kr/logfmt"] + version = "v0.0.0-20140226030751-b84e30acd515" + hash = "sha256-CePQbqWGtS8qP/Av9pkLiqZwH6RaZQff/s1l+1//jQo=" [mod."github.com/kr/pretty"] version = "v0.3.1" hash = "sha256-DlER7XM+xiaLjvebcIPiB12oVNjyZHuJHoRGITzzpKU=" + [mod."github.com/kr/pty"] + version = "v1.1.1" + hash = "sha256-AVeS+ivwNzIrgWQaLtsmO2f2MYGpxIVqdac/EzaYI1Q=" [mod."github.com/kr/text"] version = "v0.2.0" hash = "sha256-fadcWxZOORv44oak3jTxm6YcITcFxdGt4bpn869HxUE=" + [mod."github.com/kulti/thelper"] + version = "v0.6.3" + hash = "sha256-mONMDqWqU4+Iq1k6G3vzzIysr+cBZ/k+URjOx+YZocQ=" + [mod."github.com/kunwardeep/paralleltest"] + version = "v1.0.6" + hash = "sha256-N2fwgZmboHxR4nKcXbWFOIZ4yDx67gwffQmskLInCFY=" + [mod."github.com/kyoh86/exportloopref"] + version = "v0.1.11" + hash = "sha256-8zX5lYjvQO0BDeUj+Xf/YvQ5eDHo0NCgjoLnJ4x+GxE=" + [mod."github.com/labstack/echo/v4"] + version = "v4.10.0" + hash = "sha256-OasRg4L6BEBMJtGhJUUY07mdJh4SOXv5cJ1vvyoG4/U=" + [mod."github.com/labstack/gommon"] + version = "v0.4.0" + hash = "sha256-xISAIJEu2xh0hoWsORbgjnz3rDK3ft3hrvmxt0wfHVw=" + [mod."github.com/ldez/gomoddirectives"] + version = "v0.2.3" + hash = "sha256-huP1kJUh0FsQ8OuvcIvM4yztPfsZGeslV4B0qBoCas8=" + [mod."github.com/ldez/tagliatelle"] + version = "v0.4.0" + hash = "sha256-m3oe+o0BMPjOhHgNtNw3yO4OqtrhYFyUnJgmG+MvQl8=" + [mod."github.com/leodido/go-urn"] + version = "v1.2.4" + hash = "sha256-N2HO7ChScxI79KGvXI9LxoIlr+lkBNdDZP9OPGwPRK0=" + [mod."github.com/leonklingele/grouper"] + version = "v1.1.1" + hash = "sha256-FTqWzyerUmy70v8y7kk+Dq+5AS3D3njGJUVrOZSj6yE=" [mod."github.com/lib/pq"] version = "v1.10.7" hash = "sha256-YPUv1VBZNFVUjFxQKdYd0Djje6KYYE99Hz6FnTfrmMw=" [mod."github.com/libp2p/go-buffer-pool"] version = "v0.1.0" hash = "sha256-wQqGTtRWsfR9n0O/SXHVgECebbnNmHddxJIbG63OJBQ=" + [mod."github.com/lightstep/lightstep-tracer-common/golang/gogo"] + version = "v0.0.0-20190605223551-bc2310a04743" + hash = "sha256-Nb8mdhONwjpQusNOQRN+qGWKNcxEWI5vK6bGX21xDmM=" + [mod."github.com/lightstep/lightstep-tracer-go"] + version = "v0.18.1" + hash = "sha256-ckmJCf+x/Ad/ADm+nDbvgLKnkkEU/3qH1pT5XmgQKWA=" [mod."github.com/linxGnu/grocksdb"] version = "v1.8.12" hash = "sha256-1tlgs/JnopLI8eoWJlv9hP4jf0OTm1qMZTSg0jAkG7A=" [mod."github.com/lucasb-eyer/go-colorful"] version = "v1.2.0" hash = "sha256-Gg9dDJFCTaHrKHRR1SrJgZ8fWieJkybljybkI9x0gyE=" + [mod."github.com/lufeee/execinquery"] + version = "v1.2.1" + hash = "sha256-Hg+/0StXgoflSxwiw96IYhYybYy26o1QA66a5pMsswo=" + [mod."github.com/lufia/plan9stats"] + version = "v0.0.0-20211012122336-39d0f177ccd0" + hash = "sha256-thb+rkDx5IeWMgw5/5jgu5gZ+6RjJAUXeMgSkJHhRlA=" + [mod."github.com/lyft/protoc-gen-star/v2"] + version = "v2.0.3" + hash = "sha256-DJNUYxtqZ87imGzo1yEfWJhSbZ3Kzta1W3X+rGg/HDA=" + [mod."github.com/lyft/protoc-gen-validate"] + version = "v0.0.13" + hash = "sha256-JhFMmEaP1amtJJBLWFVqjjHeHuAHRP0qwLMMFX2b3FM=" [mod."github.com/magiconair/properties"] version = "v1.8.7" hash = "sha256-XQ2bnc2s7/IH3WxEO4GishZurMyKwEclZy1DXg+2xXc=" + [mod."github.com/mailgun/raymond/v2"] + version = "v2.0.48" + hash = "sha256-HC2vbTL9eCgk1m00h6Mg6W/pu6n/Y7Qr4MJuVQIX4v0=" + [mod."github.com/mailru/easyjson"] + version = "v0.7.7" + hash = "sha256-NVCz8MURpxgOjHXqxOZExqV4bnpHggpeAOyZDArjcy4=" [mod."github.com/manifoldco/promptui"] version = "v0.9.0" hash = "sha256-Fe2OPoyRExZejwtUBivKhfJAJW7o9b1eyYpgDlWQ1No=" + [mod."github.com/maratori/testableexamples"] + version = "v1.0.0" + hash = "sha256-u5DXexMhqJsB5iy3HWifpkIn+DUYynEjyDyou2BnHxY=" + [mod."github.com/maratori/testpackage"] + version = "v1.1.1" + hash = "sha256-ste+0nRmwQ/2W244WsRC40VsKG2TfTo3upGhT94yb0k=" + [mod."github.com/matoous/godox"] + version = "v0.0.0-20230222163458-006bad1f9d26" + hash = "sha256-x3YnDb9Exqyqr1T7heIYpP8tIwzIb57kl+RgIRRjmf0=" + [mod."github.com/matryer/try"] + version = "v0.0.0-20161228173917-9ac251b645a2" + hash = "sha256-CZa1mCNAroBhY8NxUk7HeR3E2sYVhvp63aTcQW/F1qU=" [mod."github.com/mattn/go-colorable"] version = "v0.1.13" hash = "sha256-qb3Qbo0CELGRIzvw7NVM1g/aayaz4Tguppk9MD2/OI8=" @@ -356,84 +1758,426 @@ schema = 3 [mod."github.com/mattn/go-runewidth"] version = "v0.0.14" hash = "sha256-O3QdxqAcJgQ+HL1v8oBA4iKBwJ2AlDN+F464027hWMU=" + [mod."github.com/mattn/go-sqlite3"] + version = "v1.14.5" + hash = "sha256-FwJwxsVYETq+jvLarO+5h88HZ4RiM6UC8I4dqkmwi4E=" + [mod."github.com/mattn/goveralls"] + version = "v0.0.2" + hash = "sha256-l2rntbH5TtEUuv1aOXmOJ099UCUpQp9reCQVtmdszo0=" + [mod."github.com/matttproud/golang_protobuf_extensions"] + version = "v1.0.4" + hash = "sha256-uovu7OycdeZ2oYQ7FhVxLey5ZX3T0FzShaRldndyGvc=" + [mod."github.com/matttproud/golang_protobuf_extensions/v2"] + version = "v2.0.0" + hash = "sha256-gcAN8jKL0ve8pcgDkxr2Lc8CUBG39ri9QAp0zrzchEs=" + [mod."github.com/mbilski/exhaustivestruct"] + version = "v1.2.0" + hash = "sha256-9bWt9lFgzQsdbT0smDbKTeD6uQYgs/dBbXbkWuXUf6c=" [mod."github.com/mdp/qrterminal/v3"] version = "v3.2.0" hash = "sha256-2ZcpLFu6P+a3qHH32uiFKUwzgza1NF0Bmayl41GQCEI=" + [mod."github.com/mediocregopher/mediocre-go-lib"] + version = "v0.0.0-20181029021733-cb65787f37ed" + hash = "sha256-Mm0GKoLdfrjXE6sK7dTnOMmZraFkAlQL2B3K7szB5lE=" + [mod."github.com/mediocregopher/radix/v3"] + version = "v3.8.1" + hash = "sha256-Y6sKbNut7Nzf5SMJvMCL6T9IiOIY4zUUVpDfAdwDJZI=" + [mod."github.com/mgechev/revive"] + version = "v1.3.1" + hash = "sha256-PSr3UxlfxkpgNVtQkYfgExvkaJPan/HCWSktO+kxq3I=" + [mod."github.com/microcosm-cc/bluemonday"] + version = "v1.0.23" + hash = "sha256-weQ5igDpNJY8MTYytha/xOmT2PDbF8Zj3Zm2vGmZO7A=" + [mod."github.com/miekg/dns"] + version = "v1.1.43" + hash = "sha256-FWtLHGlkx7WhMFB5qmO+NSHg9S5WuvZ3PGTQSij6Nhw=" + [mod."github.com/minio/asm2plan9s"] + version = "v0.0.0-20200509001527-cdd76441f9d8" + hash = "sha256-b7krSCSjria+MNffLmH2D0u7cK2DamSkZ8dj928sw0Q=" + [mod."github.com/minio/c2goasm"] + version = "v0.0.0-20190812172519-36a3d3bbc4f3" + hash = "sha256-hRcCFqIOQ76+XB9qMQTwGHIZ/4q1mlYnSvzBP/w/CVs=" [mod."github.com/minio/highwayhash"] version = "v1.0.2" hash = "sha256-UeHeepKtToyA5e/w3KdmpbCn+4medesZG0cAcU6P2cY=" + [mod."github.com/mitchellh/cli"] + version = "v1.0.0" + hash = "sha256-4nG7AhRcjTRCwUCdnaNaFrAKDxEEoiihaCA4lk+uM8U=" [mod."github.com/mitchellh/go-homedir"] version = "v1.1.0" hash = "sha256-oduBKXHAQG8X6aqLEpqZHs5DOKe84u6WkBwi4W6cv3k=" [mod."github.com/mitchellh/go-testing-interface"] version = "v1.14.1" hash = "sha256-TMGi38D13BEVN5cpeKDzKRIgLclm4ErOG+JEyqJrN/c=" + [mod."github.com/mitchellh/go-wordwrap"] + version = "v1.0.1" + hash = "sha256-fiD7kh5037BjA0vW6A2El0XArkK+4S5iTBjJB43BNYo=" + [mod."github.com/mitchellh/gox"] + version = "v0.4.0" + hash = "sha256-GV3LYxzJt8YVbnSac2orlj2QR3MX/YIDrLkSkPhsjuA=" + [mod."github.com/mitchellh/iochan"] + version = "v1.0.0" + hash = "sha256-b5Tp7cw/e8mL++IjsebbmKWXtb9Hrzu4Fc6M4tZKFhU=" [mod."github.com/mitchellh/mapstructure"] version = "v1.5.0" hash = "sha256-ztVhGQXs67MF8UadVvG72G3ly0ypQW0IRDdOOkjYwoE=" + [mod."github.com/moby/term"] + version = "v0.0.0-20221205130635-1aeaba878587" + hash = "sha256-wX2ftzjEHzltzN68CsYVXMiaLPNU7V2phVyyPKv3mn8=" + [mod."github.com/modern-go/concurrent"] + version = "v0.0.0-20180306012644-bacd9c7ef1dd" + hash = "sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo=" + [mod."github.com/modern-go/reflect2"] + version = "v1.0.2" + hash = "sha256-+W9EIW7okXIXjWEgOaMh58eLvBZ7OshW2EhaIpNLSBU=" + [mod."github.com/moricho/tparallel"] + version = "v0.3.0" + hash = "sha256-zsGL6VWE4oFtRSaAGh8rjkox8W+MaTpDIFz0Jwm0yWk=" + [mod."github.com/morikuni/aec"] + version = "v1.0.0" + hash = "sha256-5zYgLeGr3K+uhGKlN3xv0PO67V+2Zw+cezjzNCmAWOE=" + [mod."github.com/moul/http2curl"] + version = "v1.0.0" + hash = "sha256-1ZP4V71g1K3oTvz5nGWUBD5h84hXga/RUQwWTpSnphM=" [mod."github.com/mtibben/percent"] version = "v0.2.1" hash = "sha256-Zj1lpCP6mKQ0UUTMs2By4LC414ou+iJzKkK+eBHfEcc=" [mod."github.com/muesli/termenv"] version = "v0.15.2" hash = "sha256-Eum/SpyytcNIchANPkG4bYGBgcezLgej7j/+6IhqoMU=" + [mod."github.com/mwitkow/go-conntrack"] + version = "v0.0.0-20190716064945-2f068394615f" + hash = "sha256-h6tgygomf/oVKMa2MO8sPLUD3CxK81z5q/roKYKvsno=" + [mod."github.com/mwitkow/grpc-proxy"] + version = "v0.0.0-20181017164139-0f1106ef9c76" + hash = "sha256-c6fjs1u9kscjyZWGycsJJUsasaA1hCIeXyT3BtO8B0U=" + [mod."github.com/nakabonne/nestif"] + version = "v0.3.1" + hash = "sha256-wU/KvbZ1MWMW0a4KWSk1h+xYKI6RkJAIFDPLQMce6dc=" + [mod."github.com/nats-io/jwt"] + version = "v0.3.2" + hash = "sha256-JFC1U3Oq+pli+P2Ot6F2Yoe+GFYbiUDYuvPoJFtlvnY=" + [mod."github.com/nats-io/jwt/v2"] + version = "v2.3.0" + hash = "sha256-YRDcFReWIxynz7rQayxjAszrePpihB0HzvRY9ZxGF9Y=" + [mod."github.com/nats-io/nats-server/v2"] + version = "v2.8.4" + hash = "sha256-rSjdhZvQOig18RSQl4s7IOkNV0k7JRMfMMyKAsFJFf4=" + [mod."github.com/nats-io/nats.go"] + version = "v1.31.0" + hash = "sha256-n8l5DIuDqZjrDVXK2deLOuoqZySzSrSbWaVxWl/BERQ=" + [mod."github.com/nats-io/nkeys"] + version = "v0.4.6" + hash = "sha256-Sgj4+akOs/3fnpP0YDoRY9WwSk4uwtIPyPilutDXOlE=" + [mod."github.com/nats-io/nuid"] + version = "v1.0.1" + hash = "sha256-7wddxVz3hnFg/Pf+61+MtQJJL/l8EaC8brHoNsmD64c=" + [mod."github.com/nbutton23/zxcvbn-go"] + version = "v0.0.0-20210217022336-fa2cb2858354" + hash = "sha256-itcpdpUbcbdekFMA8Xa9HCncIKCnUTKHC2bmS4Evzgg=" + [mod."github.com/niemeyer/pretty"] + version = "v0.0.0-20200227124842-a10e7caefd8e" + hash = "sha256-m2D7hWZrDst0rb91lmjSuNrzBQbmQ0Oe2UOp3wn8qso=" + [mod."github.com/nishanths/exhaustive"] + version = "v0.9.5" + hash = "sha256-JYYa65bj4Mf5ZYKoTm9A+FftS6Wa69IuSXc/UGfEPDI=" + [mod."github.com/nishanths/predeclared"] + version = "v0.2.2" + hash = "sha256-cmCD0LtDqvhnthh8TPAwe5D63OwIzUEpDm4J6AeJYMI=" + [mod."github.com/nunnatsa/ginkgolinter"] + version = "v0.9.0" + hash = "sha256-4KDbu07GGW1DOWijRtcCBBQ+Kg4ISN/pMy482BpNKmA=" + [mod."github.com/nxadm/tail"] + version = "v1.4.8" + hash = "sha256-JP3RZVZLFhaBZ2VdF/fbyMPMLqrPZDjP98f1ey2OePo=" [mod."github.com/oasisprotocol/curve25519-voi"] version = "v0.0.0-20230904125328-1f23a7beb09a" hash = "sha256-N5MMNn4rytO3ObXVXoY34Sf7AGPkw2dTPkXjigjozls=" + [mod."github.com/oklog/oklog"] + version = "v0.3.2" + hash = "sha256-qlnPX0uYC0pIA44MvacLIDxEcl/n4KPoIHMFmCWkurY=" [mod."github.com/oklog/run"] version = "v1.1.0" hash = "sha256-U4IS0keJa4BSBSeEBqtIV1Zg6N4b0zFiKfzN9ua4pWQ=" + [mod."github.com/oklog/ulid"] + version = "v1.3.1" + hash = "sha256-LNn883rYNiaoY9sGEPIzlMRx5UwGThdYTjXqfzeGc9k=" + [mod."github.com/olekukonko/tablewriter"] + version = "v0.0.5" + hash = "sha256-/5i70IkH/qSW5KjGzv8aQNKh9tHoz98tqtL0K2DMFn4=" + [mod."github.com/onsi/ginkgo"] + version = "v1.14.0" + hash = "sha256-Vv2tuMhqoNc76LJkV79SUQWTtFoEXnHj11hW4gSTr0Y=" + [mod."github.com/onsi/ginkgo/v2"] + version = "v2.7.0" + hash = "sha256-BKqQKCsPA73FaQwYpAY+QsWFHIncrG5jgRhC2IiNmCk=" + [mod."github.com/onsi/gomega"] + version = "v1.26.0" + hash = "sha256-B18jsoJHK/oE+wudT0dOsUb41s5+ZIAu/ZBzQ5djOLE=" + [mod."github.com/op/go-logging"] + version = "v0.0.0-20160315200505-970db520ece7" + hash = "sha256-kk1wY0YgUzB7OvV0LzX/Dak5243/TJt3+OEAWrpQ9rI=" + [mod."github.com/opencontainers/go-digest"] + version = "v1.0.0" + hash = "sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ=" + [mod."github.com/opencontainers/image-spec"] + version = "v1.1.0-rc2" + hash = "sha256-833S8D86IumLRpfrKBzpZCtLsTEnGBWbI3dTYd6BdFg=" + [mod."github.com/opencontainers/runc"] + version = "v1.1.3" + hash = "sha256-yXSZSW/12+JL0n3ss0CuwZITAkuoLn1+jHYP9wjbtlg=" + [mod."github.com/opentracing-contrib/go-observer"] + version = "v0.0.0-20170622124052-a52f23424492" + hash = "sha256-Yx4crdNKvA+ojqv5+JgMFjunrqg7dULrXwNuUVEh/+A=" + [mod."github.com/opentracing/basictracer-go"] + version = "v1.0.0" + hash = "sha256-QLEXYXQGg5It+zp8o5fcOIrvF8i/lDOLxJ6sqFUySUM=" + [mod."github.com/opentracing/opentracing-go"] + version = "v1.2.0" + hash = "sha256-kKTKFGXOsCF6QdVzI++GgaRzv2W+kWq5uDXOJChvLxM=" + [mod."github.com/openzipkin-contrib/zipkin-go-opentracing"] + version = "v0.4.5" + hash = "sha256-+OTH7Ih9TSHjpQ0qbLcEEG1SPnpyQpiNSOwEXkHpu1U=" + [mod."github.com/openzipkin/zipkin-go"] + version = "v0.2.5" + hash = "sha256-zJ23gBm9RWjL8SH42NJew54HxVHvR0ZutaGPN4CNcJo=" + [mod."github.com/ory/dockertest"] + version = "v3.3.5+incompatible" + hash = "sha256-yHhtiBDE7oUNRMx2NeufHaYscadHk3gaZIZqgSgw8jk=" + [mod."github.com/pact-foundation/pact-go"] + version = "v1.0.4" + hash = "sha256-4w92Zo53qmhuIxTmnfo9llSTPvkJsU5mRLnfit/lReg=" + [mod."github.com/pascaldekloe/goe"] + version = "v0.1.0" + hash = "sha256-2KUjqrEC/BwkTZRxImazcI/C3H7QmXfNrlt8slwdDbc=" + [mod."github.com/pborman/uuid"] + version = "v1.2.0" + hash = "sha256-zz0hvDdrajoUaOCXvI/2EIGGoWQa0QlCyFV0jqU3JDg=" + [mod."github.com/pelletier/go-toml"] + version = "v1.2.0" + hash = "sha256-Yt9MGTbIaU/1FhE7SO5UCQbTLxe+2vsypTdf38i3kFY=" [mod."github.com/pelletier/go-toml/v2"] version = "v2.1.1" hash = "sha256-BQtflYQ8Dt7FL/yFI9OnxwvsRk0oEO37ZXuGXFveVpo=" + [mod."github.com/performancecopilot/speed"] + version = "v3.0.0+incompatible" + hash = "sha256-epw3iYvcfLf4cbsH90B1lKOUVFFsp+T72XThsLWodZM=" + [mod."github.com/performancecopilot/speed/v4"] + version = "v4.0.0" + hash = "sha256-QAIkVIxEWdzfdWODeAG/X+CmQoHCP7KxHo2NFq8g7n4=" [mod."github.com/petermattis/goid"] version = "v0.0.0-20231207134359-e60b3f734c67" hash = "sha256-73DbyhUTwYhqmvbcI96CNblTrfl6uz9OvM6z/h8j5TM=" + [mod."github.com/phpdave11/gofpdf"] + version = "v1.4.2" + hash = "sha256-r+8O1xRD7pd0cIXQyvF2pnEprCesuBTtP+OWslnV2rE=" + [mod."github.com/phpdave11/gofpdi"] + version = "v1.0.13" + hash = "sha256-2CZm3TZCmUQq7Z6ENq3q5QfWhM+gx+1h7Q6RJuZQKAc=" + [mod."github.com/pierrec/lz4"] + version = "v2.0.5+incompatible" + hash = "sha256-R2UoyN7wUKVbYMPwH7DL8mIJIMzx/cOndvklKSjbQ6o=" + [mod."github.com/pierrec/lz4/v4"] + version = "v4.1.15" + hash = "sha256-OJCDsZuNUxCLrNRZmnpRpo5clcaasPiUdgWtoVxiA1Y=" + [mod."github.com/pingcap/errors"] + version = "v0.11.4" + hash = "sha256-9rHewclIZPLFniKSrTwSEGWC1R2dWzfMUV4JUsFYZgo=" + [mod."github.com/pjbgf/sha1cd"] + version = "v0.3.0" + hash = "sha256-kX9BdLh2dxtGNaDvc24NORO+C0AZ7JzbrXrtecCdB7w=" + [mod."github.com/pkg/browser"] + version = "v0.0.0-20210911075715-681adbf594b8" + hash = "sha256-JZhcXaILA6QFOYnVdiHbKQuKABQNAE0VhMWZXsZngLQ=" + [mod."github.com/pkg/diff"] + version = "v0.0.0-20210226163009-20ebb0f2a09e" + hash = "sha256-0aP4CtvBp9lmxoIvKq6mrOyQidLubH1bG92RD/n7bbw=" [mod."github.com/pkg/errors"] version = "v0.9.1" hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=" + [mod."github.com/pkg/profile"] + version = "v1.7.0" + hash = "sha256-wd8L8WiPoojo/oVUshgiJdM/k367LL1XO5BL5u1L2UU=" + [mod."github.com/pkg/sftp"] + version = "v1.13.6" + hash = "sha256-x1dTv4M1hRc0wsbTe4wOCM8jdH/GWzI8ls5lm92nZVg=" [mod."github.com/pmezard/go-difflib"] version = "v1.0.1-0.20181226105442-5d4384ee4fb2" hash = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=" + [mod."github.com/polyfloyd/go-errorlint"] + version = "v1.4.5" + hash = "sha256-BU+3sLUGBCFA1JYFxTEyIan+iWB7Y7SaMFVomfNObMg=" + [mod."github.com/posener/complete"] + version = "v1.1.1" + hash = "sha256-heyPMSBzVlx7ZKgTyzl/xmUfZw3EZCcvGFGrRMIbIr8=" + [mod."github.com/power-devops/perfstat"] + version = "v0.0.0-20210106213030-5aafc221ea8c" + hash = "sha256-ywykDYuqcMt0TvZOz1l9Z6Z2JMTYQw8cP2fT8AtpmX4=" [mod."github.com/prometheus/client_golang"] version = "v1.18.0" hash = "sha256-kuC6WUg2j7A+9qnSp5VZSYo+oltgLvj/70TpqlCJIdE=" [mod."github.com/prometheus/client_model"] - version = "v0.5.0" - hash = "sha256-/sXlngf8AoEIeLIiaLg6Y7uYPVq7tI0qnLt0mUyKid4=" + version = "v0.6.0" + hash = "sha256-TAD0mm7msYHo99yoNijeYzlDD0i1Vg3uTetpkDUWQo8=" [mod."github.com/prometheus/common"] version = "v0.47.0" hash = "sha256-zAfgbOSycgChcWT8x8oo5k1tq/y6Oay3gLdUEkt0NYk=" [mod."github.com/prometheus/procfs"] version = "v0.12.0" hash = "sha256-Y4ZZmxIpVCO67zN3pGwSk2TcI88zvmGJkgwq9DRTwFw=" + [mod."github.com/prometheus/tsdb"] + version = "v0.7.1" + hash = "sha256-BPz7YJbfMZgeR+u9YaeWeipVzHIS73EdgXD7VSJSLbA=" + [mod."github.com/quasilyte/go-ruleguard"] + version = "v0.4.0" + hash = "sha256-cwJVGlP9S9hN5akjA0So35IgnzVt4ZyB9aydpsDU8NE=" + [mod."github.com/quasilyte/gogrep"] + version = "v0.5.0" + hash = "sha256-3HoBPyxyOGsyZvdn4y4xS0EsA90J1CLIGGL2hSbcaUg=" + [mod."github.com/quasilyte/regex/syntax"] + version = "v0.0.0-20210819130434-b3f0c404a727" + hash = "sha256-D+A74vzRKIA88MsxB8QJLlXJlkUpzKNrEt/P18GQtgA=" + [mod."github.com/quasilyte/stdinfo"] + version = "v0.0.0-20220114132959-f7386bf02567" + hash = "sha256-w/ksgwSrJ6HDivciSCfk25iJXwAqKnCAsYVN9srmAss=" + [mod."github.com/rabbitmq/amqp091-go"] + version = "v1.2.0" + hash = "sha256-Fj8jNxSsxrq+fIlmRRy4QJYL9gByMkKdSfnuONF6RXk=" [mod."github.com/rcrowley/go-metrics"] version = "v0.0.0-20201227073835-cf1acfcdf475" hash = "sha256-10ytHQ1SpMKYTiKuOPdEMuOVa8HVvv9ryYSIF9BHEBI=" [mod."github.com/rivo/uniseg"] version = "v0.2.0" hash = "sha256-GLj0jiGrT03Ept4V6FXCN1yeZ/b6PpS3MEXK6rYQ8Eg=" + [mod."github.com/rogpeppe/fastuuid"] + version = "v1.2.0" + hash = "sha256-yDnHsLw8KF4zfbJska1igIo4IbVpGDq+vH3+YV5jCgk=" [mod."github.com/rogpeppe/go-internal"] version = "v1.12.0" hash = "sha256-qvDNCe3l84/LgrA8X4O15e1FeDcazyX91m9LmXGXX6M=" [mod."github.com/rs/cors"] version = "v1.8.3" hash = "sha256-VgVB4HKAhPSjNg96mIEUN1bt5ZQng8Fi3ZABy3CDWQE=" + [mod."github.com/rs/xid"] + version = "v1.5.0" + hash = "sha256-u0QLm2YFMJqEjUhpWcLwfoS9lNHUxc2A79MObsqVbVU=" [mod."github.com/rs/zerolog"] version = "v1.32.0" hash = "sha256-9dZjtsES+wLp1cFiSVMuEUbdeXVFcgT0dgg5ACZkILk=" + [mod."github.com/russross/blackfriday"] + version = "v1.5.2" + hash = "sha256-7MjJB7KZoNFTBo5Qzc3LL9QKrzWf9keqt5lh7tl360s=" + [mod."github.com/russross/blackfriday/v2"] + version = "v2.1.0" + hash = "sha256-R+84l1si8az5yDqd5CYcFrTyNZ1eSYlpXKq6nFt4OTQ=" + [mod."github.com/ruudk/golang-pdf417"] + version = "v0.0.0-20201230142125-a7e3863a1245" + hash = "sha256-hilCuluafCl0QDRoCHRpGUnmPffWh8ne0seUhKYH+As=" + [mod."github.com/ryancurrah/gomodguard"] + version = "v1.3.0" + hash = "sha256-h6qoaRRDnav30YdGyF2Hz4Yz73b1/8iKSXJaFB4jYv4=" + [mod."github.com/ryanrolds/sqlclosecheck"] + version = "v0.4.0" + hash = "sha256-EqkeF1LXUyIERoGSotugdN15jLBBF+ZyT99kEFFSmdY=" + [mod."github.com/ryanuber/columnize"] + version = "v2.1.0+incompatible" + hash = "sha256-5ion0we/ruidQwfcQxteI96dXOvmRNWY+4TMsJ6CMlU=" + [mod."github.com/sagikazarmark/crypt"] + version = "v0.17.0" + hash = "sha256-Z1n82RQt3zmqqwvoLnlHZUrTkYEzv/G9dt5025Msgkg=" [mod."github.com/sagikazarmark/locafero"] version = "v0.4.0" hash = "sha256-7I1Oatc7GAaHgAqBFO6Tv4IbzFiYeU9bJAfJhXuWaXk=" [mod."github.com/sagikazarmark/slog-shim"] version = "v0.1.0" hash = "sha256-F92BQXXmn3mCwu3mBaGh+joTRItQDSDhsjU6SofkYdA=" + [mod."github.com/samuel/go-zookeeper"] + version = "v0.0.0-20190923202752-2cc03de413da" + hash = "sha256-/UFD4nSHZIIHqKUVEEBuGrvFTusNzl+H72lig8fJ4oc=" + [mod."github.com/sanity-io/litter"] + version = "v1.5.5" + hash = "sha256-D1oP7mL4+sFaMU1S1WBmuwWYPMmr4ahi46SD4hPl/+0=" + [mod."github.com/sanposhiho/wastedassign/v2"] + version = "v2.0.7" + hash = "sha256-T52vdTjjQFoyuHN2funFMNcJlkdDcDygOyB4txFINlg=" [mod."github.com/sasha-s/go-deadlock"] version = "v0.3.1" hash = "sha256-2CBEi9/iN/OMt7wEIG+hRjgDH6CRWIgibGGGy1dQ78I=" + [mod."github.com/sashamelentyev/interfacebloat"] + version = "v1.1.0" + hash = "sha256-GK7SUiVnOUF7uCqb9uxhII6g8Tr0G7GSLhj1rVjeQA8=" + [mod."github.com/sashamelentyev/usestdlibvars"] + version = "v1.23.0" + hash = "sha256-Ehgl1zzoM+Vpy7jak28WfZGRfMuuDWxgrd26vYfm710=" + [mod."github.com/satori/go.uuid"] + version = "v1.2.0" + hash = "sha256-y/lSGbnZa7mYJCs30a3LTyjfCFQSaYp8GbVR8dwtmsg=" + [mod."github.com/schollz/closestmatch"] + version = "v2.1.0+incompatible" + hash = "sha256-SpWqGfqlMkZPQ6TSf7NTaYMbQllBaBgPM8oxTBOTn7w=" + [mod."github.com/sclevine/agouti"] + version = "v3.0.0+incompatible" + hash = "sha256-q4DArQv1hxxBjLyhMjEsY5kZz1WudZzUIBhXCE8/Urs=" + [mod."github.com/sean-/seed"] + version = "v0.0.0-20170313163322-e2103e2c3529" + hash = "sha256-RQQTjvf8Y91jP5FGOyEnGMFw7zCrcSnUU4eH2CXKkT4=" + [mod."github.com/securego/gosec/v2"] + version = "v2.15.0" + hash = "sha256-QorTq9UIczsxCl2eYrwVfaBnHjdUbsbfQ2M4YpXneEw=" + [mod."github.com/sergi/go-diff"] + version = "v1.2.0" + hash = "sha256-d2higuBRee4ylRuCpPQV5+g0XK5yNQgDpudNor0qD2o=" + [mod."github.com/shazow/go-diff"] + version = "v0.0.0-20160112020656-b6b7b6733b8c" + hash = "sha256-+a0x0L96MzUJMyQ2R3uEtpfBlHwHgPAFOxdJkhhLuCQ=" + [mod."github.com/shirou/gopsutil/v3"] + version = "v3.23.2" + hash = "sha256-x1po41WD2KaejHzemrZGzrIga2ArMheXbt4KmilHPXU=" + [mod."github.com/shurcooL/sanitized_anchor_name"] + version = "v1.0.0" + hash = "sha256-DtFSzeLmD1fAl103ncgwab7Vv2F0aulsA+gbkq24ab8=" + [mod."github.com/sirupsen/logrus"] + version = "v1.9.0" + hash = "sha256-xOwGFsYGIxNiurS8Zue8mhlFK/G7U1LVFFrv4vcr1GM=" + [mod."github.com/sivchari/containedctx"] + version = "v1.0.2" + hash = "sha256-hxqTtn5sy3VPe2FHYEYhWT7q0ViSv26Khm8Ui42gtIQ=" + [mod."github.com/sivchari/nosnakecase"] + version = "v1.7.0" + hash = "sha256-oShj2wqZeoyYEzfODGFa0W3XDb1y5AWF7ApQNWH/Slo=" + [mod."github.com/sivchari/tenv"] + version = "v1.7.1" + hash = "sha256-zdEumXxEVL/NuNY4OnpGpY8I9rYcflfUS9G5Daqw/YY=" + [mod."github.com/skeema/knownhosts"] + version = "v1.2.1" + hash = "sha256-u0jB6ahTdGa+SvcIvPNRLnbSHvgmW9X/ThRq0nWQrJs=" + [mod."github.com/smartystreets/assertions"] + version = "v0.0.0-20180927180507-b2de0cb4f26d" + hash = "sha256-PoE+VQEnzJogI/mDBJ6dTCCR217nFjHfYWXQt9Vr9MQ=" + [mod."github.com/smartystreets/goconvey"] + version = "v1.6.4" + hash = "sha256-gDEvwEBgCVYi6daVRlQ2DUXFFlpybM1h4HyvvHphmM4=" + [mod."github.com/snikch/goodman"] + version = "v0.0.0-20171125024755-10e37e294daa" + hash = "sha256-dP8m+sKVf4vpVxbcbYRTIMVpbgZfnoxljSmdu7y5xNw=" + [mod."github.com/soheilhy/cmux"] + version = "v0.1.4" + hash = "sha256-EGyOVbQFq4k+A2M61ZMZ5aAM8uwOPLOcp3ynhswz47g=" + [mod."github.com/sonatard/noctx"] + version = "v0.0.2" + hash = "sha256-iBA6iiOewpYHQ6XqcdszL1WDosr+eJl4rM0IFZZOKGc=" + [mod."github.com/sony/gobreaker"] + version = "v0.4.1" + hash = "sha256-ABy1A/HYvhLjGdAaVBpSHEhn/1yJa3lSuqAJPipdWUU=" [mod."github.com/sourcegraph/conc"] version = "v0.3.0" hash = "sha256-mIdMs9MLAOBKf3/0quf1iI3v8uNWydy7ae5MFa+F2Ko=" + [mod."github.com/sourcegraph/go-diff"] + version = "v0.7.0" + hash = "sha256-4M/73yjX3tH6yLtiy2Pmqbyf/X6986BR+jWUw/a+fqI=" + [mod."github.com/spaolacci/murmur3"] + version = "v1.1.0" + hash = "sha256-RWD4PPrlAsZZ8Xy356MBxpj+/NZI7w2XOU14Ob7/Y9M=" [mod."github.com/spf13/afero"] version = "v1.11.0" hash = "sha256-+rV3cDZr13N8E0rJ7iHmwsKYKH+EhV+IXBut+JbBiIE=" @@ -443,12 +2187,30 @@ schema = 3 [mod."github.com/spf13/cobra"] version = "v1.8.0" hash = "sha256-oAE+fEaRfZPE541IPWE0GMeBBYgH2DMhtZNxzp7DFlY=" + [mod."github.com/spf13/jwalterweatherman"] + version = "v1.0.0" + hash = "sha256-KLftz+gaA5wSkvLqvQ7CuboB79kKEoTJvgTtrXatbiQ=" [mod."github.com/spf13/pflag"] version = "v1.0.5" hash = "sha256-w9LLYzxxP74WHT4ouBspH/iQZXjuAh2WQCHsuvyEjAw=" [mod."github.com/spf13/viper"] version = "v1.18.2" hash = "sha256-MXYbK6w1LEaoZ2/L/STF3WU1tbK+7NwGVxUCLKPkwks=" + [mod."github.com/ssgreg/nlreturn/v2"] + version = "v2.2.1" + hash = "sha256-AK4nv8mBPV1CiCS3USIeSSQsBSZiyKht+5x91l0B5bo=" + [mod."github.com/stbenjam/no-sprintf-host-port"] + version = "v0.1.1" + hash = "sha256-4uWklfI3ogNyCJpkDMAPtE/1+h+Q4tI4aPY+Sij5eC8=" + [mod."github.com/streadway/amqp"] + version = "v0.0.0-20190827072141-edfb9018d271" + hash = "sha256-KmrYNdmuBxGj5b+7w27z7qrf76N8gfVI5c7BqSWBHJY=" + [mod."github.com/streadway/handy"] + version = "v0.0.0-20200128134331-0f66f006fb2e" + hash = "sha256-xAc83ej4LLjtU6VZY7ELYpOkppRlNS0n+tVI12wwlQ0=" + [mod."github.com/stretchr/objx"] + version = "v0.5.0" + hash = "sha256-nY4mvP0f0Ry1IKMKQAYNuioA5h4red4mmQqeGZw6EF0=" [mod."github.com/stretchr/testify"] version = "v1.8.4" hash = "sha256-MoOmRzbz9QgiJ+OOBo5h5/LbilhJfRUryvzHJmXAWjo=" @@ -459,30 +2221,195 @@ schema = 3 version = "v1.0.1-0.20210819022825-2ae1ddf74ef7" hash = "sha256-36a4hgVQfwtS2zhylKpQuFhrjdc/Y8pF0dxc26jcZIU=" replaced = "github.com/syndtr/goleveldb" + [mod."github.com/t-yuki/gocover-cobertura"] + version = "v0.0.0-20180217150009-aaee18c8195c" + hash = "sha256-vDD8omsp89gp/3ZG0cLrPfE42KFKR5ZOLdMpecPtNOI=" + [mod."github.com/tdakkota/asciicheck"] + version = "v0.2.0" + hash = "sha256-9975cLoUhzPLfxfnBQt4xuDTVGCbiUqlbpUFBciZgiw=" + [mod."github.com/tdewolff/minify/v2"] + version = "v2.12.4" + hash = "sha256-wNLY2njT960vjcQ/JDbt5B3wyYzpoi+2SpIHEEf2ZUc=" + [mod."github.com/tdewolff/parse/v2"] + version = "v2.6.4" + hash = "sha256-LNbbZlnn/y4BTwZ7rzBKAFQC6k2ZZrI8y7Z2aM1+F7E=" + [mod."github.com/tdewolff/test"] + version = "v1.0.7" + hash = "sha256-IL5Ch02Cvm8qE7HVRGfHXTF17O6NLU0n0NfnKryYPkw=" + [mod."github.com/tecbot/gorocksdb"] + version = "v0.0.0-20191217155057-f0fad39f321c" + hash = "sha256-VODgdnIxK9bhCHrt4nKfPYk/LLycTIwSRi930fws3Pk=" [mod."github.com/tendermint/go-amino"] version = "v0.16.0" hash = "sha256-JW4zO/0vMzf1dXLePOqaMtiLUZgNbuIseh9GV+jQlf0=" + [mod."github.com/tetafro/godot"] + version = "v1.4.11" + hash = "sha256-WLzChh6OfePXm6rv+jNHCS0IA57z3hEKcaCKg84LILY=" [mod."github.com/tidwall/btree"] version = "v1.7.0" hash = "sha256-bnr6c7a0nqo2HyGqxHk0kEZCEsjLYkPbAVY9WzaZ30o=" + [mod."github.com/timakin/bodyclose"] + version = "v0.0.0-20221125081123-e39cf3fc478e" + hash = "sha256-aA8Jm5sqrq3gNN9Mh5Dq0ahQ8oN8TtFtFbt6/xjsVcU=" + [mod."github.com/timonwong/loggercheck"] + version = "v0.9.4" + hash = "sha256-NS/oyncVRomsPQUAhg0/4n1PHWnPT1M2aE/o4dxpUKM=" + [mod."github.com/tklauser/go-sysconf"] + version = "v0.3.11" + hash = "sha256-io8s7PJi4OX+wXkCm+v5pKy4yiqA/RE/I4ksy6mKX30=" + [mod."github.com/tklauser/numcpus"] + version = "v0.6.0" + hash = "sha256-6jssTsP5L6yVl43tXfqDdgeI+tEkBp3BpiWwKXLTHAM=" + [mod."github.com/tmc/grpc-websocket-proxy"] + version = "v0.0.0-20190109142713-0ad062ec5ee5" + hash = "sha256-5OJsX5qqW/MeL4gCapWnU/KvNeAply9cT9xezdMm3Ko=" + [mod."github.com/tomarrell/wrapcheck/v2"] + version = "v2.8.1" + hash = "sha256-VH95/2jMvvMIYmotggusZg/Wjd2Jy5IHj7t/T/qYBhU=" + [mod."github.com/tommy-muehle/go-mnd/v2"] + version = "v2.5.1" + hash = "sha256-SzTbk3PRnhKUNP2/d6vqKP7he/OXU/LDSagif8UuRig=" + [mod."github.com/tv42/httpunix"] + version = "v0.0.0-20150427012821-b75d8614f926" + hash = "sha256-qWK/hFLKJwrUEjIW6UEljV5lKdSAoqCcSfZU6b21qek=" + [mod."github.com/twitchyliquid64/golang-asm"] + version = "v0.15.1" + hash = "sha256-HLk6oUe7EoITrNvP0y8D6BtIgIcmDZYtb/xl/dufIoY=" + [mod."github.com/ugorji/go"] + version = "v1.2.7" + hash = "sha256-VJne/ihZFsMIGt4UezV90scU6ozMab3d981ZmwzhAso=" + [mod."github.com/ugorji/go/codec"] + version = "v1.2.11" + hash = "sha256-hfcj+YsznH6MeERSdIPjSrsM7gbDcIzH/TbgHzYbPww=" [mod."github.com/ulikunitz/xz"] version = "v0.5.11" hash = "sha256-SUyrjc2wyN3cTGKe5JdBEXjtZC1rJySRxJHVUZ59row=" + [mod."github.com/ultraware/funlen"] + version = "v0.0.3" + hash = "sha256-lN7SYfM3gAuT3o72sl0tle030IRAMP9molFcknmUPqw=" + [mod."github.com/ultraware/whitespace"] + version = "v0.0.5" + hash = "sha256-E4A/sZwjwHn3XzVRmTwSrGfshYzPMEI3lQ0qaUEnzfg=" + [mod."github.com/urfave/cli"] + version = "v1.22.1" + hash = "sha256-sx4cCoJIH3Yd+ahTrWe/TZYfDrPqOaWeLLGfn/KJNqk=" + [mod."github.com/urfave/negroni"] + version = "v1.0.0" + hash = "sha256-l7ExYayxsfYdqYYcYQd5n1AOP/187IIdsizEpsiR5r4=" + [mod."github.com/uudashr/gocognit"] + version = "v1.0.6" + hash = "sha256-Zgb/DWXS5uAEW4pmyJIGuE5cTL/6hiWRGJlB4DaV0tg=" + [mod."github.com/valyala/bytebufferpool"] + version = "v1.0.0" + hash = "sha256-I9FPZ3kCNRB+o0dpMwBnwZ35Fj9+ThvITn8a3Jr8mAY=" + [mod."github.com/valyala/fasthttp"] + version = "v1.40.0" + hash = "sha256-M7KGZsF7Fh9B/QqNgcqEMnrYKqfxO9+Efsx5xaJokAI=" + [mod."github.com/valyala/fasttemplate"] + version = "v1.2.2" + hash = "sha256-gp+lNXE8zjO+qJDM/YbS6V43HFsYP6PKn4ux1qa5lZ0=" + [mod."github.com/valyala/tcplisten"] + version = "v1.0.0" + hash = "sha256-aP0CrNH6UNRMhzgA2NgPwKyZs6xry5aDlZnLgGuHZbs=" + [mod."github.com/vektra/mockery/v2"] + version = "v2.23.1" + hash = "sha256-hN9fpXomdxpOSsfYi/Y9ryzaR1aMKFET+0v+G8WHClE=" + [mod."github.com/vmihailenco/msgpack/v5"] + version = "v5.3.5" + hash = "sha256-Uj5xRZbtxE8evniQPuBVkxkEdMa/H/pt9s84J16swm8=" + [mod."github.com/vmihailenco/tagparser/v2"] + version = "v2.0.0" + hash = "sha256-M9QyaKhSmmYwsJk7gkjtqu9PuiqZHSmTkous8VWkWY0=" + [mod."github.com/xanzy/ssh-agent"] + version = "v0.3.3" + hash = "sha256-l3pGB6IdzcPA/HLk93sSN6NM2pKPy+bVOoacR5RC2+c=" + [mod."github.com/xeipuuv/gojsonpointer"] + version = "v0.0.0-20180127040702-4e3ac2762d5f" + hash = "sha256-OEW9nOR3EeMzvqvqpdAgowpZlbXPLWM0JT+5bwWOxo8=" + [mod."github.com/xeipuuv/gojsonreference"] + version = "v0.0.0-20180127040603-bd5ef7bd5415" + hash = "sha256-ZbXA+ASQrTgBQzasUKC9vznrOGpquYyWr+uwpm46fvU=" + [mod."github.com/xeipuuv/gojsonschema"] + version = "v1.2.0" + hash = "sha256-1ERBEvxj3pvHkMS2mvmvmYRi8jgAaTquo5hwjDLAEdc=" + [mod."github.com/xhit/go-str2duration/v2"] + version = "v2.1.0" + hash = "sha256-UnZPU50BE/ixVPuZXdqmg+jYcoDuyuBHIJwX72qKP7E=" + [mod."github.com/xiang90/probing"] + version = "v0.0.0-20190116061207-43a291ad63a2" + hash = "sha256-sXyLzdjys2YAQBxz1ELmV3RulY5huFrOEUQWaYKuQvw=" + [mod."github.com/xordataexchange/crypt"] + version = "v0.0.3-0.20170626215501-b2862e3d0a77" + hash = "sha256-HuXuIK/V5iNuF7j68acNQ3SW7rrn1efaI/Rfq0xBAxM=" + [mod."github.com/yagipy/maintidx"] + version = "v1.0.0" + hash = "sha256-H8gwKHwe6pSdU1G9MZ29xbmXKWq1NI8UZIkVQ9/pFRc=" + [mod."github.com/yalp/jsonpath"] + version = "v0.0.0-20180802001716-5cc68e5049a0" + hash = "sha256-i7iWzS6hR5IwvrJ8kcjqxEYpRnj9cwiL726Ox8Ltfk4=" + [mod."github.com/yeya24/promlinter"] + version = "v0.2.0" + hash = "sha256-fVsZ1ECN5zItGPVHVDm6RCgSMAigifp0SOTJQx7uqeI=" + [mod."github.com/yosssi/ace"] + version = "v0.0.5" + hash = "sha256-0HnNZUypGGoQxFX214/eF7RJ9KxYpb56Q5Rn2tryOLM=" + [mod."github.com/yudai/gojsondiff"] + version = "v1.0.0" + hash = "sha256-9nVgqa9z/jdnusUcrVN+HsbkNJvSd3C4Bp3wr6Xw814=" + [mod."github.com/yudai/golcs"] + version = "v0.0.0-20170316035057-ecda9a501e82" + hash = "sha256-+CaxcEHjkNZjhQ6lZ+0mvBa2RtJ37wHehr6A7wrjplc=" + [mod."github.com/yudai/pp"] + version = "v2.0.1+incompatible" + hash = "sha256-8xXrFy0IFrl1ZO3K1Br+f51rAXVOYrgvD1zap+Rha6M=" + [mod."github.com/yuin/goldmark"] + version = "v1.4.13" + hash = "sha256-GVwFKZY6moIS6I0ZGuio/WtDif+lkZRfqWS6b4AAJyI=" + [mod."github.com/yusufpapurcu/wmi"] + version = "v1.2.2" + hash = "sha256-Rno6F82JIeglBobQl6YKl3U6+FvWXmFavJlzpOJgoXI=" + [mod."github.com/zeebo/xxh3"] + version = "v1.0.2" + hash = "sha256-XXUApJ54WZeV4YBaDHNF3kLdK16nPDOZNP1Fnx1JjpI=" [mod."github.com/zondax/hid"] version = "v0.9.2" hash = "sha256-9h1gEJ/loyaJvu9AsmslztiA8U9ixDTC6TBw9lCU2BE=" [mod."github.com/zondax/ledger-go"] version = "v0.14.3" hash = "sha256-tldEok5ebZ4R4B7H8dSlYS5oVuLvh89n9wUaVlDjYwg=" + [mod."gitlab.com/bosi/decorder"] + version = "v0.2.3" + hash = "sha256-uefCmTQCoIdkhA1A0u9vYEFp2w95PmqB//M8NO+uOIE=" [mod."gitlab.com/yawning/secp256k1-voi"] version = "v0.0.0-20230925100816-f2616030848b" hash = "sha256-X8INg01LTg13iOuwPI3uOhPN7r01sPZtmtwJ2sudjCA=" [mod."gitlab.com/yawning/tuplehash"] version = "v0.0.0-20230713102510-df83abbf9a02" hash = "sha256-pehQduoaJRLchebhgvMYacVvbuNIBA++XkiqCuqdato=" + [mod."go.einride.tech/aip"] + version = "v0.66.0" + hash = "sha256-WZpJh2omV3VJwUvmF34+QTX2tae+YcDOmBfjqMXk63E=" [mod."go.etcd.io/bbolt"] - version = "v1.3.7" - hash = "sha256-poZk8tPLDWwW95oCOkTJcQtEvOJTD9UXAZ2TqGJutwk=" + version = "v1.3.8" + hash = "sha256-ekKy8198B2GfPldHLYZnvNjID6x07dUPYKgFx84TgVs=" + [mod."go.etcd.io/etcd"] + version = "v0.0.0-20191023171146-3cf2f69b5738" + hash = "sha256-+ak7iGjlT3FLqy3IXYu2wh1WyRWZnfU+QqrsPlit8Cs=" + [mod."go.etcd.io/etcd/api/v3"] + version = "v3.5.10" + hash = "sha256-1oGG/U2rkXEKeY+JHcOi3nKWkVI15CivR06+/NvU13I=" + [mod."go.etcd.io/etcd/client/pkg/v3"] + version = "v3.5.10" + hash = "sha256-Yewd/GmlNmHTO8E1iMQR6hU1gATX55CzMGkbiGXB/p4=" + [mod."go.etcd.io/etcd/client/v2"] + version = "v2.305.10" + hash = "sha256-25hQHUdsVeum44frX4xeiQliz3xScrO0cWFXRKF5R1U=" + [mod."go.etcd.io/etcd/client/v3"] + version = "v3.5.10" + hash = "sha256-M8O6kXlsTd9fWP64k+eLKvjkNfHSR58yTYoHxQL+vZE=" + [mod."go.etcd.io/gofail"] + version = "v0.1.0" + hash = "sha256-y7524CIGBFYMnqwSv6uzCN726sXqMx3Pupw9z7NBBsU=" [mod."go.opencensus.io"] version = "v0.24.0" hash = "sha256-4H+mGZgG2c9I1y0m8avF4qmt8LUKxxVsTqR8mKgP4yo=" @@ -498,33 +2425,72 @@ schema = 3 [mod."go.opentelemetry.io/otel/metric"] version = "v1.22.0" hash = "sha256-Lb4wdlZNmz6Ut6CljBAePSUA8X0RBEOEDyOl2oO+pL8=" + [mod."go.opentelemetry.io/otel/sdk"] + version = "v1.21.0" + hash = "sha256-zVeXCf3jVEWjLdOYty//nCpzBtejZET0tEOQyONJ3Mo=" [mod."go.opentelemetry.io/otel/trace"] version = "v1.22.0" hash = "sha256-38zzkmcoOzYYeDN+rC44HmwmdnalIcEpObCS6tIvMO8=" + [mod."go.opentelemetry.io/proto/otlp"] + version = "v0.19.0" + hash = "sha256-yOixDEwd/ZdmT3XcCBGqDc4n0+4bwT7zsXc+ISbFOkI=" + [mod."go.uber.org/atomic"] + version = "v1.10.0" + hash = "sha256-E6UEDc1eh/cLUFd+J86cDesQ0B8wEv/DdaAVKb+x2t8=" + [mod."go.uber.org/goleak"] + version = "v1.1.10" + hash = "sha256-1sme1os5aD2mR+Sv/qTJ96PZ32lXbf+uuxdMqSkoREs=" [mod."go.uber.org/multierr"] version = "v1.11.0" hash = "sha256-Lb6rHHfR62Ozg2j2JZy3MKOMKdsfzd1IYTR57r3Mhp0=" + [mod."go.uber.org/tools"] + version = "v0.0.0-20190618225709-2cfd321de3ee" + hash = "sha256-vLL9lT4iMxODR5+I6ZS14V4WcEd7REPNYZt0pCdNKLM=" + [mod."go.uber.org/zap"] + version = "v1.24.0" + hash = "sha256-yLzjFbMWnc5b033gcPLGP0KY1xWPJ3sjnUG/RndmC3o=" + [mod."golang.org/x/arch"] + version = "v0.3.0" + hash = "sha256-Gus5o3I0+arNjRFglTP5FfCi0NDwKAUT/N3WtdhnLMQ=" [mod."golang.org/x/crypto"] version = "v0.19.0" hash = "sha256-Vi6vY/eWNlYQ9l3Y+gA+X2+h2CmzEOrBRVFO/cnrPWc=" [mod."golang.org/x/exp"] - version = "v0.0.0-20240205201215-2c58cdc269a3" - hash = "sha256-vNB+gyucFlvOK7ngsLleZDwDU8jySehOSPVnCmbR2X4=" + version = "v0.0.0-20240213143201-ec583247a57a" + hash = "sha256-Fm6N/kfT5pZrD6tzqAecpGG11NQMUkYfltmiObzSKjE=" + [mod."golang.org/x/exp/typeparams"] + version = "v0.0.0-20230307190834-24139beb5833" + hash = "sha256-IdVdYrszhwtJ63OmlyzuqJ261dGyYulHd/MW9RKkIZg=" + [mod."golang.org/x/image"] + version = "v0.0.0-20220302094943-723b81ca9867" + hash = "sha256-oKs2CuL7pvlh/36bbqxLxkDJDGTD33v9yaDWp98XBC8=" + [mod."golang.org/x/lint"] + version = "v0.0.0-20210508222113-6edffad5e616" + hash = "sha256-U4o4PZ8KRpwbUN+E0VwewWNCiK5OGeBIpAMLJEbO9Ng=" + [mod."golang.org/x/mobile"] + version = "v0.0.0-20190719004257-d2bd2a29d028" + hash = "sha256-At0uE2mTr/GHCyF4U8Z+AiU2jlvBVQuX25tooo2ll6M=" [mod."golang.org/x/mod"] - version = "v0.14.0" - hash = "sha256-sx3hWp5l99DBfIrn821ohfoBwvaITSHMWbzPvX0btLM=" + version = "v0.15.0" + hash = "sha256-ANSnGmd525BfnkMZpCmu6deMPFGADtnZx3lmZpdm2aM=" [mod."golang.org/x/net"] version = "v0.21.0" hash = "sha256-LfiqMpPtqvW/eLkfx6Ebr5ksqKbQli6uq06c/+XrBsw=" [mod."golang.org/x/oauth2"] version = "v0.16.0" hash = "sha256-fJfS9dKaq82WaYSVWHMnxNLWH8+L4aip/C1AfJi4FFI=" + [mod."golang.org/x/perf"] + version = "v0.0.0-20230113213139-801c7ef9e5c5" + hash = "sha256-LDYnV/rQzKrZnjjb7ofM09T6COAN+iZp0/u8+BYWjdk=" [mod."golang.org/x/sync"] version = "v0.6.0" hash = "sha256-LLims/wjDZtIqlYCVHREewcUOX4hwRwplEuZKPOJ/HI=" [mod."golang.org/x/sys"] version = "v0.17.0" hash = "sha256-e0qnE+SitE02IzvnJKI4Uzpq9EOZY+zvE8Wf5b2e6Kg=" + [mod."golang.org/x/telemetry"] + version = "v0.0.0-20240208230135-b75ee8823808" + hash = "sha256-WG61myib7ziO1269W16rf8FL4X9fbUDiwWqTJ3BeCFg=" [mod."golang.org/x/term"] version = "v0.17.0" hash = "sha256-lCo7WPHe8Q9q76f0D8FrfoX90MTvwa21O+Dwr1mOAcA=" @@ -535,8 +2501,20 @@ schema = 3 version = "v0.5.0" hash = "sha256-W6RgwgdYTO3byIPOFxrP2IpAZdgaGowAaVfYby7AULU=" [mod."golang.org/x/tools"] - version = "v0.17.0" - hash = "sha256-CxuHfKKtUkn3VjA7D9WQjzvV1EUbyI/xMNhb5CxO6IQ=" + version = "v0.18.0" + hash = "sha256-JVz7W13vMPfpGQ1yW+LBlT6INu3ebpjvXyChmAkm5bQ=" + [mod."golang.org/x/xerrors"] + version = "v0.0.0-20231012003039-104605ab7028" + hash = "sha256-IsFTm5WZQ6W1ZDF8WOP+6xiOAc7pIq8r9Afvkjp3PRQ=" + [mod."gonum.org/v1/gonum"] + version = "v0.12.0" + hash = "sha256-DOYwuXJZFiSyjq+u4TwCmMtOqHLGIVXWtavtuuSquqQ=" + [mod."gonum.org/v1/netlib"] + version = "v0.0.0-20190313105609-8cb42192e0e0" + hash = "sha256-bnv1p/TKXOeUN0CIUL+kUxfeZivz7bMMMObQWpMwowg=" + [mod."gonum.org/v1/plot"] + version = "v0.10.1" + hash = "sha256-35srMMI6JDp3XLIXriYbcMvvVnxz18m+CWwdq6u47bQ=" [mod."google.golang.org/api"] version = "v0.160.0" hash = "sha256-y5o9XQgViiK3zfRiub0EXWzjrHc1z7nwijX2tch+FKI=" @@ -549,33 +2527,108 @@ schema = 3 [mod."google.golang.org/genproto/googleapis/api"] version = "v0.0.0-20240125205218-1f4bbc51befe" hash = "sha256-m1wAOo4INg46fIrGdISN5m5X29Z6OdR151xdKqrD9V4=" + [mod."google.golang.org/genproto/googleapis/bytestream"] + version = "v0.0.0-20240116215550-a9fa1716bcac" + hash = "sha256-+40I23zVZjJoWmmNf61jjvYA7oOOB8VCFSHfyG2Gxe0=" [mod."google.golang.org/genproto/googleapis/rpc"] version = "v0.0.0-20240213162025-012b6fc9bca9" hash = "sha256-NQOkepY6N0AsHm4EJLDGAboasL539ylfXLtOaPPyYI0=" [mod."google.golang.org/grpc"] version = "v1.61.1" hash = "sha256-IhktITVoap1VEFwRjjZp5Kx6EM7DNF0+xPWA9zeZaOU=" + [mod."google.golang.org/grpc/cmd/protoc-gen-go-grpc"] + version = "v1.1.0" + hash = "sha256-qKzRoJQXYiQvJr8XkPL8cWMa2c5nIAEZN8X41NuyWuY=" [mod."google.golang.org/protobuf"] version = "v1.32.0" hash = "sha256-GJuTkMGHCzHbyK4yD5kY4oMn8wQWqgkeBK//yVDqHJk=" + [mod."gopkg.in/alecthomas/kingpin.v2"] + version = "v2.2.6" + hash = "sha256-uViE2kPj7tMrGYVjjdLOl2jFDmmu+3P7GvnZBse2zVY=" + [mod."gopkg.in/check.v1"] + version = "v1.0.0-20201130134442-10cb98267c6c" + hash = "sha256-VlIpM2r/OD+kkyItn6vW35dyc0rtkJufA93rjFyzncs=" + [mod."gopkg.in/cheggaaa/pb.v1"] + version = "v1.0.27" + hash = "sha256-T8E4qTQN/evR6mkWxd2EZhTW26K9WhMYJhnEh7UtKbk=" + [mod."gopkg.in/errgo.v2"] + version = "v2.1.0" + hash = "sha256-Ir/MuxQFxvVJEciovGOZbM8ZfKJ/AYotPwYfH2FctRg=" + [mod."gopkg.in/fsnotify.v1"] + version = "v1.4.7" + hash = "sha256-j/Ts92oXa3k1MFU7Yd8/AqafRTsFn7V2pDKCyDJLah8=" + [mod."gopkg.in/gcfg.v1"] + version = "v1.2.3" + hash = "sha256-+viy8UzF1dvwI53s4vcjE1UCGXGhmo4uXdNyZiNPrpg=" [mod."gopkg.in/ini.v1"] version = "v1.67.0" hash = "sha256-V10ahGNGT+NLRdKUyRg1dos5RxLBXBk1xutcnquc/+4=" + [mod."gopkg.in/mgo.v2"] + version = "v2.0.0-20180705113604-9856a29383ce" + hash = "sha256-oIMWi+uKxazK0KOtGMalGQkvpiwVV1/NQq/JANvlZpI=" + [mod."gopkg.in/resty.v1"] + version = "v1.12.0" + hash = "sha256-t9KTjlm1K1WdPAZ0L6rLv0ME/iP/gKeKgvDjXMaxVRg=" + [mod."gopkg.in/tomb.v1"] + version = "v1.0.0-20141024135613-dd632973f1e7" + hash = "sha256-W/4wBAvuaBFHhowB67SZZfXCRDp5tzbYG4vo81TAFdM=" + [mod."gopkg.in/warnings.v0"] + version = "v0.1.2" + hash = "sha256-ATVL9yEmgYbkJ1DkltDGRn/auGAjqGOfjQyBYyUo8s8=" + [mod."gopkg.in/yaml.v2"] + version = "v2.4.0" + hash = "sha256-uVEGglIedjOIGZzHW4YwN1VoRSTK8o0eGZqzd+TNdd0=" [mod."gopkg.in/yaml.v3"] version = "v3.0.1" hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" + [mod."gotest.tools"] + version = "v2.2.0+incompatible" + hash = "sha256-BYTGCeD1GH0nUMxaP1ARTpfGk3vQroDNAgb3LYKhon4=" [mod."gotest.tools/v3"] version = "v3.5.1" hash = "sha256-ps2GEc3P2xvlrU4TCtXz+nLTxyP0RrF7SScz5jUqE5E=" + [mod."honnef.co/go/tools"] + version = "v0.4.3" + hash = "sha256-pp2ZbSAOlmg2YuzLEAW2U0FjGhyl8N43s9BnersA+sQ=" + [mod."moul.io/http2curl/v2"] + version = "v2.3.0" + hash = "sha256-0wUWQPmDa8wlP18TKrLtuY6Sakh3KkNqDq+FIbE+AHo=" + [mod."mvdan.cc/gofumpt"] + version = "v0.4.0" + hash = "sha256-R/WzvCWVqiRZq80HeOCEF3We02/MlA8qBSou0LzElLI=" + [mod."mvdan.cc/interfacer"] + version = "v0.0.0-20180901003855-c20040233aed" + hash = "sha256-8B+O4GOM+VWsu1wV0Txki8uDktH4rTZw0C2rojLs1Dk=" + [mod."mvdan.cc/lint"] + version = "v0.0.0-20170908181259-adc824a0674b" + hash = "sha256-GeXtU0H9eU+uE0iGhsbZQ0oi2efKsw512H+mN3cWsZ4=" + [mod."mvdan.cc/unparam"] + version = "v0.0.0-20221223090309-7455f1af531d" + hash = "sha256-TAQovTFFDCI9N+EHnNymrt0++UrQFc6spP0rMRZw1nM=" [mod."nhooyr.io/websocket"] version = "v1.8.6" hash = "sha256-DyaiCc/1iELrl6JSpz6WYMtFwUiSCOSoNF8IhSyP1ag=" [mod."pgregory.net/rapid"] version = "v1.1.0" hash = "sha256-sVQY9EQ9Y5blYyVYfaOa+y12e+399OqdHiEY3BaDnqo=" + [mod."rsc.io/binaryregexp"] + version = "v0.2.0" + hash = "sha256-izALTmzybQe67BNXliqQ3xCEOo+b6o8C4YoX5H0FWc0=" + [mod."rsc.io/pdf"] + version = "v0.1.1" + hash = "sha256-BHVEebJPCm+e4MIyfp2IQCP2y8MdmNG+FKpYixSXEgc=" [mod."rsc.io/qr"] version = "v0.2.0" hash = "sha256-I3fAJwwZhIrgBbCjWvIElAE9JqG2y59KRBc78EYi3RM=" + [mod."rsc.io/quote/v3"] + version = "v3.1.0" + hash = "sha256-sF7lOq/bInDPtLI+j610WJRAQ09Cxc5lmPzzytuE6DI=" + [mod."rsc.io/sampler"] + version = "v1.3.0" + hash = "sha256-UPbUO3GOGn6/fz1EBEYONBX45V6bzQKQv6CoZb2Y3S8=" [mod."sigs.k8s.io/yaml"] version = "v1.4.0" hash = "sha256-Hd/M0vIfIVobDd87eb58p1HyVOjYWNlGq2bRXfmtVno=" + [mod."sourcegraph.com/sourcegraph/appdash"] + version = "v0.0.0-20190731080439-ebfcffb1b5c0" + hash = "sha256-0qD4VP3zQw3yRnN3FqwSyaid4zxJGJRfygX44JPcd8k=" diff --git a/tests/e2e/auth/suite.go b/tests/e2e/auth/suite.go index 35944b50e25c..1d5e6b7f2a34 100644 --- a/tests/e2e/auth/suite.go +++ b/tests/e2e/auth/suite.go @@ -1466,6 +1466,7 @@ func (s *E2ETestSuite) TestSignWithMultiSignersAminoJSON() { } func (s *E2ETestSuite) TestAuxSigner() { + s.T().Skip("re-enable this when we bring back sign mode aux client testing") require := s.Require() val := s.network.GetValidators()[0] val0Coin := sdk.NewCoin(fmt.Sprintf("%stoken", val.GetMoniker()), math.NewInt(10)) diff --git a/tests/e2e/tx/benchmarks_test.go b/tests/e2e/tx/benchmarks_test.go index bfbf22db5e87..7cd0acae62b2 100644 --- a/tests/e2e/tx/benchmarks_test.go +++ b/tests/e2e/tx/benchmarks_test.go @@ -47,7 +47,7 @@ func BenchmarkTx(b *testing.B) { val := s.network.GetValidators()[0] txBuilder := mkTxBuilder(b, s) // Convert the txBuilder to a tx.Tx. - protoTx, err := txBuilderToProtoTx(txBuilder) + protoTx, err := txBuilder.GetTx().(interface{ AsTx() (*tx.Tx, error) }).AsTx() assert.NilError(b, err) // Encode the txBuilder to txBytes. txBytes, err := val.GetClientCtx().TxConfig.TxEncoder()(txBuilder.GetTx()) diff --git a/tests/e2e/tx/service_test.go b/tests/e2e/tx/service_test.go index 632becfb3996..b9c500cf53de 100644 --- a/tests/e2e/tx/service_test.go +++ b/tests/e2e/tx/service_test.go @@ -8,15 +8,14 @@ import ( "strings" "testing" + "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - errorsmod "cosmossdk.io/errors" "cosmossdk.io/math" "cosmossdk.io/simapp" authclient "cosmossdk.io/x/auth/client" authtest "cosmossdk.io/x/auth/client/testutil" "cosmossdk.io/x/auth/migrations/legacytx" - authtx "cosmossdk.io/x/auth/tx" banktypes "cosmossdk.io/x/bank/types" "github.com/cosmos/cosmos-sdk/client" @@ -30,7 +29,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/network" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" @@ -158,7 +156,7 @@ func (s *E2ETestSuite) TestSimulateTx_GRPC() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() // Convert the txBuilder to a tx.Tx. - protoTx, err := txBuilderToProtoTx(txBuilder) + protoTx, err := txBuilder.GetTx().(interface{ AsTx() (*tx.Tx, error) }).AsTx() s.Require().NoError(err) // Encode the txBuilder to txBytes. txBytes, err := val.GetClientCtx().TxConfig.TxEncoder()(txBuilder.GetTx()) @@ -205,7 +203,7 @@ func (s *E2ETestSuite) TestSimulateTx_GRPCGateway() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() // Convert the txBuilder to a tx.Tx. - protoTx, err := txBuilderToProtoTx(txBuilder) + protoTx, err := txBuilder.GetTx().(interface{ AsTx() (*tx.Tx, error) }).AsTx() s.Require().NoError(err) // Encode the txBuilder to txBytes. txBytes, err := val.GetClientCtx().TxConfig.TxEncoder()(txBuilder.GetTx()) @@ -759,7 +757,7 @@ func (s *E2ETestSuite) TestGetBlockWithTxs_GRPCGateway() { func (s *E2ETestSuite) TestTxEncode_GRPC() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() - protoTx, err := txBuilderToProtoTx(txBuilder) + protoTx, err := txBuilder.GetTx().(interface{ AsTx() (*tx.Tx, error) }).AsTx() s.Require().NoError(err) testCases := []struct { @@ -796,7 +794,7 @@ func (s *E2ETestSuite) TestTxEncode_GRPC() { func (s *E2ETestSuite) TestTxEncode_GRPCGateway() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() - protoTx, err := txBuilderToProtoTx(txBuilder) + protoTx, err := txBuilder.GetTx().(interface{ AsTx() (*tx.Tx, error) }).AsTx() s.Require().NoError(err) testCases := []struct { @@ -835,7 +833,8 @@ func (s *E2ETestSuite) TestTxDecode_GRPC() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() - encodedTx, err := val.GetClientCtx().TxConfig.TxEncoder()(txBuilder.GetTx()) + goodTx := txBuilder.GetTx() + encodedTx, err := val.GetClientCtx().TxConfig.TxEncoder()(goodTx) s.Require().NoError(err) invalidTxBytes := append(encodedTx, byte(0o00)) @@ -864,15 +863,35 @@ func (s *E2ETestSuite) TestTxDecode_GRPC() { s.Require().NoError(err) s.Require().NotEmpty(res.GetTx()) - txb := authtx.WrapTx(res.Tx) - tx, err := val.GetClientCtx().TxConfig.TxEncoder()(txb.GetTx()) + txb := wrapTx(s.T(), s.cfg.TxConfig, res.Tx) + gotTx := txb.GetTx() + gotEncoded, err := val.GetClientCtx().TxConfig.TxEncoder()(gotTx) s.Require().NoError(err) - s.Require().Equal(encodedTx, tx) + s.Require().Equal(encodedTx, gotEncoded) } }) } } +func wrapTx(t *testing.T, conf client.TxConfig, dTx *tx.Tx) client.TxBuilder { + t.Helper() + bodyBytes, err := dTx.Body.Marshal() + require.NoError(t, err) + authInfoBytes, err := dTx.AuthInfo.Marshal() + require.NoError(t, err) + rawTxBytes, err := (&tx.TxRaw{ + BodyBytes: bodyBytes, + AuthInfoBytes: authInfoBytes, + Signatures: dTx.Signatures, + }).Marshal() + require.NoError(t, err) + dec, err := conf.TxDecoder()(rawTxBytes) + require.NoError(t, err) + bld, err := conf.WrapTxBuilder(dec) + require.NoError(t, err) + return bld +} + func (s *E2ETestSuite) TestTxDecode_GRPCGateway() { val := s.network.GetValidators()[0] txBuilder := s.mkTxBuilder() @@ -907,9 +926,10 @@ func (s *E2ETestSuite) TestTxDecode_GRPCGateway() { err := val.GetClientCtx().Codec.UnmarshalJSON(res, &result) s.Require().NoError(err) - txb := authtx.WrapTx(result.Tx) + txb := wrapTx(s.T(), s.cfg.TxConfig, result.Tx) tx, err := val.GetClientCtx().TxConfig.TxEncoder()(txb.GetTx()) s.Require().NoError(err) + s.T().Log(len(tx), len(encodedTxBytes)) s.Require().Equal(encodedTxBytes, tx) } }) @@ -1111,6 +1131,7 @@ func (s *E2ETestSuite) mkTxBuilder() client.TxBuilder { txBuilder.SetFeeAmount(feeAmount) txBuilder.SetGasLimit(gasLimit) txBuilder.SetMemo("foobar") + txBuilder.SetFeePayer(val.GetAddress()) signers, err := txBuilder.GetTx().GetSigners() s.Require().NoError(err) s.Require().Equal([][]byte{val.GetAddress()}, signers) @@ -1128,23 +1149,3 @@ func (s *E2ETestSuite) mkTxBuilder() client.TxBuilder { return txBuilder } - -// protoTxProvider is a type which can provide a proto transaction. It is a -// workaround to get access to the wrapper TxBuilder's method GetProtoTx(). -// Deprecated: It's only used for testing the deprecated Simulate gRPC endpoint -// using a proto Tx field. -type protoTxProvider interface { - GetProtoTx() *tx.Tx -} - -// txBuilderToProtoTx converts a txBuilder into a proto tx.Tx. -// Deprecated: It's used for testing the deprecated Simulate gRPC endpoint -// using a proto Tx field and for testing the TxEncode endpoint. -func txBuilderToProtoTx(txBuilder client.TxBuilder) (*tx.Tx, error) { - protoProvider, ok := txBuilder.(protoTxProvider) - if !ok { - return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidType, "expected proto tx builder, got %T", txBuilder) - } - - return protoProvider.GetProtoTx(), nil -} diff --git a/tests/go.mod b/tests/go.mod index 13988093c044..fa17fc32134c 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -7,7 +7,7 @@ require ( cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 cosmossdk.io/depinject v1.0.0-alpha.4 - cosmossdk.io/errors v1.0.1 + cosmossdk.io/errors v1.0.1 // indirect cosmossdk.io/log v1.3.1 cosmossdk.io/math v1.2.0 cosmossdk.io/simapp v0.0.0-20230309163709-87da587416ba diff --git a/tests/integration/auth/client/cli/suite_test.go b/tests/integration/auth/client/cli/suite_test.go index 7b1f59e4c14e..f0dc6afdeca8 100644 --- a/tests/integration/auth/client/cli/suite_test.go +++ b/tests/integration/auth/client/cli/suite_test.go @@ -982,6 +982,7 @@ func (s *CLITestSuite) TestSignWithMultiSignersAminoJSON() { } func (s *CLITestSuite) TestAuxSigner() { + s.T().Skip("re-enable this when we bring back sign mode aux client testing") val0Coin := sdk.NewCoin("testtoken", math.NewInt(10)) testCases := []struct { diff --git a/tests/integration/bank/app_test.go b/tests/integration/bank/app_test.go index 602f72939773..e51ad0137323 100644 --- a/tests/integration/bank/app_test.go +++ b/tests/integration/bank/app_test.go @@ -25,6 +25,7 @@ import ( _ "cosmossdk.io/x/staking" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/runtime" @@ -100,6 +101,7 @@ type suite struct { AccountKeeper types.AccountKeeper DistributionKeeper distrkeeper.Keeper App *runtime.App + TxConfig client.TxConfig } func createTestSuite(t *testing.T, genesisAccounts []authtypes.GenesisAccount) suite { @@ -128,7 +130,7 @@ func createTestSuite(t *testing.T, genesisAccounts []authtypes.GenesisAccount) s ), depinject.Supply(log.NewNopLogger()), ), - startupCfg, &res.BankKeeper, &res.AccountKeeper, &res.DistributionKeeper) + startupCfg, &res.BankKeeper, &res.AccountKeeper, &res.DistributionKeeper, &res.TxConfig) res.App = app @@ -223,7 +225,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { }, { desc: "wrong accNum should pass Simulate, but not Deliver", - msgs: []sdk.Msg{multiSendMsg1, multiSendMsg2}, + msgs: []sdk.Msg{multiSendMsg1}, accNums: []uint64{1}, // wrong account number accSeqs: []uint64{1}, expSimPass: true, // doesn't check signature @@ -251,19 +253,20 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { } for _, tc := range testCases { - t.Logf("testing %s", tc.desc) - header := header.Info{Height: baseApp.LastBlockHeight() + 1} - txConfig := moduletestutil.MakeTestTxConfig() - _, _, err := simtestutil.SignCheckDeliver(t, txConfig, baseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) - if tc.expPass { - require.NoError(t, err) - } else { - require.Error(t, err) - } + t.Run(tc.desc, func(t *testing.T) { + header := header.Info{Height: baseApp.LastBlockHeight() + 1} + txConfig := moduletestutil.MakeTestTxConfig() + _, _, err := simtestutil.SignCheckDeliver(t, txConfig, baseApp, header, tc.msgs, "", tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) + if tc.expPass { + require.NoError(t, err) + } else { + require.Error(t, err) + } - for _, eb := range tc.expectedBalances { - checkBalance(t, baseApp, eb.addr, eb.coins, s.BankKeeper) - } + for _, eb := range tc.expectedBalances { + checkBalance(t, baseApp, eb.addr, eb.coins, s.BankKeeper) + } + }) } } @@ -438,8 +441,7 @@ func TestMsgSetSendEnabled(t *testing.T) { for _, tc := range testCases { t.Run(tc.desc, func(tt *testing.T) { header := header.Info{Height: s.App.LastBlockHeight() + 1} - txGen := moduletestutil.MakeTestTxConfig() - _, _, err = simtestutil.SignCheckDeliver(tt, txGen, s.App.BaseApp, header, tc.msgs, "", []uint64{0}, tc.accSeqs, tc.expSimPass, tc.expPass, priv1) + _, _, err = simtestutil.SignCheckDeliver(tt, s.TxConfig, s.App.BaseApp, header, tc.msgs, "", []uint64{0}, tc.accSeqs, tc.expSimPass, tc.expPass, priv1) if len(tc.expInError) > 0 { require.Error(tt, err) for _, exp := range tc.expInError { diff --git a/tests/integration/slashing/slashing_test.go b/tests/integration/slashing/slashing_test.go index 92891ce83266..0ac41336231a 100644 --- a/tests/integration/slashing/slashing_test.go +++ b/tests/integration/slashing/slashing_test.go @@ -17,13 +17,13 @@ import ( stakingkeeper "cosmossdk.io/x/staking/keeper" stakingtypes "cosmossdk.io/x/staking/types" + "github.com/cosmos/cosmos-sdk/client" codecaddress "github.com/cosmos/cosmos-sdk/codec/address" "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/testutil/configurator" "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) var ( @@ -56,6 +56,7 @@ func TestSlashingMsgs(t *testing.T) { stakingKeeper *stakingkeeper.Keeper bankKeeper bankkeeper.Keeper slashingKeeper keeper.Keeper + txConfig client.TxConfig ) app, err := sims.SetupWithConfiguration( @@ -70,7 +71,7 @@ func TestSlashingMsgs(t *testing.T) { ), depinject.Supply(log.NewNopLogger()), ), - startupCfg, &stakingKeeper, &bankKeeper, &slashingKeeper) + startupCfg, &stakingKeeper, &bankKeeper, &slashingKeeper, &txConfig) require.NoError(t, err) baseApp := app.BaseApp @@ -91,7 +92,6 @@ func TestSlashingMsgs(t *testing.T) { require.NoError(t, err) headerInfo := header.Info{Height: app.LastBlockHeight() + 1} - txConfig := moduletestutil.MakeTestTxConfig() _, _, err = sims.SignCheckDeliver(t, txConfig, app.BaseApp, headerInfo, []sdk.Msg{createValidatorMsg}, "", []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) require.True(t, sdk.Coins{genCoin.Sub(bondCoin)}.Equal(bankKeeper.GetAllBalances(ctxCheck, addr1))) diff --git a/tests/integration/tx/aminojson/aminojson_test.go b/tests/integration/tx/aminojson/aminojson_test.go index e68839f20350..47ff120867d8 100644 --- a/tests/integration/tx/aminojson/aminojson_test.go +++ b/tests/integration/tx/aminojson/aminojson_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "strings" "testing" "time" @@ -115,6 +116,19 @@ func TestAminoJSON_Equivalence(t *testing.T) { msg := gen.Draw(t, "msg") postFixPulsarMessage(msg) + // txBuilder.GetTx will fail if the msg has no signers + // so it does not make sense to run these cases, apparently. + signers, err := encCfg.TxConfig.SigningContext().GetSigners(msg) + if len(signers) == 0 { + // skip + return + } + if err != nil { + if strings.Contains(err.Error(), "empty address string is not allowed") { + return + } + require.NoError(t, err) + } gogo := tt.Gogo sanity := tt.Pulsar diff --git a/tests/integration/tx/decode_test.go b/tests/integration/tx/decode_test.go index 3458a363886d..9e7095e0d10f 100644 --- a/tests/integration/tx/decode_test.go +++ b/tests/integration/tx/decode_test.go @@ -1,6 +1,7 @@ package tx import ( + "strings" "testing" "github.com/cosmos/cosmos-proto/rapidproto" @@ -83,6 +84,16 @@ func TestDecode(t *testing.T) { gen := rapidproto.MessageGenerator(tt.Pulsar, tt.Opts) rapid.Check(t, func(t *rapid.T) { msg := gen.Draw(t, "msg") + signers, err := encCfg.TxConfig.SigningContext().GetSigners(msg) + if len(signers) == 0 { + return + } + if err != nil { + if strings.Contains(err.Error(), "empty address string is not allowed") { + return + } + require.NoError(t, err) + } gogo := tt.Gogo sanity := tt.Pulsar diff --git a/testutil/sims/simulation_helpers.go b/testutil/sims/simulation_helpers.go index 04b12f0d7398..a1147231c64b 100644 --- a/testutil/sims/simulation_helpers.go +++ b/testutil/sims/simulation_helpers.go @@ -11,13 +11,13 @@ import ( "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" + authtx "cosmossdk.io/x/auth/tx" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/kv" "github.com/cosmos/cosmos-sdk/types/module" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" ) @@ -51,11 +51,11 @@ func SetupSimulation(config simtypes.Config, dirPrefix, dbName string, verbose, // SimulationOperations retrieves the simulation params from the provided file path // and returns all the modules weighted operations -func SimulationOperations(app runtime.AppSimI, cdc codec.JSONCodec, config simtypes.Config) []simtypes.WeightedOperation { +func SimulationOperations(app runtime.AppSimI, cdc codec.Codec, config simtypes.Config) []simtypes.WeightedOperation { simState := module.SimulationState{ AppParams: make(simtypes.AppParams), Cdc: cdc, - TxConfig: moduletestutil.MakeTestTxConfig(), + TxConfig: authtx.NewTxConfig(cdc, authtx.DefaultSignModes), // TODO(tip): we should extract this from app BondDenom: sdk.DefaultBondDenom, } diff --git a/types/mempool/mempool_test.go b/types/mempool/mempool_test.go index b55470fcfd9f..003b5953c705 100644 --- a/types/mempool/mempool_test.go +++ b/types/mempool/mempool_test.go @@ -9,6 +9,8 @@ import ( "github.com/stretchr/testify/suite" protov2 "google.golang.org/protobuf/proto" + _ "cosmossdk.io/api/cosmos/counter/v1" + _ "cosmossdk.io/api/cosmos/crypto/secp256k1" "cosmossdk.io/log" "cosmossdk.io/x/auth/signing" diff --git a/types/registry/registry.go b/types/registry/registry.go deleted file mode 100644 index 9fe5c8facc9c..000000000000 --- a/types/registry/registry.go +++ /dev/null @@ -1,52 +0,0 @@ -package registry - -import ( - "sync" - - "github.com/cosmos/gogoproto/proto" - "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" - - "cosmossdk.io/x/tx/signing" -) - -var ( - mergedRegistryOnce sync.Once - mergedRegistry *protoregistry.Files - _ signing.ProtoFileResolver = lazyProtoRegistry{} -) - -// lazyProtoRegistry is a lazy loading wrapper around the global protobuf registry. -type lazyProtoRegistry struct{} - -func getRegistry() *protoregistry.Files { - var err error - mergedRegistryOnce.Do(func() { - mergedRegistry, err = proto.MergedRegistry() - if err != nil { - panic(err) - } - }) - return mergedRegistry -} - -func (l lazyProtoRegistry) FindFileByPath(s string) (protoreflect.FileDescriptor, error) { - reg := getRegistry() - return reg.FindFileByPath(s) -} - -func (l lazyProtoRegistry) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { - reg := getRegistry() - return reg.FindDescriptorByName(name) -} - -func (l lazyProtoRegistry) RangeFiles(f func(protoreflect.FileDescriptor) bool) { - reg := getRegistry() - reg.RangeFiles(f) -} - -// MergedProtoRegistry returns a lazy loading wrapper around the global protobuf registry, a merged registry -// containing both gogo proto and pulsar types. -func MergedProtoRegistry() signing.ProtoFileResolver { - return lazyProtoRegistry{} -} diff --git a/x/auth/go.mod b/x/auth/go.mod index efb84ef0b2d9..9b77b3d6c219 100644 --- a/x/auth/go.mod +++ b/x/auth/go.mod @@ -38,6 +38,8 @@ require ( ) require ( + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 // indirect + buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -167,6 +169,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules replace ( + cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core cosmossdk.io/depinject => ../../depinject cosmossdk.io/x/accounts => ../accounts diff --git a/x/auth/go.sum b/x/auth/go.sum index dd7ad289fa86..69c0efe215ab 100644 --- a/x/auth/go.sum +++ b/x/auth/go.sum @@ -1,7 +1,9 @@ +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 h1:7LKjxs607BNfGhtKLf+bi3SDJgpiGuTgOvemojsH8Hc= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1/go.mod h1:5GqIYthcy/ASmnKcaT26APpxMhZirnIHXHKki69zjWI= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 h1:VooqQ3rklp3PwMTAE890M76w/8Z01OPa7RdgU9posFE= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1/go.mod h1:9KmeMJUsSG3IiIwK63Lh1ipZJrwd7KHrWZseJeHukcs= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a h1:Zr++x1RCJWi+K8bTZsQKdjtL4SzyHBLGM3Fcn75iWf0= -cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a/go.mod h1:7B/5XWh1HYwJk3DzWeNoxOSI+nGx1m5UyYfHLFuKzkw= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= diff --git a/x/auth/tx/adapter.go b/x/auth/tx/adapter.go deleted file mode 100644 index 5ce5c8a91981..000000000000 --- a/x/auth/tx/adapter.go +++ /dev/null @@ -1,130 +0,0 @@ -package tx - -import ( - "google.golang.org/protobuf/types/known/anypb" - - basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" - multisigv1beta1 "cosmossdk.io/api/cosmos/crypto/multisig/v1beta1" - signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1" - txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" - txsigning "cosmossdk.io/x/tx/signing" - - "github.com/cosmos/cosmos-sdk/types/tx" -) - -// GetSigningTxData returns an x/tx/signing.TxData representation of a transaction for use in the signing -// API defined in x/tx. The reason for all of this conversion is that x/tx depends on the protoreflect API -// defined in google.golang.org/protobuf while x/auth/tx depends on the legacy proto API defined in -// github.com/gogo/protobuf and the downstream SDK fork of that library, github.com/cosmos/gogoproto. -// Therefore we need to convert between the two APIs. -func (w *wrapper) GetSigningTxData() txsigning.TxData { - body := w.tx.Body - authInfo := w.tx.AuthInfo - - msgs := make([]*anypb.Any, len(body.Messages)) - for i, msg := range body.Messages { - msgs[i] = &anypb.Any{ - TypeUrl: msg.TypeUrl, - Value: msg.Value, - } - } - - extOptions := make([]*anypb.Any, len(body.ExtensionOptions)) - for i, extOption := range body.ExtensionOptions { - extOptions[i] = &anypb.Any{ - TypeUrl: extOption.TypeUrl, - Value: extOption.Value, - } - } - - nonCriticalExtOptions := make([]*anypb.Any, len(body.NonCriticalExtensionOptions)) - for i, extOption := range body.NonCriticalExtensionOptions { - nonCriticalExtOptions[i] = &anypb.Any{ - TypeUrl: extOption.TypeUrl, - Value: extOption.Value, - } - } - - feeCoins := authInfo.Fee.Amount - feeAmount := make([]*basev1beta1.Coin, len(feeCoins)) - for i, coin := range feeCoins { - feeAmount[i] = &basev1beta1.Coin{ - Denom: coin.Denom, - Amount: coin.Amount.String(), - } - } - - txSignerInfos := make([]*txv1beta1.SignerInfo, len(authInfo.SignerInfos)) - for i, signerInfo := range authInfo.SignerInfos { - modeInfo := &txv1beta1.ModeInfo{} - adaptModeInfo(signerInfo.ModeInfo, modeInfo) - txSignerInfo := &txv1beta1.SignerInfo{ - PublicKey: &anypb.Any{ - TypeUrl: signerInfo.PublicKey.TypeUrl, - Value: signerInfo.PublicKey.Value, - }, - Sequence: signerInfo.Sequence, - ModeInfo: modeInfo, - } - txSignerInfos[i] = txSignerInfo - } - - txAuthInfo := &txv1beta1.AuthInfo{ - SignerInfos: txSignerInfos, - Fee: &txv1beta1.Fee{ - Amount: feeAmount, - GasLimit: authInfo.Fee.GasLimit, - Payer: authInfo.Fee.Payer, - Granter: authInfo.Fee.Granter, - }, - } - - txBody := &txv1beta1.TxBody{ - Messages: msgs, - Memo: body.Memo, - TimeoutHeight: body.TimeoutHeight, - ExtensionOptions: extOptions, - NonCriticalExtensionOptions: nonCriticalExtOptions, - } - txData := txsigning.TxData{ - AuthInfo: txAuthInfo, - AuthInfoBytes: w.getAuthInfoBytes(), - Body: txBody, - BodyBytes: w.getBodyBytes(), - } - return txData -} - -func adaptModeInfo(legacy *tx.ModeInfo, res *txv1beta1.ModeInfo) { - // handle nil modeInfo. this is permissible through the code path: - // https://github.com/cosmos/cosmos-sdk/blob/4a6a1e3cb8de459891cb0495052589673d14ef51/x/auth/tx/builder.go#L295 - // -> https://github.com/cosmos/cosmos-sdk/blob/b7841e3a76a38d069c1b9cb3d48368f7a67e9c26/x/auth/tx/sigs.go#L15-L17 - // when signature.Data is nil. - if legacy == nil { - return - } - - switch mi := legacy.Sum.(type) { - case *tx.ModeInfo_Single_: - res.Sum = &txv1beta1.ModeInfo_Single_{ - Single: &txv1beta1.ModeInfo_Single{ - Mode: signingv1beta1.SignMode(legacy.GetSingle().Mode), - }, - } - case *tx.ModeInfo_Multi_: - multiModeInfos := legacy.GetMulti().ModeInfos - modeInfos := make([]*txv1beta1.ModeInfo, len(multiModeInfos)) - for _, modeInfo := range multiModeInfos { - adaptModeInfo(modeInfo, &txv1beta1.ModeInfo{}) - } - res.Sum = &txv1beta1.ModeInfo_Multi_{ - Multi: &txv1beta1.ModeInfo_Multi{ - Bitarray: &multisigv1beta1.CompactBitArray{ - Elems: mi.Multi.Bitarray.Elems, - ExtraBitsStored: mi.Multi.Bitarray.ExtraBitsStored, - }, - ModeInfos: modeInfos, - }, - } - } -} diff --git a/x/auth/tx/aux_test.go b/x/auth/tx/aux_test.go index b728efa79a75..7321464f054c 100644 --- a/x/auth/tx/aux_test.go +++ b/x/auth/tx/aux_test.go @@ -38,6 +38,7 @@ var ( // Then it tests integrating the 2 AuxSignerData into a // client.TxBuilder created by the fee payer. func TestBuilderWithAux(t *testing.T) { + t.Skip("restore when we re-enable aux on the TX builder") encodingConfig := moduletestutil.MakeTestEncodingConfig() interfaceRegistry := encodingConfig.InterfaceRegistry txConfig := encodingConfig.TxConfig diff --git a/x/auth/tx/builder.go b/x/auth/tx/builder.go index 3d7234cc5078..531e40a2f672 100644 --- a/x/auth/tx/builder.go +++ b/x/auth/tx/builder.go @@ -1,352 +1,204 @@ package tx import ( - "bytes" "fmt" - "github.com/cosmos/gogoproto/proto" - protov2 "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" - errorsmod "cosmossdk.io/errors" - "cosmossdk.io/x/auth/ante" - authsigning "cosmossdk.io/x/auth/signing" + basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + multisigv1beta1 "cosmossdk.io/api/cosmos/crypto/multisig/v1beta1" + signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" + "cosmossdk.io/core/address" + authsign "cosmossdk.io/x/auth/signing" + "cosmossdk.io/x/tx/decode" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) -// wrapper is a wrapper around the tx.Tx proto.Message which retain the raw -// body and auth_info bytes. -type wrapper struct { - cdc codec.Codec - - tx *tx.Tx - - // bodyBz represents the protobuf encoding of TxBody. This should be encoding - // from the client using TxRaw if the tx was decoded from the wire - bodyBz []byte - - // authInfoBz represents the protobuf encoding of TxBody. This should be encoding - // from the client using TxRaw if the tx was decoded from the wire - authInfoBz []byte - - txBodyHasUnknownNonCriticals bool - - signers [][]byte - msgsV2 []protov2.Message -} - var ( - _ authsigning.Tx = &wrapper{} - _ client.TxBuilder = &wrapper{} - _ ante.HasExtensionOptionsTx = &wrapper{} - _ ExtensionOptionsTxBuilder = &wrapper{} + _ client.TxBuilder = &builder{} + _ ExtensionOptionsTxBuilder = &builder{} ) -// ExtensionOptionsTxBuilder defines a TxBuilder that can also set extensions. -type ExtensionOptionsTxBuilder interface { - client.TxBuilder - - SetExtensionOptions(...*codectypes.Any) - SetNonCriticalExtensionOptions(...*codectypes.Any) -} - -func newBuilder(cdc codec.Codec) *wrapper { - w := &wrapper{ - cdc: cdc, - tx: &tx.Tx{ - Body: &tx.TxBody{}, - AuthInfo: &tx.AuthInfo{ - Fee: &tx.Fee{}, - }, - }, - } - return w +func newBuilder(addressCodec address.Codec, decoder *decode.Decoder, codec codec.BinaryCodec) *builder { + return &builder{addressCodec: addressCodec, decoder: decoder, codec: codec} } -func (w *wrapper) GetMsgs() []sdk.Msg { - return w.tx.GetMsgs() -} +func newBuilderFromDecodedTx(addrCodec address.Codec, decoder *decode.Decoder, codec codec.BinaryCodec, decoded *gogoTxWrapper) (*builder, error) { + signatures := make([][]byte, len(decoded.decodedTx.Tx.Signatures)) + copy(signatures, decoded.decodedTx.Tx.Signatures) -func (w *wrapper) GetMsgsV2() ([]protov2.Message, error) { - if w.msgsV2 == nil { - err := w.initSignersAndMsgsV2() - if err != nil { - return nil, err + sigInfos := make([]*tx.SignerInfo, len(decoded.decodedTx.Tx.AuthInfo.SignerInfos)) + for i, sigInfo := range decoded.decodedTx.Tx.AuthInfo.SignerInfos { + modeInfoV1 := new(tx.ModeInfo) + fromV2ModeInfo(sigInfo.ModeInfo, modeInfoV1) + sigInfos[i] = &tx.SignerInfo{ + PublicKey: intoAnyV1([]*anypb.Any{sigInfo.PublicKey})[0], + ModeInfo: modeInfoV1, + Sequence: sigInfo.Sequence, } } - return w.msgsV2, nil -} - -func (w *wrapper) ValidateBasic() error { - if w.tx == nil { - return fmt.Errorf("bad Tx") - } - - if err := w.tx.ValidateBasic(); err != nil { - return err - } - - sigs := w.tx.Signatures - signers, err := w.GetSigners() + var payer []byte + if decoded.feePayer != nil { + payer = decoded.feePayer + } + + return &builder{ + addressCodec: addrCodec, + decoder: decoder, + codec: codec, + msgs: decoded.msgsV1, + timeoutHeight: decoded.GetTimeoutHeight(), + granter: decoded.FeeGranter(), + payer: payer, + unordered: decoded.GetUnordered(), + memo: decoded.GetMemo(), + gasLimit: decoded.GetGas(), + fees: decoded.GetFee(), + signerInfos: sigInfos, + signatures: signatures, + extensionOptions: decoded.GetExtensionOptions(), + nonCriticalExtensionOptions: decoded.GetNonCriticalExtensionOptions(), + }, nil +} + +type builder struct { + addressCodec address.Codec + decoder *decode.Decoder + codec codec.BinaryCodec + + msgs []sdk.Msg + timeoutHeight uint64 + granter []byte + payer []byte + unordered bool + memo string + gasLimit uint64 + fees sdk.Coins + signerInfos []*tx.SignerInfo + signatures [][]byte + + extensionOptions []*codectypes.Any + nonCriticalExtensionOptions []*codectypes.Any +} + +func (w *builder) GetTx() authsign.Tx { + buildTx, err := w.getTx() if err != nil { - return err - } - - if len(sigs) != len(signers) { - return errorsmod.Wrapf( - sdkerrors.ErrUnauthorized, - "wrong number of signers; expected %d, got %d", len(signers), len(sigs), - ) + panic(err) } - - return nil + return buildTx } -func (w *wrapper) getBodyBytes() []byte { - if len(w.bodyBz) == 0 { - // if bodyBz is empty, then marshal the body. bodyBz will generally - // be set to nil whenever SetBody is called so the result of calling - // this method should always return the correct bytes. Note that after - // decoding bodyBz is derived from TxRaw so that it matches what was - // transmitted over the wire - var err error - w.bodyBz, err = proto.Marshal(w.tx.Body) - if err != nil { - panic(err) - } - } - return w.bodyBz +var marshalOption = proto.MarshalOptions{ + Deterministic: true, } -func (w *wrapper) getAuthInfoBytes() []byte { - if len(w.authInfoBz) == 0 { - // if authInfoBz is empty, then marshal the body. authInfoBz will generally - // be set to nil whenever SetAuthInfo is called so the result of calling - // this method should always return the correct bytes. Note that after - // decoding authInfoBz is derived from TxRaw so that it matches what was - // transmitted over the wire - var err error - w.authInfoBz, err = proto.Marshal(w.tx.AuthInfo) - if err != nil { - panic(err) - } +func (w *builder) getTx() (*gogoTxWrapper, error) { + anyMsgs, err := msgsV1toAnyV2(w.msgs) + if err != nil { + return nil, err } - return w.authInfoBz -} - -func (w *wrapper) initSignersAndMsgsV2() error { - var err error - w.signers, w.msgsV2, err = w.tx.GetSigners(w.cdc) - return err -} - -func (w *wrapper) GetSigners() ([][]byte, error) { - if w.signers == nil { - err := w.initSignersAndMsgsV2() - if err != nil { - return nil, err - } + body := &txv1beta1.TxBody{ + Messages: anyMsgs, + Memo: w.memo, + TimeoutHeight: w.timeoutHeight, + Unordered: w.unordered, + ExtensionOptions: intoAnyV2(w.extensionOptions), + NonCriticalExtensionOptions: intoAnyV2(w.nonCriticalExtensionOptions), } - return w.signers, nil -} - -func (w *wrapper) GetPubKeys() ([]cryptotypes.PubKey, error) { - signerInfos := w.tx.AuthInfo.SignerInfos - pks := make([]cryptotypes.PubKey, len(signerInfos)) - for i, si := range signerInfos { - // NOTE: it is okay to leave this nil if there is no PubKey in the SignerInfo. - // PubKey's can be left unset in SignerInfo. - if si.PublicKey == nil { - continue - } - - pkAny := si.PublicKey.GetCachedValue() - pk, ok := pkAny.(cryptotypes.PubKey) - if ok { - pks[i] = pk - } else { - return nil, errorsmod.Wrapf(sdkerrors.ErrLogic, "Expecting PubKey, got: %T", pkAny) - } + fee, err := w.getFee() + if err != nil { + return nil, fmt.Errorf("unable to parse fee: %w", err) } - - return pks, nil -} - -func (w *wrapper) GetGas() uint64 { - return w.tx.AuthInfo.Fee.GasLimit -} - -func (w *wrapper) GetFee() sdk.Coins { - return w.tx.AuthInfo.Fee.Amount -} - -func (w *wrapper) FeePayer() []byte { - feePayer := w.tx.AuthInfo.Fee.Payer - if feePayer != "" { - feePayerAddr, err := w.cdc.InterfaceRegistry().SigningContext().AddressCodec().StringToBytes(feePayer) - if err != nil { - panic(err) - } - return feePayerAddr + authInfo := &txv1beta1.AuthInfo{ + SignerInfos: intoV2SignerInfo(w.signerInfos), + Fee: fee, + Tip: nil, // deprecated } - // use first signer as default if no payer specified - signers, err := w.GetSigners() + bodyBytes, err := marshalOption.Marshal(body) if err != nil { - return nil + return nil, err } - return signers[0] -} - -func (w *wrapper) FeeGranter() []byte { - return w.tx.FeeGranter(w.cdc) -} - -func (w *wrapper) GetMemo() string { - return w.tx.Body.Memo -} - -// GetTimeoutHeight returns the transaction's timeout height (if set). -func (w *wrapper) GetTimeoutHeight() uint64 { - return w.tx.Body.TimeoutHeight -} - -// GetUnordered returns the transaction's unordered field (if set). -func (w *wrapper) GetUnordered() bool { - return w.tx.Body.Unordered -} - -func (w *wrapper) GetSignaturesV2() ([]signing.SignatureV2, error) { - signerInfos := w.tx.AuthInfo.SignerInfos - sigs := w.tx.Signatures - pubKeys, err := w.GetPubKeys() + authInfoBytes, err := marshalOption.Marshal(authInfo) if err != nil { return nil, err } - n := len(signerInfos) - res := make([]signing.SignatureV2, n) - - for i, si := range signerInfos { - // handle nil signatures (in case of simulation) - if si.ModeInfo == nil { - res[i] = signing.SignatureV2{ - PubKey: pubKeys[i], - } - } else { - var err error - sigData, err := ModeInfoAndSigToSignatureData(si.ModeInfo, sigs[i]) - if err != nil { - return nil, err - } - // sequence number is functionally a transaction nonce and referred to as such in the SDK - nonce := si.GetSequence() - res[i] = signing.SignatureV2{ - PubKey: pubKeys[i], - Data: sigData, - Sequence: nonce, - } - } + txRawBytes, err := marshalOption.Marshal(&txv1beta1.TxRaw{ + BodyBytes: bodyBytes, + AuthInfoBytes: authInfoBytes, + Signatures: w.signatures, + }) + if err != nil { + return nil, err } - return res, nil -} - -func (w *wrapper) SetMsgs(msgs ...sdk.Msg) error { - anys, err := tx.SetMsgs(msgs) + decodedTx, err := w.decoder.Decode(txRawBytes) if err != nil { - return err + return nil, err } - w.tx.Body.Messages = anys - - // set bodyBz to nil because the cached bodyBz no longer matches tx.Body - w.bodyBz = nil - - // reset signers and msgsV2 - w.signers = nil - w.msgsV2 = nil - - return nil + return newWrapperFromDecodedTx(w.addressCodec, w.codec, decodedTx) } -// SetTimeoutHeight sets the transaction's height timeout. -func (w *wrapper) SetTimeoutHeight(height uint64) { - w.tx.Body.TimeoutHeight = height - - // set bodyBz to nil because the cached bodyBz no longer matches tx.Body - w.bodyBz = nil -} - -func (w *wrapper) SetUnordered(v bool) { - w.tx.Body.Unordered = v - - // set bodyBz to nil because the cached bodyBz no longer matches tx.Body - w.bodyBz = nil -} - -func (w *wrapper) SetMemo(memo string) { - w.tx.Body.Memo = memo - - // set bodyBz to nil because the cached bodyBz no longer matches tx.Body - w.bodyBz = nil -} - -func (w *wrapper) SetGasLimit(limit uint64) { - if w.tx.AuthInfo.Fee == nil { - w.tx.AuthInfo.Fee = &tx.Fee{} +func msgsV1toAnyV2(msgs []sdk.Msg) ([]*anypb.Any, error) { + anys := make([]*codectypes.Any, len(msgs)) + for i, msg := range msgs { + anyMsg, err := codectypes.NewAnyWithValue(msg) + if err != nil { + return nil, err + } + anys[i] = anyMsg } - w.tx.AuthInfo.Fee.GasLimit = limit - - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil + return intoAnyV2(anys), nil } -func (w *wrapper) SetFeeAmount(coins sdk.Coins) { - if w.tx.AuthInfo.Fee == nil { - w.tx.AuthInfo.Fee = &tx.Fee{} +func intoV2Fees(fees sdk.Coins) []*basev1beta1.Coin { + coins := make([]*basev1beta1.Coin, len(fees)) + for i, c := range fees { + coins[i] = &basev1beta1.Coin{ + Denom: c.Denom, + Amount: c.Amount.String(), + } } + return coins +} - w.tx.AuthInfo.Fee.Amount = coins - - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil +func (w *builder) SetMsgs(msgs ...sdk.Msg) error { + w.msgs = msgs + return nil } -func (w *wrapper) SetFeePayer(feePayer sdk.AccAddress) { - if w.tx.AuthInfo.Fee == nil { - w.tx.AuthInfo.Fee = &tx.Fee{} - } +// SetTimeoutHeight sets the transaction's height timeout. +func (w *builder) SetTimeoutHeight(height uint64) { w.timeoutHeight = height } - w.tx.AuthInfo.Fee.Payer = feePayer.String() +func (w *builder) SetUnordered(v bool) { w.unordered = v } - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil -} +func (w *builder) SetMemo(memo string) { w.memo = memo } -func (w *wrapper) SetFeeGranter(feeGranter sdk.AccAddress) { - if w.tx.AuthInfo.Fee == nil { - w.tx.AuthInfo.Fee = &tx.Fee{} - } +func (w *builder) SetGasLimit(limit uint64) { w.gasLimit = limit } - w.tx.AuthInfo.Fee.Granter = feeGranter.String() +func (w *builder) SetFeeAmount(coins sdk.Coins) { w.fees = coins } - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil -} +func (w *builder) SetFeePayer(feePayer sdk.AccAddress) { w.payer = feePayer } + +func (w *builder) SetFeeGranter(feeGranter sdk.AccAddress) { w.granter = feeGranter } -func (w *wrapper) SetSignatures(signatures ...signing.SignatureV2) error { +func (w *builder) SetSignatures(signatures ...signing.SignatureV2) error { n := len(signatures) signerInfos := make([]*tx.SignerInfo, n) rawSigs := make([][]byte, n) @@ -377,181 +229,137 @@ func (w *wrapper) SetSignatures(signatures ...signing.SignatureV2) error { return nil } -func (w *wrapper) setSignerInfos(infos []*tx.SignerInfo) { - w.tx.AuthInfo.SignerInfos = infos - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil -} +func (w *builder) setSignerInfos(infos []*tx.SignerInfo) { w.signerInfos = infos } -func (w *wrapper) setSignerInfoAtIndex(index int, info *tx.SignerInfo) { - signers, err := w.GetSigners() - if err != nil { - panic(err) - } +func (w *builder) setSignatures(sigs [][]byte) { w.signatures = sigs } - if w.tx.AuthInfo.SignerInfos == nil { - w.tx.AuthInfo.SignerInfos = make([]*tx.SignerInfo, len(signers)) - } +func (w *builder) SetExtensionOptions(extOpts ...*codectypes.Any) { w.extensionOptions = extOpts } - w.tx.AuthInfo.SignerInfos[index] = info - // set authInfoBz to nil because the cached authInfoBz no longer matches tx.AuthInfo - w.authInfoBz = nil +func (w *builder) SetNonCriticalExtensionOptions(extOpts ...*codectypes.Any) { + w.nonCriticalExtensionOptions = extOpts } -func (w *wrapper) setSignatures(sigs [][]byte) { - w.tx.Signatures = sigs -} +func (w *builder) AddAuxSignerData(data tx.AuxSignerData) error { return fmt.Errorf("not supported") } -func (w *wrapper) setSignatureAtIndex(index int, sig []byte) { - signers, err := w.GetSigners() - if err != nil { - panic(err) +func (w *builder) getFee() (fee *txv1beta1.Fee, err error) { + granterStr := "" + if w.granter != nil { + granterStr, err = w.addressCodec.BytesToString(w.granter) + if err != nil { + return nil, err + } } - if w.tx.Signatures == nil { - w.tx.Signatures = make([][]byte, len(signers)) + payerStr := "" + if w.payer != nil { + payerStr, err = w.addressCodec.BytesToString(w.payer) + if err != nil { + return nil, err + } } - - w.tx.Signatures[index] = sig -} - -func (w *wrapper) GetTx() authsigning.Tx { - return w -} - -func (w *wrapper) GetProtoTx() *tx.Tx { - return w.tx -} - -func (w *wrapper) GetRawTx() *tx.TxRaw { - return &tx.TxRaw{ - BodyBytes: w.bodyBz, - AuthInfoBytes: w.authInfoBz, - Signatures: w.tx.Signatures, + fee = &txv1beta1.Fee{ + Amount: intoV2Fees(w.fees), + GasLimit: w.gasLimit, + Payer: payerStr, + Granter: granterStr, } -} -// Deprecated: AsAny extracts proto Tx and wraps it into Any. -// NOTE: You should probably use `GetProtoTx` if you want to serialize the transaction. -func (w *wrapper) AsAny() *codectypes.Any { - return codectypes.UnsafePackAny(w.tx) + return fee, nil } -// WrapTx creates a TxBuilder wrapper around a tx.Tx proto message. -func WrapTx(protoTx *tx.Tx) client.TxBuilder { - return &wrapper{ - tx: protoTx, +func intoAnyV2(v1s []*codectypes.Any) []*anypb.Any { + v2s := make([]*anypb.Any, len(v1s)) + for i, v1 := range v1s { + v2s[i] = &anypb.Any{ + TypeUrl: v1.TypeUrl, + Value: v1.Value, + } } + return v2s } -func (w *wrapper) GetExtensionOptions() []*codectypes.Any { - return w.tx.Body.ExtensionOptions -} - -func (w *wrapper) GetNonCriticalExtensionOptions() []*codectypes.Any { - return w.tx.Body.NonCriticalExtensionOptions -} - -func (w *wrapper) SetExtensionOptions(extOpts ...*codectypes.Any) { - w.tx.Body.ExtensionOptions = extOpts - w.bodyBz = nil -} - -func (w *wrapper) SetNonCriticalExtensionOptions(extOpts ...*codectypes.Any) { - w.tx.Body.NonCriticalExtensionOptions = extOpts - w.bodyBz = nil -} - -func (w *wrapper) AddAuxSignerData(data tx.AuxSignerData) error { - err := data.ValidateBasic() - if err != nil { - return err +func intoV2SignerInfo(v1s []*tx.SignerInfo) []*txv1beta1.SignerInfo { + v2s := make([]*txv1beta1.SignerInfo, len(v1s)) + for i, v1 := range v1s { + modeInfoV2 := new(txv1beta1.ModeInfo) + intoV2ModeInfo(v1.ModeInfo, modeInfoV2) + v2 := &txv1beta1.SignerInfo{ + PublicKey: intoAnyV2([]*codectypes.Any{v1.PublicKey})[0], + ModeInfo: modeInfoV2, + Sequence: v1.Sequence, + } + v2s[i] = v2 } + return v2s +} - w.bodyBz = data.SignDoc.BodyBytes - - var body tx.TxBody - err = w.cdc.Unmarshal(w.bodyBz, &body) - if err != nil { - return err +func intoV2ModeInfo(v1 *tx.ModeInfo, v2 *txv1beta1.ModeInfo) { + // handle nil modeInfo. this is permissible through the code path: + // https://github.com/cosmos/cosmos-sdk/blob/4a6a1e3cb8de459891cb0495052589673d14ef51/x/auth/tx/builder.go#L295 + // -> https://github.com/cosmos/cosmos-sdk/blob/b7841e3a76a38d069c1b9cb3d48368f7a67e9c26/x/auth/tx/sigs.go#L15-L17 + // when signature.Data is nil. + if v1 == nil { + return } - if w.tx.Body.Memo != "" && w.tx.Body.Memo != body.Memo { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has memo %s, got %s in AuxSignerData", w.tx.Body.Memo, body.Memo) - } - if w.tx.Body.TimeoutHeight != 0 && w.tx.Body.TimeoutHeight != body.TimeoutHeight { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has timeout height %d, got %d in AuxSignerData", w.tx.Body.TimeoutHeight, body.TimeoutHeight) - } - if len(w.tx.Body.ExtensionOptions) != 0 { - if len(w.tx.Body.ExtensionOptions) != len(body.ExtensionOptions) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has %d extension options, got %d in AuxSignerData", len(w.tx.Body.ExtensionOptions), len(body.ExtensionOptions)) - } - for i, o := range w.tx.Body.ExtensionOptions { - if !o.Equal(body.ExtensionOptions[i]) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has extension option %+v at index %d, got %+v in AuxSignerData", o, i, body.ExtensionOptions[i]) - } - } - } - if len(w.tx.Body.NonCriticalExtensionOptions) != 0 { - if len(w.tx.Body.NonCriticalExtensionOptions) != len(body.NonCriticalExtensionOptions) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has %d non-critical extension options, got %d in AuxSignerData", len(w.tx.Body.NonCriticalExtensionOptions), len(body.NonCriticalExtensionOptions)) - } - for i, o := range w.tx.Body.NonCriticalExtensionOptions { - if !o.Equal(body.NonCriticalExtensionOptions[i]) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has non-critical extension option %+v at index %d, got %+v in AuxSignerData", o, i, body.NonCriticalExtensionOptions[i]) - } + switch mi := v1.Sum.(type) { + case *tx.ModeInfo_Single_: + v2.Sum = &txv1beta1.ModeInfo_Single_{ + Single: &txv1beta1.ModeInfo_Single{ + Mode: signingv1beta1.SignMode(v1.GetSingle().Mode), + }, } - } - if len(w.tx.Body.Messages) != 0 { - if len(w.tx.Body.Messages) != len(body.Messages) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has %d Msgs, got %d in AuxSignerData", len(w.tx.Body.Messages), len(body.Messages)) + case *tx.ModeInfo_Multi_: + multiModeInfos := v1.GetMulti().ModeInfos + modeInfos := make([]*txv1beta1.ModeInfo, len(multiModeInfos)) + for i, modeInfo := range multiModeInfos { + modeInfos[i] = new(txv1beta1.ModeInfo) + intoV2ModeInfo(modeInfo, modeInfos[i]) } - for i, o := range w.tx.Body.Messages { - if !o.Equal(body.Messages[i]) { - return sdkerrors.ErrInvalidRequest.Wrapf("TxBuilder has Msg %+v at index %d, got %+v in AuxSignerData", o, i, body.Messages[i]) - } + v2.Sum = &txv1beta1.ModeInfo_Multi_{ + Multi: &txv1beta1.ModeInfo_Multi{ + Bitarray: &multisigv1beta1.CompactBitArray{ + Elems: mi.Multi.Bitarray.Elems, + ExtraBitsStored: mi.Multi.Bitarray.ExtraBitsStored, + }, + ModeInfos: modeInfos, + }, } } +} - w.SetMemo(body.Memo) - w.SetTimeoutHeight(body.TimeoutHeight) - w.SetExtensionOptions(body.ExtensionOptions...) - w.SetNonCriticalExtensionOptions(body.NonCriticalExtensionOptions...) - msgs := make([]sdk.Msg, len(body.Messages)) - for i, msgAny := range body.Messages { - msgs[i] = msgAny.GetCachedValue().(sdk.Msg) - } - err = w.SetMsgs(msgs...) - if err != nil { - return err +func fromV2ModeInfo(v2 *txv1beta1.ModeInfo, v1 *tx.ModeInfo) { + // Check if v2 is nil. If so, return as there's nothing to convert. + if v2 == nil { + return } - // Get the aux signer's index in GetSigners. - signerIndex := -1 - signers, err := w.GetSigners() - if err != nil { - return err - } - - for i, signer := range signers { - addrBz, err := w.cdc.InterfaceRegistry().SigningContext().AddressCodec().StringToBytes(data.Address) - if err != nil { - return err + switch mi := v2.Sum.(type) { + case *txv1beta1.ModeInfo_Single_: + // Convert from v2 single mode to v1 single mode + v1.Sum = &tx.ModeInfo_Single_{ + Single: &tx.ModeInfo_Single{ + Mode: signing.SignMode(mi.Single.Mode), + }, } - if bytes.Equal(signer, addrBz) { - signerIndex = i + case *txv1beta1.ModeInfo_Multi_: + // Convert from v2 multi mode to v1 multi mode + multiModeInfos := mi.Multi.ModeInfos + modeInfos := make([]*tx.ModeInfo, len(multiModeInfos)) + + // Recursively convert each modeInfo + for i, modeInfo := range multiModeInfos { + modeInfos[i] = &tx.ModeInfo{} + fromV2ModeInfo(modeInfo, modeInfos[i]) + } + v1.Sum = &tx.ModeInfo_Multi_{ + Multi: &tx.ModeInfo_Multi{ + Bitarray: &cryptotypes.CompactBitArray{ + Elems: mi.Multi.Bitarray.Elems, + ExtraBitsStored: mi.Multi.Bitarray.ExtraBitsStored, + }, + ModeInfos: modeInfos, + }, } } - if signerIndex < 0 { - return sdkerrors.ErrLogic.Wrapf("address %s is not a signer", data.Address) - } - - w.setSignerInfoAtIndex(signerIndex, &tx.SignerInfo{ - PublicKey: data.SignDoc.PublicKey, - ModeInfo: &tx.ModeInfo{Sum: &tx.ModeInfo_Single_{Single: &tx.ModeInfo_Single{Mode: data.Mode}}}, - Sequence: data.SignDoc.Sequence, - }) - w.setSignatureAtIndex(signerIndex, data.Sig) - - return nil } diff --git a/x/auth/tx/builder_test.go b/x/auth/tx/builder_test.go deleted file mode 100644 index 2fb88905beb2..000000000000 --- a/x/auth/tx/builder_test.go +++ /dev/null @@ -1,335 +0,0 @@ -package tx - -import ( - "testing" - - "github.com/stretchr/testify/require" - - errorsmod "cosmossdk.io/errors" - sdkmath "cosmossdk.io/math" - - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/legacy" - "github.com/cosmos/cosmos-sdk/codec/testutil" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - txtypes "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/types/tx/signing" -) - -func TestTxBuilder(t *testing.T) { - _, pubkey, addr := testdata.KeyTestPubAddr() - - marshaler := codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) - txBuilder := newBuilder(marshaler) - - memo := "testmemo" - msgs := []sdk.Msg{testdata.NewTestMsg(addr)} - accSeq := uint64(2) // Arbitrary account sequence - any, err := codectypes.NewAnyWithValue(pubkey) - require.NoError(t, err) - - var signerInfo []*txtypes.SignerInfo - signerInfo = append(signerInfo, &txtypes.SignerInfo{ - PublicKey: any, - ModeInfo: &txtypes.ModeInfo{ - Sum: &txtypes.ModeInfo_Single_{ - Single: &txtypes.ModeInfo_Single{ - Mode: signing.SignMode_SIGN_MODE_DIRECT, - }, - }, - }, - Sequence: accSeq, - }) - - sig := signing.SignatureV2{ - PubKey: pubkey, - Data: &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: legacy.Cdc.MustMarshal(pubkey), - }, - Sequence: accSeq, - } - - fee := txtypes.Fee{Amount: sdk.NewCoins(sdk.NewInt64Coin("atom", 150)), GasLimit: 20000} - - t.Log("verify that authInfo bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from getAuthInfoBytes") - authInfo := &txtypes.AuthInfo{ - Fee: &fee, - SignerInfos: signerInfo, - } - - authInfoBytes := marshaler.MustMarshal(authInfo) - - require.NotEmpty(t, authInfoBytes) - - t.Log("verify that body bytes encoded with DefaultTxEncoder and decoded with DefaultTxDecoder can be retrieved from getBodyBytes") - anys := make([]*codectypes.Any, len(msgs)) - - for i, msg := range msgs { - var err error - anys[i], err = codectypes.NewAnyWithValue(msg) - if err != nil { - panic(err) - } - } - - txBody := &txtypes.TxBody{ - Memo: memo, - Messages: anys, - } - bodyBytes := marshaler.MustMarshal(txBody) - require.NotEmpty(t, bodyBytes) - require.Empty(t, txBuilder.getBodyBytes()) - - t.Log("verify that calling the SetMsgs, SetMemo results in the correct getBodyBytes") - require.NotEqual(t, bodyBytes, txBuilder.getBodyBytes()) - err = txBuilder.SetMsgs(msgs...) - require.NoError(t, err) - require.NotEqual(t, bodyBytes, txBuilder.getBodyBytes()) - txBuilder.SetMemo(memo) - require.Equal(t, bodyBytes, txBuilder.getBodyBytes()) - require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) - pks, err := txBuilder.GetPubKeys() - require.NoError(t, err) - require.Empty(t, pks) - - t.Log("verify that updated AuthInfo results in the correct getAuthInfoBytes and GetPubKeys") - require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) - txBuilder.SetFeeAmount(fee.Amount) - require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) - txBuilder.SetGasLimit(fee.GasLimit) - require.NotEqual(t, authInfoBytes, txBuilder.getAuthInfoBytes()) - err = txBuilder.SetSignatures(sig) - require.NoError(t, err) - - // once fee, gas and signerInfos are all set, AuthInfo bytes should match - require.Equal(t, authInfoBytes, txBuilder.getAuthInfoBytes()) - - require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) - pks, err = txBuilder.GetPubKeys() - require.NoError(t, err) - require.Equal(t, 1, len(pks)) - require.True(t, pubkey.Equals(pks[0])) - - any, err = codectypes.NewAnyWithValue(testdata.NewTestMsg()) - require.NoError(t, err) - txBuilder.SetExtensionOptions(any) - require.Equal(t, []*codectypes.Any{any}, txBuilder.GetExtensionOptions()) - txBuilder.SetNonCriticalExtensionOptions(any) - require.Equal(t, []*codectypes.Any{any}, txBuilder.GetNonCriticalExtensionOptions()) - - txBuilder = &wrapper{} - require.NotPanics(t, func() { - _ = txBuilder.GetMsgs() - }) -} - -func TestSetSignaturesNoPublicKey(t *testing.T) { - _, pubkey, _ := testdata.KeyTestPubAddr() - txBuilder := newBuilder(nil) - sig2 := signing.SignatureV2{ - Data: &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: legacy.Cdc.MustMarshal(pubkey), - }, - Sequence: 1, - } - err := txBuilder.SetSignatures(sig2) - require.NoError(t, err) -} - -func TestBuilderValidateBasic(t *testing.T) { - // keys and addresses - _, pubKey1, addr1 := testdata.KeyTestPubAddr() - _, pubKey2, addr2 := testdata.KeyTestPubAddr() - - // msg and signatures - msg1 := testdata.NewTestMsg(addr1, addr2) - feeAmount := testdata.NewTestFeeAmount() - msgs := []sdk.Msg{msg1} - - // require to fail validation upon invalid fee - badFeeAmount := testdata.NewTestFeeAmount() - badFeeAmount[0].Amount = sdkmath.NewInt(-5) - txBuilder := newBuilder(testutil.CodecOptions{}.NewCodec()) - - var sig1, sig2 signing.SignatureV2 - sig1 = signing.SignatureV2{ - PubKey: pubKey1, - Data: &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: legacy.Cdc.MustMarshal(pubKey1), - }, - Sequence: 0, // Arbitrary account sequence - } - - sig2 = signing.SignatureV2{ - PubKey: pubKey2, - Data: &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: legacy.Cdc.MustMarshal(pubKey2), - }, - Sequence: 0, // Arbitrary account sequence - } - - err := txBuilder.SetMsgs(msgs...) - require.NoError(t, err) - txBuilder.SetGasLimit(200000) - err = txBuilder.SetSignatures(sig1, sig2) - require.NoError(t, err) - txBuilder.SetFeeAmount(badFeeAmount) - err = txBuilder.ValidateBasic() - require.Error(t, err) - _, code, _ := errorsmod.ABCIInfo(err, false) - require.Equal(t, sdkerrors.ErrInsufficientFee.ABCICode(), code) - - // require to fail validation when no signatures exist - err = txBuilder.SetSignatures() - require.NoError(t, err) - txBuilder.SetFeeAmount(feeAmount) - err = txBuilder.ValidateBasic() - require.Error(t, err) - _, code, _ = errorsmod.ABCIInfo(err, false) - require.Equal(t, sdkerrors.ErrNoSignatures.ABCICode(), code) - - // require to fail with nil values for tx, authinfo - err = txBuilder.SetMsgs(msgs...) - require.NoError(t, err) - err = txBuilder.ValidateBasic() - require.Error(t, err) - - // require to fail validation when signatures do not match expected signers - err = txBuilder.SetSignatures(sig1) - require.NoError(t, err) - - err = txBuilder.ValidateBasic() - require.Error(t, err) - _, code, _ = errorsmod.ABCIInfo(err, false) - require.Equal(t, sdkerrors.ErrUnauthorized.ABCICode(), code) - - require.Error(t, err) - txBuilder.SetFeeAmount(feeAmount) - err = txBuilder.SetSignatures(sig1, sig2) - require.NoError(t, err) - err = txBuilder.ValidateBasic() - require.NoError(t, err) - - // gas limit too high - txBuilder.SetGasLimit(txtypes.MaxGasWanted + 1) - err = txBuilder.ValidateBasic() - require.Error(t, err) - txBuilder.SetGasLimit(txtypes.MaxGasWanted - 1) - err = txBuilder.ValidateBasic() - require.NoError(t, err) - - // bad builder structs - - // missing body - body := txBuilder.tx.Body - txBuilder.tx.Body = nil - err = txBuilder.ValidateBasic() - require.Error(t, err) - txBuilder.tx.Body = body - err = txBuilder.ValidateBasic() - require.NoError(t, err) - - // missing fee - f := txBuilder.tx.AuthInfo.Fee - txBuilder.tx.AuthInfo.Fee = nil - err = txBuilder.ValidateBasic() - require.Error(t, err) - txBuilder.tx.AuthInfo.Fee = f - err = txBuilder.ValidateBasic() - require.NoError(t, err) - - // missing AuthInfo - authInfo := txBuilder.tx.AuthInfo - txBuilder.tx.AuthInfo = nil - err = txBuilder.ValidateBasic() - require.Error(t, err) - txBuilder.tx.AuthInfo = authInfo - err = txBuilder.ValidateBasic() - require.NoError(t, err) - - // missing tx - txBuilder.tx = nil - err = txBuilder.ValidateBasic() - require.Error(t, err) -} - -func TestBuilderFeePayer(t *testing.T) { - // keys and addresses - _, _, addr1 := testdata.KeyTestPubAddr() - _, _, addr2 := testdata.KeyTestPubAddr() - _, _, addr3 := testdata.KeyTestPubAddr() - - // msg and signatures - msg1 := testdata.NewTestMsg(addr1, addr2) - feeAmount := testdata.NewTestFeeAmount() - msgs := []sdk.Msg{msg1} - - cases := map[string]struct { - txFeePayer sdk.AccAddress - expectedSigners [][]byte - expectedPayer []byte - }{ - "no fee payer specified": { - expectedSigners: [][]byte{addr1, addr2}, - expectedPayer: addr1, - }, - "secondary signer set as fee payer": { - txFeePayer: addr2, - expectedSigners: [][]byte{addr1, addr2}, - expectedPayer: addr2, - }, - "outside signer set as fee payer": { - txFeePayer: addr3, - expectedSigners: [][]byte{addr1, addr2, addr3}, - expectedPayer: addr3, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - // setup basic tx - txBuilder := newBuilder(testutil.CodecOptions{}.NewCodec()) - err := txBuilder.SetMsgs(msgs...) - require.NoError(t, err) - txBuilder.SetGasLimit(200000) - txBuilder.SetFeeAmount(feeAmount) - - // set fee payer - txBuilder.SetFeePayer(tc.txFeePayer) - // and check it updates fields properly - signers, err := txBuilder.GetSigners() - require.NoError(t, err) - require.Equal(t, tc.expectedSigners, signers) - require.Equal(t, tc.expectedPayer, txBuilder.FeePayer()) - }) - } -} - -func TestBuilderFeeGranter(t *testing.T) { - // keys and addresses - _, _, addr1 := testdata.KeyTestPubAddr() - - // msg and signatures - msg1 := testdata.NewTestMsg(addr1, addr2) - feeAmount := testdata.NewTestFeeAmount() - msgs := []sdk.Msg{msg1} - - txBuilder := newBuilder(testutil.CodecOptions{}.NewCodec()) - err := txBuilder.SetMsgs(msgs...) - require.NoError(t, err) - txBuilder.SetGasLimit(200000) - txBuilder.SetFeeAmount(feeAmount) - - require.Empty(t, txBuilder.GetTx().FeeGranter()) - - // set fee granter - txBuilder.SetFeeGranter(addr1) - require.Equal(t, addr1.String(), sdk.AccAddress(txBuilder.GetTx().FeeGranter()).String()) -} diff --git a/x/auth/tx/config.go b/x/auth/tx/config.go index 858851b1c693..e796902ee910 100644 --- a/x/auth/tx/config.go +++ b/x/auth/tx/config.go @@ -3,7 +3,9 @@ package tx import ( "fmt" + "cosmossdk.io/core/address" authcodec "cosmossdk.io/x/auth/codec" + txdecode "cosmossdk.io/x/tx/decode" txsigning "cosmossdk.io/x/tx/signing" "cosmossdk.io/x/tx/signing/aminojson" "cosmossdk.io/x/tx/signing/direct" @@ -24,6 +26,7 @@ type config struct { jsonEncoder sdk.TxEncoder protoCodec codec.Codec signingContext *txsigning.Context + txDecoder *txdecode.Decoder } // ConfigOptions define the configuration of a TxConfig when calling NewTxConfigWithOptions. @@ -172,18 +175,6 @@ func NewTxConfigWithOptions(protoCodec codec.Codec, configOptions ConfigOptions) jsonDecoder: configOptions.JSONDecoder, jsonEncoder: configOptions.JSONEncoder, } - if configOptions.ProtoDecoder == nil { - txConfig.decoder = DefaultTxDecoder(protoCodec) - } - if configOptions.ProtoEncoder == nil { - txConfig.encoder = DefaultTxEncoder() - } - if configOptions.JSONDecoder == nil { - txConfig.jsonDecoder = DefaultJSONTxDecoder(protoCodec) - } - if configOptions.JSONEncoder == nil { - txConfig.jsonEncoder = DefaultJSONTxEncoder(protoCodec) - } var err error if configOptions.SigningContext == nil { @@ -201,6 +192,25 @@ func NewTxConfigWithOptions(protoCodec codec.Codec, configOptions ConfigOptions) return nil, err } } + + if configOptions.ProtoDecoder == nil { + dec, err := txdecode.NewDecoder(txdecode.Options{SigningContext: configOptions.SigningContext}) + if err != nil { + return nil, err + } + txConfig.decoder = txV2toInterface(configOptions.SigningOptions.AddressCodec, protoCodec, dec) + txConfig.txDecoder = dec + } + if configOptions.ProtoEncoder == nil { + txConfig.encoder = DefaultTxEncoder() + } + if configOptions.JSONDecoder == nil { + txConfig.jsonDecoder = DefaultJSONTxDecoder(configOptions.SigningOptions.AddressCodec, protoCodec, txConfig.txDecoder) + } + if configOptions.JSONEncoder == nil { + txConfig.jsonEncoder = DefaultJSONTxEncoder(protoCodec) + } + txConfig.signingContext = configOptions.SigningContext if configOptions.SigningHandler != nil { @@ -217,17 +227,17 @@ func NewTxConfigWithOptions(protoCodec codec.Codec, configOptions ConfigOptions) } func (g config) NewTxBuilder() client.TxBuilder { - return newBuilder(g.protoCodec) + return newBuilder(g.signingContext.AddressCodec(), g.txDecoder, g.protoCodec) } // WrapTxBuilder returns a builder from provided transaction func (g config) WrapTxBuilder(newTx sdk.Tx) (client.TxBuilder, error) { - newBuilder, ok := newTx.(*wrapper) + gogoTx, ok := newTx.(*gogoTxWrapper) if !ok { - return nil, fmt.Errorf("expected %T, got %T", &wrapper{}, newTx) + return nil, fmt.Errorf("expected %T, got %T", &gogoTxWrapper{}, newTx) } - return newBuilder, nil + return newBuilderFromDecodedTx(g.signingContext.AddressCodec(), g.txDecoder, g.protoCodec, gogoTx) } func (g config) SignModeHandler() *txsigning.HandlerMap { @@ -253,3 +263,13 @@ func (g config) TxJSONDecoder() sdk.TxDecoder { func (g config) SigningContext() *txsigning.Context { return g.signingContext } + +func txV2toInterface(addrCodec address.Codec, cdc codec.BinaryCodec, decoder *txdecode.Decoder) func([]byte) (sdk.Tx, error) { + return func(txBytes []byte) (sdk.Tx, error) { + decodedTx, err := decoder.Decode(txBytes) + if err != nil { + return nil, err + } + return newWrapperFromDecodedTx(addrCodec, cdc, decodedTx) + } +} diff --git a/x/auth/tx/config/depinject.go b/x/auth/tx/config/depinject.go index dff980a5a790..2ee9467ccb5c 100644 --- a/x/auth/tx/config/depinject.go +++ b/x/auth/tx/config/depinject.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + gogoproto "github.com/cosmos/gogoproto/proto" "google.golang.org/grpc" "google.golang.org/grpc/codes" grpcstatus "google.golang.org/grpc/status" @@ -25,7 +26,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/registry" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -61,7 +61,7 @@ type ModuleOutputs struct { } func ProvideProtoRegistry() txsigning.ProtoFileResolver { - return registry.MergedProtoRegistry() + return gogoproto.HybridResolver } func ProvideModule(in ModuleInputs) ModuleOutputs { diff --git a/x/auth/tx/config_test.go b/x/auth/tx/config_test.go index e109f69f1e03..10cc68e94515 100644 --- a/x/auth/tx/config_test.go +++ b/x/auth/tx/config_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + _ "cosmossdk.io/api/cosmos/crypto/secp256k1" "cosmossdk.io/x/auth/tx" txtestutil "cosmossdk.io/x/auth/tx/testutil" diff --git a/x/auth/tx/decoder.go b/x/auth/tx/decoder.go index d74c7f206597..ed576ddf68c2 100644 --- a/x/auth/tx/decoder.go +++ b/x/auth/tx/decoder.go @@ -1,174 +1,53 @@ package tx import ( - "fmt" + "google.golang.org/protobuf/encoding/protojson" - "google.golang.org/protobuf/encoding/protowire" - - errorsmod "cosmossdk.io/errors" + txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" + "cosmossdk.io/core/address" + "cosmossdk.io/x/tx/decode" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/unknownproto" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx" ) -// DefaultTxDecoder returns a default protobuf TxDecoder using the provided Marshaler. -func DefaultTxDecoder(cdc codec.Codec) sdk.TxDecoder { +// DefaultJSONTxDecoder returns a default protobuf JSON TxDecoder using the provided Marshaler. +func DefaultJSONTxDecoder(addrCodec address.Codec, cdc codec.BinaryCodec, decoder *decode.Decoder) sdk.TxDecoder { + jsonUnmarshaller := protojson.UnmarshalOptions{ + AllowPartial: false, + DiscardUnknown: false, + } return func(txBytes []byte) (sdk.Tx, error) { - // Make sure txBytes follow ADR-027. - err := rejectNonADR027TxRaw(txBytes) - if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) - } - - var raw tx.TxRaw - - // reject all unknown proto fields in the root TxRaw - err = unknownproto.RejectUnknownFieldsStrict(txBytes, &raw, cdc.InterfaceRegistry()) - if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) - } - - err = cdc.Unmarshal(txBytes, &raw) + jsonTx := new(txv1beta1.Tx) + err := jsonUnmarshaller.Unmarshal(txBytes, jsonTx) if err != nil { return nil, err } - var body tx.TxBody - - // allow non-critical unknown fields in TxBody - txBodyHasUnknownNonCriticals, err := unknownproto.RejectUnknownFields(raw.BodyBytes, &body, true, cdc.InterfaceRegistry()) + // need to convert jsonTx into raw tx. + bodyBytes, err := marshalOption.Marshal(jsonTx.Body) if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) + return nil, err } - err = cdc.Unmarshal(raw.BodyBytes, &body) + authInfoBytes, err := marshalOption.Marshal(jsonTx.AuthInfo) if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) + return nil, err } - var authInfo tx.AuthInfo - - // reject all unknown proto fields in AuthInfo - err = unknownproto.RejectUnknownFieldsStrict(raw.AuthInfoBytes, &authInfo, cdc.InterfaceRegistry()) + protoTxBytes, err := marshalOption.Marshal(&txv1beta1.TxRaw{ + BodyBytes: bodyBytes, + AuthInfoBytes: authInfoBytes, + Signatures: jsonTx.Signatures, + }) if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) + return nil, err } - err = cdc.Unmarshal(raw.AuthInfoBytes, &authInfo) + decodedTx, err := decoder.Decode(protoTxBytes) if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) - } - - theTx := &tx.Tx{ - Body: &body, - AuthInfo: &authInfo, - Signatures: raw.Signatures, - } - - return &wrapper{ - tx: theTx, - bodyBz: raw.BodyBytes, - authInfoBz: raw.AuthInfoBytes, - txBodyHasUnknownNonCriticals: txBodyHasUnknownNonCriticals, - cdc: cdc, - }, nil - } -} - -// DefaultJSONTxDecoder returns a default protobuf JSON TxDecoder using the provided Marshaler. -func DefaultJSONTxDecoder(cdc codec.Codec) sdk.TxDecoder { - return func(txBytes []byte) (sdk.Tx, error) { - var theTx tx.Tx - err := cdc.UnmarshalJSON(txBytes, &theTx) - if err != nil { - return nil, errorsmod.Wrap(sdkerrors.ErrTxDecode, err.Error()) - } - - return &wrapper{ - tx: &theTx, - cdc: cdc, - }, nil - } -} - -// rejectNonADR027TxRaw rejects txBytes that do not follow ADR-027. This is NOT -// a generic ADR-027 checker, it only applies decoding TxRaw. Specifically, it -// only checks that: -// - field numbers are in ascending order (1, 2, and potentially multiple 3s), -// - and varints are as short as possible. -// All other ADR-027 edge cases (e.g. default values) are not applicable with -// TxRaw. -func rejectNonADR027TxRaw(txBytes []byte) error { - // Make sure all fields are ordered in ascending order with this variable. - prevTagNum := protowire.Number(0) - - for len(txBytes) > 0 { - tagNum, wireType, m := protowire.ConsumeTag(txBytes) - if m < 0 { - return fmt.Errorf("invalid length; %w", protowire.ParseError(m)) - } - // TxRaw only has bytes fields. - if wireType != protowire.BytesType { - return fmt.Errorf("expected %d wire type, got %d", protowire.BytesType, wireType) - } - // Make sure fields are ordered in ascending order. - if tagNum < prevTagNum { - return fmt.Errorf("txRaw must follow ADR-027, got tagNum %d after tagNum %d", tagNum, prevTagNum) - } - prevTagNum = tagNum - - // All 3 fields of TxRaw have wireType == 2, so their next component - // is a varint, so we can safely call ConsumeVarint here. - // Byte structure: - // Inner fields are verified in `DefaultTxDecoder` - lengthPrefix, m := protowire.ConsumeVarint(txBytes[m:]) - if m < 0 { - return fmt.Errorf("invalid length; %w", protowire.ParseError(m)) - } - // We make sure that this varint is as short as possible. - n := varintMinLength(lengthPrefix) - if n != m { - return fmt.Errorf("length prefix varint for tagNum %d is not as short as possible, read %d, only need %d", tagNum, m, n) - } - - // Skip over the bytes that store fieldNumber and wireType bytes. - _, _, m = protowire.ConsumeField(txBytes) - if m < 0 { - return fmt.Errorf("invalid length; %w", protowire.ParseError(m)) + return nil, err } - txBytes = txBytes[m:] - } - - return nil -} - -// varintMinLength returns the minimum number of bytes necessary to encode an -// uint using varint encoding. -func varintMinLength(n uint64) int { - switch { - // Note: 1<= 0 { + messageName = messageName[i+len("/"):] + } + typ := proto.MessageType(messageName) + if typ == nil { + return nil, fmt.Errorf("cannot find type: %s", anyPB.TypeUrl) + } + v1 := reflect.New(typ.Elem()).Interface().(proto.Message) + err := cdc.Unmarshal(anyPB.Value, v1) + if err != nil { + return nil, err + } + return v1, nil +} diff --git a/x/auth/tx/gogotx_test.go b/x/auth/tx/gogotx_test.go new file mode 100644 index 000000000000..336f5e5a88d7 --- /dev/null +++ b/x/auth/tx/gogotx_test.go @@ -0,0 +1 @@ +package tx diff --git a/x/auth/tx/legacy_amino_json.go b/x/auth/tx/legacy_amino_json.go index 5ed918917422..1da32c737e9c 100644 --- a/x/auth/tx/legacy_amino_json.go +++ b/x/auth/tx/legacy_amino_json.go @@ -43,16 +43,16 @@ func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode) } - protoTx, ok := tx.(*wrapper) + protoTx, ok := tx.(*gogoTxWrapper) if !ok { return nil, fmt.Errorf("can only handle a protobuf Tx, got %T", tx) } - if protoTx.txBodyHasUnknownNonCriticals { + if protoTx.decodedTx.TxBodyHasUnknownNonCriticals { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, aminoNonCriticalFieldsError) } - body := protoTx.tx.Body + body := protoTx.decodedTx.Tx.Body if len(body.ExtensionOptions) != 0 || len(body.NonCriticalExtensionOptions) != 0 { return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "%s does not support protobuf extension options", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) @@ -68,8 +68,8 @@ func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, legacytx.StdFee{ Amount: protoTx.GetFee(), Gas: protoTx.GetGas(), - Payer: protoTx.tx.AuthInfo.Fee.Payer, - Granter: protoTx.tx.AuthInfo.Fee.Granter, + Payer: protoTx.decodedTx.Tx.AuthInfo.Fee.Payer, + Granter: protoTx.decodedTx.Tx.AuthInfo.Fee.Granter, }, tx.GetMsgs(), protoTx.GetMemo(), ), nil diff --git a/x/auth/tx/legacy_amino_json_test.go b/x/auth/tx/legacy_amino_json_test.go deleted file mode 100644 index dc72a0ff38b7..000000000000 --- a/x/auth/tx/legacy_amino_json_test.go +++ /dev/null @@ -1,223 +0,0 @@ -package tx - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" - - "cosmossdk.io/x/auth/migrations/legacytx" - "cosmossdk.io/x/auth/signing" - "cosmossdk.io/x/auth/types" - txsigning "cosmossdk.io/x/tx/signing" - "cosmossdk.io/x/tx/signing/aminojson" - - "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/codec/legacy" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - sdk "github.com/cosmos/cosmos-sdk/types" - signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" -) - -var ( - _, pubkey1, addr1 = testdata.KeyTestPubAddr() - _, _, addr2 = testdata.KeyTestPubAddr() - - coins = sdk.Coins{sdk.NewInt64Coin("foocoin", 10)} - gas = uint64(10000) - msg = &types.MsgUpdateParams{Authority: addr1.String()} - memo = "foo" - timeout = uint64(10) -) - -func buildTx(t *testing.T, bldr *wrapper) { - t.Helper() - bldr.SetFeeAmount(coins) - bldr.SetGasLimit(gas) - bldr.SetMemo(memo) - bldr.SetTimeoutHeight(timeout) - require.NoError(t, bldr.SetMsgs(msg)) -} - -func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { - legacytx.RegressionTestingAminoCodec = codec.NewLegacyAmino() - var ( - chainID = "test-chain" - accNum uint64 = 7 - seqNum uint64 = 7 - ) - - testcases := []struct { - name string - signer string - malleate func(*wrapper) - expectedSignBz []byte - }{ - { - "signer which is also fee payer (no tips)", addr1.String(), - func(w *wrapper) {}, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo), - }, - - { - "explicit fee payer", addr1.String(), - func(w *wrapper) { w.SetFeePayer(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo), - }, - { - "explicit fee granter", addr1.String(), - func(w *wrapper) { w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo), - }, - { - "explicit fee payer and fee granter", addr1.String(), - func(w *wrapper) { - w.SetFeePayer(addr2) - w.SetFeeGranter(addr2) - }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo), - }, - } - - handler := signModeLegacyAminoJSONHandler{} - for _, tc := range testcases { - tc := tc - t.Run(tc.name, func(t *testing.T) { - bldr := newBuilder(nil) - buildTx(t, bldr) - tx := bldr.GetTx() - tc.malleate(bldr) - - signingData := signing.SignerData{ - Address: tc.signer, - ChainID: chainID, - AccountNumber: accNum, - Sequence: seqNum, - } - signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) - require.NoError(t, err) - - require.Equal(t, tc.expectedSignBz, signBz) - }) - } - - bldr := newBuilder(nil) - buildTx(t, bldr) - tx := bldr.GetTx() - signingData := signing.SignerData{ - Address: addr1.String(), - ChainID: chainID, - AccountNumber: accNum, - Sequence: seqNum, - PubKey: pubkey1, - } - - // expect error with wrong sign mode - _, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) - require.Error(t, err) - - // expect error with extension options - bldr = newBuilder(nil) - buildTx(t, bldr) - any, err := cdctypes.NewAnyWithValue(testdata.NewTestMsg()) - require.NoError(t, err) - bldr.tx.Body.ExtensionOptions = []*cdctypes.Any{any} - tx = bldr.GetTx() - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) - require.Error(t, err) - - // expect error with non-critical extension options - bldr = newBuilder(nil) - buildTx(t, bldr) - bldr.tx.Body.NonCriticalExtensionOptions = []*cdctypes.Any{any} - tx = bldr.GetTx() - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) - require.Error(t, err) -} - -func TestLegacyAminoJSONHandler_AllGetSignBytesComparison(t *testing.T) { - var ( - chainID = "test-chain" - accNum uint64 - seqNum uint64 = 7 - ) - - modeHandler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{}) - mode, _ := signing.APISignModeToInternal(modeHandler.Mode()) - legacyAmino := codec.NewLegacyAmino() - legacytx.RegressionTestingAminoCodec = legacyAmino - legacy.RegisterAminoMsg(legacyAmino, &types.MsgUpdateParams{}, "cosmos-sdk/x/auth/MsgUpdateParams") - - testcases := []struct { - name string - signer string - malleate func(*wrapper) - expectedSignBz []byte - }{ - { - "signer which is also fee payer (no tips)", addr1.String(), - func(w *wrapper) {}, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas}, []sdk.Msg{msg}, memo), - }, - - { - "explicit fee payer", addr1.String(), - func(w *wrapper) { w.SetFeePayer(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String()}, []sdk.Msg{msg}, memo), - }, - { - "explicit fee granter", addr1.String(), - func(w *wrapper) { w.SetFeeGranter(addr2) }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Granter: addr2.String()}, []sdk.Msg{msg}, memo), - }, - { - "explicit fee payer and fee granter", addr1.String(), - func(w *wrapper) { - w.SetFeePayer(addr2) - w.SetFeeGranter(addr2) - }, - legacytx.StdSignBytes(chainID, accNum, seqNum, timeout, legacytx.StdFee{Amount: coins, Gas: gas, Payer: addr2.String(), Granter: addr2.String()}, []sdk.Msg{msg}, memo), - }, - } - - handler := signModeLegacyAminoJSONHandler{} - for _, tc := range testcases { - tc := tc - t.Run(tc.name, func(t *testing.T) { - bldr := newBuilder(nil) - buildTx(t, bldr) - tx := bldr.GetTx() - tc.malleate(bldr) - - signingData := signing.SignerData{ - Address: tc.signer, - ChainID: chainID, - AccountNumber: accNum, - Sequence: seqNum, - PubKey: pubkey1, - } - signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) - require.NoError(t, err) - - // compare with new signing - newSignBz, err := signing.GetSignBytesAdapter(context.Background(), txsigning.NewHandlerMap(modeHandler), mode, signingData, tx) - require.NoError(t, err) - - require.Equal(t, string(tc.expectedSignBz), string(signBz)) - require.Equal(t, string(tc.expectedSignBz), string(newSignBz)) - }) - } - - legacytx.RegressionTestingAminoCodec = nil -} - -func TestLegacyAminoJSONHandler_DefaultMode(t *testing.T) { - handler := signModeLegacyAminoJSONHandler{} - require.Equal(t, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, handler.DefaultMode()) -} - -func TestLegacyAminoJSONHandler_Modes(t *testing.T) { - handler := signModeLegacyAminoJSONHandler{} - require.Equal(t, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}, handler.Modes()) -} diff --git a/x/auth/tx/query.go b/x/auth/tx/query.go index 318c44cb851c..ace17bfbe048 100644 --- a/x/auth/tx/query.go +++ b/x/auth/tx/query.go @@ -136,16 +136,18 @@ func mkTxResult(txConfig client.TxConfig, resTx *coretypes.ResultTx, resBlock *c if err != nil { return nil, err } - p, ok := txb.(intoAny) + p, ok := txb.(*gogoTxWrapper) if !ok { - return nil, fmt.Errorf("expecting a type implementing intoAny, got: %T", txb) + return nil, fmt.Errorf("unexpected type, wnted gogoTxWrapper, got: %T", txb) } - any := p.AsAny() - return sdk.NewResponseResultTx(resTx, any, resBlock.Block.Time.Format(time.RFC3339)), nil -} -// Deprecated: this interface is used only internally for scenario we are -// deprecating (StdTxConfig support) -type intoAny interface { - AsAny() *codectypes.Any + tx, err := p.AsTx() + if err != nil { + return nil, err + } + anyTx, err := codectypes.NewAnyWithValue(tx) + if err != nil { + return nil, err + } + return sdk.NewResponseResultTx(resTx, anyTx, resBlock.Block.Time.Format(time.RFC3339)), nil } diff --git a/x/auth/tx/service.go b/x/auth/tx/service.go index e0b6bb79e2be..782b7e4f953b 100644 --- a/x/auth/tx/service.go +++ b/x/auth/tx/service.go @@ -2,7 +2,6 @@ package tx import ( "context" - "fmt" "strings" gogogrpc "github.com/cosmos/gogoproto/grpc" @@ -60,7 +59,7 @@ func (s txServer) GetTxsEvent(ctx context.Context, req *txtypes.GetTxsEventReque for i, tx := range result.Txs { protoTx, ok := tx.Tx.GetCachedValue().(*txtypes.Tx) if !ok { - return nil, status.Errorf(codes.Internal, "expected %T, got %T", txtypes.Tx{}, tx.Tx.GetCachedValue()) + return nil, status.Errorf(codes.Internal, "getting cached value failed expected %T, got %T", txtypes.Tx{}, tx.Tx.GetCachedValue()) } txsList[i] = protoTx @@ -139,13 +138,6 @@ func (s txServer) GetTx(ctx context.Context, req *txtypes.GetTxRequest) (*txtype }, nil } -// protoTxProvider is a type which can provide a proto transaction. It is a -// workaround to get access to the wrapper TxBuilder's method GetProtoTx(). -// ref: https://github.com/cosmos/cosmos-sdk/issues/10347 -type protoTxProvider interface { - GetProtoTx() *txtypes.Tx -} - // GetBlockWithTxs returns a block with decoded txs. func (s txServer) GetBlockWithTxs(ctx context.Context, req *txtypes.GetBlockWithTxsRequest) (*txtypes.GetBlockWithTxsResponse, error) { if req == nil { @@ -186,11 +178,11 @@ func (s txServer) GetBlockWithTxs(ctx context.Context, req *txtypes.GetBlockWith if err != nil { return err } - p, ok := txb.(protoTxProvider) - if !ok { - return sdkerrors.ErrTxDecode.Wrapf("could not cast %T to %T", txb, txtypes.Tx{}) + p, err := txb.(interface{ AsTx() (*txtypes.Tx, error) }).AsTx() + if err != nil { + return err } - txs = append(txs, p.GetProtoTx()) + txs = append(txs, p) return nil } if req.Pagination != nil && req.Pagination.Reverse { @@ -223,14 +215,28 @@ func (s txServer) BroadcastTx(ctx context.Context, req *txtypes.BroadcastTxReque } // TxEncode implements the ServiceServer.TxEncode RPC method. -func (s txServer) TxEncode(ctx context.Context, req *txtypes.TxEncodeRequest) (*txtypes.TxEncodeResponse, error) { +func (s txServer) TxEncode(_ context.Context, req *txtypes.TxEncodeRequest) (*txtypes.TxEncodeResponse, error) { if req.Tx == nil { return nil, status.Error(codes.InvalidArgument, "invalid empty tx") } - txBuilder := &wrapper{tx: req.Tx} + bodyBytes, err := s.clientCtx.Codec.Marshal(req.Tx.Body) + if err != nil { + return nil, err + } + + authInfoBytes, err := s.clientCtx.Codec.Marshal(req.Tx.AuthInfo) + if err != nil { + return nil, err + } + + raw := &txtypes.TxRaw{ + BodyBytes: bodyBytes, + AuthInfoBytes: authInfoBytes, + Signatures: req.Tx.Signatures, + } - encodedBytes, err := s.clientCtx.TxConfig.TxEncoder()(txBuilder) + encodedBytes, err := s.clientCtx.Codec.Marshal(raw) if err != nil { return nil, err } @@ -241,7 +247,7 @@ func (s txServer) TxEncode(ctx context.Context, req *txtypes.TxEncodeRequest) (* } // TxEncodeAmino implements the ServiceServer.TxEncodeAmino RPC method. -func (s txServer) TxEncodeAmino(ctx context.Context, req *txtypes.TxEncodeAminoRequest) (*txtypes.TxEncodeAminoResponse, error) { +func (s txServer) TxEncodeAmino(_ context.Context, req *txtypes.TxEncodeAminoRequest) (*txtypes.TxEncodeAminoResponse, error) { if req.AminoJson == "" { return nil, status.Error(codes.InvalidArgument, "invalid empty tx json") } @@ -263,7 +269,7 @@ func (s txServer) TxEncodeAmino(ctx context.Context, req *txtypes.TxEncodeAminoR } // TxDecode implements the ServiceServer.TxDecode RPC method. -func (s txServer) TxDecode(ctx context.Context, req *txtypes.TxDecodeRequest) (*txtypes.TxDecodeResponse, error) { +func (s txServer) TxDecode(_ context.Context, req *txtypes.TxDecodeRequest) (*txtypes.TxDecodeResponse, error) { if req.TxBytes == nil { return nil, status.Error(codes.InvalidArgument, "invalid empty tx bytes") } @@ -273,18 +279,17 @@ func (s txServer) TxDecode(ctx context.Context, req *txtypes.TxDecodeRequest) (* return nil, err } - txWrapper, ok := txb.(*wrapper) - if ok { - return &txtypes.TxDecodeResponse{ - Tx: txWrapper.tx, - }, nil + tx, err := txb.(interface{ AsTx() (*txtypes.Tx, error) }).AsTx() // TODO: maybe we can break the Tx interface to add this also + if err != nil { + return nil, err } - - return nil, fmt.Errorf("expected %T, got %T", &wrapper{}, txb) + return &txtypes.TxDecodeResponse{ + Tx: tx, + }, nil } // TxDecodeAmino implements the ServiceServer.TxDecodeAmino RPC method. -func (s txServer) TxDecodeAmino(ctx context.Context, req *txtypes.TxDecodeAminoRequest) (*txtypes.TxDecodeAminoResponse, error) { +func (s txServer) TxDecodeAmino(_ context.Context, req *txtypes.TxDecodeAminoRequest) (*txtypes.TxDecodeAminoResponse, error) { if req.AminoBinary == nil { return nil, status.Error(codes.InvalidArgument, "invalid empty tx bytes") } diff --git a/x/auth/tx/sigs.go b/x/auth/tx/sigs.go index 7d4716acec75..1c182567f9cf 100644 --- a/x/auth/tx/sigs.go +++ b/x/auth/tx/sigs.go @@ -3,6 +3,8 @@ package tx import ( "fmt" + txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -55,15 +57,15 @@ func SignatureDataToModeInfoAndSig(data signing.SignatureData) (*tx.ModeInfo, [] // ModeInfoAndSigToSignatureData converts a ModeInfo and raw bytes signature to a SignatureData or returns // an error -func ModeInfoAndSigToSignatureData(modeInfo *tx.ModeInfo, sig []byte) (signing.SignatureData, error) { - switch modeInfo := modeInfo.Sum.(type) { - case *tx.ModeInfo_Single_: +func ModeInfoAndSigToSignatureData(modeInfoPb *txv1beta1.ModeInfo, sig []byte) (signing.SignatureData, error) { + switch modeInfo := modeInfoPb.Sum.(type) { + case *txv1beta1.ModeInfo_Single_: return &signing.SingleSignatureData{ - SignMode: modeInfo.Single.Mode, + SignMode: signing.SignMode(modeInfo.Single.Mode), Signature: sig, }, nil - case *tx.ModeInfo_Multi_: + case *txv1beta1.ModeInfo_Multi_: multi := modeInfo.Multi sigs, err := decodeMultisignatures(sig) @@ -80,7 +82,10 @@ func ModeInfoAndSigToSignatureData(modeInfo *tx.ModeInfo, sig []byte) (signing.S } return &signing.MultiSignatureData{ - BitArray: multi.Bitarray, + BitArray: &cryptotypes.CompactBitArray{ + ExtraBitsStored: multi.Bitarray.ExtraBitsStored, + Elems: multi.Bitarray.Elems, + }, Signatures: sigv2s, }, nil diff --git a/x/auth/tx/testutil/suite.go b/x/auth/tx/testutil/suite.go index a89fe73b5f82..4ed2cd7c3c76 100644 --- a/x/auth/tx/testutil/suite.go +++ b/x/auth/tx/testutil/suite.go @@ -318,7 +318,9 @@ func (s *TxConfigTestSuite) TestWrapTxBuilder() { err := txBuilder.SetMsgs(msg) s.Require().NoError(err) - newTxBldr, err := s.TxConfig.WrapTxBuilder(txBuilder.GetTx()) + tx := txBuilder.GetTx() + newTxBldr, err := s.TxConfig.WrapTxBuilder(tx) s.Require().NoError(err) - s.Require().Equal(txBuilder, newTxBldr) + txBuilder.SetFeePayer(tx.FeePayer()) // NOTE: fee payer will be populated even if empty. + s.Require().Equal(txBuilder.GetTx(), newTxBldr.GetTx()) } diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index bf4e8eebd173..878841e55424 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -11,6 +11,7 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" + _ "cosmossdk.io/api/cosmos/crypto/secp256k1" "cosmossdk.io/core/genesis" "cosmossdk.io/math" storetypes "cosmossdk.io/store/types" diff --git a/x/slashing/go.mod b/x/slashing/go.mod index 19c073fa950d..2228dfff650d 100644 --- a/x/slashing/go.mod +++ b/x/slashing/go.mod @@ -30,6 +30,8 @@ require ( ) require ( + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 // indirect + buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 // indirect cosmossdk.io/x/accounts v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/bank v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/tx v0.13.0 // indirect @@ -168,6 +170,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules replace ( + cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core cosmossdk.io/depinject => ../../depinject cosmossdk.io/x/accounts => ../accounts diff --git a/x/slashing/go.sum b/x/slashing/go.sum index 19173486bd87..4ff18636aa80 100644 --- a/x/slashing/go.sum +++ b/x/slashing/go.sum @@ -1,7 +1,9 @@ +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 h1:7LKjxs607BNfGhtKLf+bi3SDJgpiGuTgOvemojsH8Hc= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1/go.mod h1:5GqIYthcy/ASmnKcaT26APpxMhZirnIHXHKki69zjWI= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 h1:VooqQ3rklp3PwMTAE890M76w/8Z01OPa7RdgU9posFE= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1/go.mod h1:9KmeMJUsSG3IiIwK63Lh1ipZJrwd7KHrWZseJeHukcs= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a h1:Zr++x1RCJWi+K8bTZsQKdjtL4SzyHBLGM3Fcn75iWf0= -cosmossdk.io/api v0.7.3-0.20231113122742-912390d5fc4a/go.mod h1:7B/5XWh1HYwJk3DzWeNoxOSI+nGx1m5UyYfHLFuKzkw= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= diff --git a/x/tx/decode/decode.go b/x/tx/decode/decode.go index ba1414ece7f4..459e7ed8db60 100644 --- a/x/tx/decode/decode.go +++ b/x/tx/decode/decode.go @@ -97,6 +97,7 @@ func (d *Decoder) Decode(txBytes []byte) (*DecodedTx, error) { var signers [][]byte var msgs []proto.Message + seenSigners := map[string]struct{}{} for _, anyMsg := range body.Messages { msg, signerErr := anyutil.Unpack(anyMsg, fileResolver, d.signingCtx.TypeResolver()) if signerErr != nil { @@ -107,7 +108,14 @@ func (d *Decoder) Decode(txBytes []byte) (*DecodedTx, error) { if signerErr != nil { return nil, errors.Wrap(ErrTxDecode, signerErr.Error()) } - signers = append(signers, ss...) + for _, s := range ss { + _, seen := seenSigners[string(s)] + if seen { + continue + } + signers = append(signers, s) + seenSigners[string(s)] = struct{}{} + } } return &DecodedTx{ diff --git a/x/tx/go.mod b/x/tx/go.mod index cc9c8510d2b4..c3c469a39561 100644 --- a/x/tx/go.mod +++ b/x/tx/go.mod @@ -21,6 +21,8 @@ require ( ) require ( + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 // indirect + buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -34,3 +36,5 @@ require ( google.golang.org/grpc v1.61.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace cosmossdk.io/api => ../../api diff --git a/x/tx/go.sum b/x/tx/go.sum index fe45c7cb2cbf..30f6a7b6337b 100644 --- a/x/tx/go.sum +++ b/x/tx/go.sum @@ -1,5 +1,7 @@ -cosmossdk.io/api v0.7.2 h1:BO3i5fvKMKvfaUiMkCznxViuBEfyWA/k6w2eAF6q1C4= -cosmossdk.io/api v0.7.2/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1 h1:7LKjxs607BNfGhtKLf+bi3SDJgpiGuTgOvemojsH8Hc= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.32.0-20230509103710-5e5b9fdd0180.1/go.mod h1:5GqIYthcy/ASmnKcaT26APpxMhZirnIHXHKki69zjWI= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1 h1:VooqQ3rklp3PwMTAE890M76w/8Z01OPa7RdgU9posFE= +buf.build/gen/go/tendermint/tendermint/protocolbuffers/go v1.32.0-20231117195010-33ed361a9051.1/go.mod h1:9KmeMJUsSG3IiIwK63Lh1ipZJrwd7KHrWZseJeHukcs= cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= diff --git a/x/tx/signing/textual/e2e_test.go b/x/tx/signing/textual/e2e_test.go index 1f6dc09b66a5..e759d403f446 100644 --- a/x/tx/signing/textual/e2e_test.go +++ b/x/tx/signing/textual/e2e_test.go @@ -71,6 +71,10 @@ func TestE2EJSONTestcases(t *testing.T) { AuthInfoBytes: authInfoBz, }) require.NoError(t, err) + decodeWant, err := hex.DecodeString(tc.Cbor) + require.NoError(t, err) + t.Log("got: " + string(signDoc)) + t.Log("want " + string(decodeWant)) require.Equal(t, tc.Cbor, hex.EncodeToString(signDoc)) }) } diff --git a/x/tx/signing/textual/internal/testdata/e2e.json b/x/tx/signing/textual/internal/testdata/e2e.json index 2ab0e30f5b96..aaf11f9428b8 100644 --- a/x/tx/signing/textual/internal/testdata/e2e.json +++ b/x/tx/signing/textual/internal/testdata/e2e.json @@ -213,7 +213,7 @@ "@type": "/cosmos.gov.v1.MsgVote", "proposal_id": 1, "voter": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", - "option": "VOTE_OPTION_YES", + "option": "VOTE_OPTION_ONE", "metadata": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @" } ], @@ -326,7 +326,7 @@ { "title": "Message (2/2)", "content": "/cosmos.gov.v1.MsgVote", "indent": 1 }, { "title": "Proposal id", "content": "1", "indent": 2 }, { "title": "Voter", "content": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", "indent": 2 }, - { "title": "Option", "content": "VOTE_OPTION_YES", "indent": 2 }, + { "title": "Option", "content": "VOTE_OPTION_ONE", "indent": 2 }, { "title": "Metadata", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @", @@ -374,6 +374,6 @@ { "content": "End of Non critical extension options", "expert": true }, { "title": "Hash of raw bytes", "content": "e7be7808de4985bd609811d2a32805cb233c168c7d247d61d37f4a6dd4cf3a2a", "expert": true } ], - "cbor": "a101983da20168436861696e20696402686d792d636861696ea2016e4163636f756e74206e756d626572026131a2016853657175656e6365026132a301674164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a3016a5075626c6963206b657902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657904f5a401634b657902785230324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444030104f5a102781f54686973207472616e73616374696f6e206861732032204d65737361676573a3016d4d6573736167652028312f322902781d2f636f736d6f732e617574687a2e763162657461312e4d7367457865630301a301674772616e74656502782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301644d73677302653120416e790302a3016a4d7367732028312f312902781c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e640303a3016c46726f6d206164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730304a3016a546f206164647265737302782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740304a30166416d6f756e74026731302041544f4d0304a2026b456e64206f66204d7367730302a3016d4d6573736167652028322f322902762f636f736d6f732e676f762e76312e4d7367566f74650301a3016b50726f706f73616c2069640261310302a30165566f74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301664f7074696f6e026f564f54455f4f5054494f4e5f5945530302a301684d65746164617461027901e34c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400302a1026e456e64206f66204d657373616765a201644d656d6f0278193e20e29a9befb88f5c7532363942e29a9befb88f2020202020a2016446656573026a302e3030322041544f4da3016946656520706179657202782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357404f5a3016b466565206772616e74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a30169476173206c696d697402673130302730303004f5a3016e54696d656f7574206865696768740262323004f5a3016c4f74686572207369676e6572026c31205369676e6572496e666f04f5a401724f74686572207369676e65722028312f312902715369676e6572496e666f206f626a656374030104f5a4016a5075626c6963206b65790278292f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579030204f5a401695468726573686f6c64026132030304f5a4016b5075626c6963206b65797302653220416e79030304f5a401715075626c6963206b6579732028312f322902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579030404f5a401634b657902785230323537203445424520304246432037353446203539363720334241312031423237203530304620393135382041444532204531374520314130312038324230204341384220433635322034444230203933030504f5a401715075626c6963206b6579732028322f322902781d2f636f736d6f732e63727970746f2e656432353531392e5075624b6579030404f5a401634b657902785230333135203043343720463138412041333237203136413620353437452044413842203733363920303637442043453131204431343120363234352042373738203735364320463833352039363738203737030504f5a30272456e64206f66205075626c6963206b657973030304f5a401694d6f646520696e666f026f4d6f6465496e666f206f626a656374030204f5a401654d756c7469026c4d756c7469206f626a656374030304f5a4016842697461727261790276436f6d706163744269744172726179206f626a656374030404f5a40171457874726120626974732073746f726564026135030504f5a40165456c656d7302623438030504f5a4016a4d6f646520696e666f73026a32204d6f6465496e666f030404f5a401704d6f646520696e666f732028312f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a401704d6f646520696e666f732028322f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a30271456e64206f66204d6f646520696e666f73030404f5a4016853657175656e6365026135030204f5a20273456e64206f66204f74686572207369676e657204f5a30171457874656e73696f6e206f7074696f6e7302653120416e7904f5a40177457874656e73696f6e206f7074696f6e732028312f31290278192f636f736d6f732e626173652e763162657461312e436f696e030104f5a30266352041544f4d030204f5a2027818456e64206f6620457874656e73696f6e206f7074696f6e7304f5a301781e4e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7302653120416e7904f5a40178244e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f312902781b2f636f736d6f732e617574682e763162657461312e506172616d73030104f5a401734d6178206d656d6f206368617261637465727302623130030204f5a2027825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7304f5a3017148617368206f66207261772062797465730278406537626537383038646534393835626436303938313164326133323830356362323333633136386337643234376436316433376634613664643463663361326104f5" + "cbor": "a101983da20168436861696e20696402686d792d636861696ea2016e4163636f756e74206e756d626572026131a2016853657175656e6365026132a301674164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a3016a5075626c6963206b657902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657904f5a401634b657902785230324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444030104f5a102781f54686973207472616e73616374696f6e206861732032204d65737361676573a3016d4d6573736167652028312f322902781d2f636f736d6f732e617574687a2e763162657461312e4d7367457865630301a301674772616e74656502782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301644d73677302653120416e790302a3016a4d7367732028312f312902781c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e640303a3016c46726f6d206164647265737302782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730304a3016a546f206164647265737302782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740304a30166416d6f756e74026731302041544f4d0304a2026b456e64206f66204d7367730302a3016d4d6573736167652028322f322902762f636f736d6f732e676f762e76312e4d7367566f74650301a3016b50726f706f73616c2069640261310302a30165566f74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730302a301664f7074696f6e026f564f54455f4f5054494f4e5f4f4e450302a301684d65746164617461027901e34c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400302a1026e456e64206f66204d657373616765a201644d656d6f0278193e20e29a9befb88f5c7532363942e29a9befb88f2020202020a2016446656573026a302e3030322041544f4da3016946656520706179657202782d636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357404f5a3016b466565206772616e74657202782d636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687304f5a30169476173206c696d697402673130302730303004f5a3016e54696d656f7574206865696768740262323004f5a3016c4f74686572207369676e6572026c31205369676e6572496e666f04f5a401724f74686572207369676e65722028312f312902715369676e6572496e666f206f626a656374030104f5a4016a5075626c6963206b65790278292f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579030204f5a401695468726573686f6c64026132030304f5a4016b5075626c6963206b65797302653220416e79030304f5a401715075626c6963206b6579732028312f322902781f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579030404f5a401634b657902785230323537203445424520304246432037353446203539363720334241312031423237203530304620393135382041444532204531374520314130312038324230204341384220433635322034444230203933030504f5a401715075626c6963206b6579732028322f322902781d2f636f736d6f732e63727970746f2e656432353531392e5075624b6579030404f5a401634b657902785230333135203043343720463138412041333237203136413620353437452044413842203733363920303637442043453131204431343120363234352042373738203735364320463833352039363738203737030504f5a30272456e64206f66205075626c6963206b657973030304f5a401694d6f646520696e666f026f4d6f6465496e666f206f626a656374030204f5a401654d756c7469026c4d756c7469206f626a656374030304f5a4016842697461727261790276436f6d706163744269744172726179206f626a656374030404f5a40171457874726120626974732073746f726564026135030504f5a40165456c656d7302623438030504f5a4016a4d6f646520696e666f73026a32204d6f6465496e666f030404f5a401704d6f646520696e666f732028312f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a401704d6f646520696e666f732028322f3229026f4d6f6465496e666f206f626a656374030504f5a4016653696e676c65026d53696e676c65206f626a656374030604f5a401644d6f646502781b5349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e030704f5a30271456e64206f66204d6f646520696e666f73030404f5a4016853657175656e6365026135030204f5a20273456e64206f66204f74686572207369676e657204f5a30171457874656e73696f6e206f7074696f6e7302653120416e7904f5a40177457874656e73696f6e206f7074696f6e732028312f31290278192f636f736d6f732e626173652e763162657461312e436f696e030104f5a30266352041544f4d030204f5a2027818456e64206f6620457874656e73696f6e206f7074696f6e7304f5a301781e4e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7302653120416e7904f5a40178244e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f312902781b2f636f736d6f732e617574682e763162657461312e506172616d73030104f5a401734d6178206d656d6f206368617261637465727302623130030204f5a2027825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7304f5a3017148617368206f66207261772062797465730278406537626537383038646534393835626436303938313164326133323830356362323333633136386337643234376436316433376634613664643463663361326104f5" } ] diff --git a/x/tx/signing/textual/internal/testdata/tx.json b/x/tx/signing/textual/internal/testdata/tx.json index bbafe3b14120..db7ea86eea75 100644 --- a/x/tx/signing/textual/internal/testdata/tx.json +++ b/x/tx/signing/textual/internal/testdata/tx.json @@ -142,7 +142,7 @@ "@type": "/cosmos.gov.v1.MsgVote", "proposal_id": 1, "voter": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", - "option": "VOTE_OPTION_YES", + "option": "VOTE_OPTION_ONE", "metadata": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @" } ] @@ -193,7 +193,7 @@ { "title": "Message (1/1)", "content": "/cosmos.gov.v1.MsgVote", "indent": 1 }, { "title": "Proposal id", "content": "1", "indent": 2 }, { "title": "Voter", "content": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", "indent": 2 }, - { "title": "Option", "content": "VOTE_OPTION_YES", "indent": 2 }, + { "title": "Option", "content": "VOTE_OPTION_ONE", "indent": 2 }, { "title": "Metadata", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @", @@ -226,7 +226,7 @@ "@type": "/cosmos.gov.v1.MsgVote", "proposal_id": 1, "voter": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", - "option": "VOTE_OPTION_YES", + "option": "VOTE_OPTION_ONE", "metadata": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @" } ], @@ -339,7 +339,7 @@ { "title": "Message (2/2)", "content": "/cosmos.gov.v1.MsgVote", "indent": 1 }, { "title": "Proposal id", "content": "1", "indent": 2 }, { "title": "Voter", "content": "cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs", "indent": 2 }, - { "title": "Option", "content": "VOTE_OPTION_YES", "indent": 2 }, + { "title": "Option", "content": "VOTE_OPTION_ONE", "indent": 2 }, { "title": "Metadata", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Also it ends in a single ampersand @",