From 305053136a561ce730798ee3a04e6e5e869ff4f1 Mon Sep 17 00:00:00 2001 From: Amaury <1293565+amaurym@users.noreply.github.com> Date: Thu, 12 Jan 2023 17:00:55 +0100 Subject: [PATCH 1/6] refactor: Improve textual's API (#14595) --- api/cosmos/msg/textual/v1/textual.pulsar.go | 117 ++++++++++++++++++ .../architecture/adr-050-sign-mode-textual.md | 5 +- proto/cosmos/msg/textual/v1/textual.proto | 18 +++ tx/textual/{valuerenderer => }/any.go | 2 +- tx/textual/{valuerenderer => }/any_test.go | 13 +- tx/textual/{valuerenderer => }/bench_test.go | 2 +- tx/textual/{valuerenderer => }/bytes.go | 2 +- tx/textual/{valuerenderer => }/bytes_test.go | 8 +- tx/textual/{valuerenderer => }/coin_test.go | 18 +-- tx/textual/{valuerenderer => }/coins.go | 2 +- tx/textual/{valuerenderer => }/coins_test.go | 12 +- tx/textual/{valuerenderer => }/dec.go | 2 +- tx/textual/{valuerenderer => }/dec_test.go | 8 +- tx/textual/{valuerenderer => }/duration.go | 2 +- .../{valuerenderer => }/duration_test.go | 10 +- tx/textual/{valuerenderer => }/e2e_test.go | 10 +- tx/textual/{valuerenderer => }/encode.go | 2 +- tx/textual/{valuerenderer => }/encode_test.go | 4 +- tx/textual/{valuerenderer => }/enum.go | 2 +- tx/textual/{valuerenderer => }/enum_test.go | 8 +- tx/textual/{valuerenderer => }/int.go | 2 +- tx/textual/{valuerenderer => }/int_test.go | 10 +- tx/textual/{valuerenderer => }/message.go | 2 +- .../{valuerenderer => }/message_test.go | 12 +- .../protoreflect_list_test.go | 2 +- .../{valuerenderer => }/repeated_test.go | 12 +- tx/textual/{valuerenderer => }/string.go | 2 +- tx/textual/{valuerenderer => }/string_test.go | 10 +- tx/textual/{valuerenderer => }/timestamp.go | 2 +- .../{valuerenderer => }/timestamp_test.go | 12 +- tx/textual/{valuerenderer => }/tx.go | 2 +- tx/textual/{valuerenderer => }/tx_test.go | 12 +- tx/textual/{valuerenderer => }/types.go | 2 +- .../{valuerenderer => }/valuerenderer.go | 14 ++- .../{valuerenderer => }/valuerenderer_test.go | 30 ++--- 35 files changed, 258 insertions(+), 115 deletions(-) create mode 100644 api/cosmos/msg/textual/v1/textual.pulsar.go create mode 100644 proto/cosmos/msg/textual/v1/textual.proto rename tx/textual/{valuerenderer => }/any.go (99%) rename tx/textual/{valuerenderer => }/any_test.go (82%) rename tx/textual/{valuerenderer => }/bench_test.go (99%) rename tx/textual/{valuerenderer => }/bytes.go (98%) rename tx/textual/{valuerenderer => }/bytes_test.go (87%) rename tx/textual/{valuerenderer => }/coin_test.go (83%) rename tx/textual/{valuerenderer => }/coins.go (99%) rename tx/textual/{valuerenderer => }/coins_test.go (90%) rename tx/textual/{valuerenderer => }/dec.go (98%) rename tx/textual/{valuerenderer => }/dec_test.go (77%) rename tx/textual/{valuerenderer => }/duration.go (99%) rename tx/textual/{valuerenderer => }/duration_test.go (84%) rename tx/textual/{valuerenderer => }/e2e_test.go (87%) rename tx/textual/{valuerenderer => }/encode.go (97%) rename tx/textual/{valuerenderer => }/encode_test.go (88%) rename tx/textual/{valuerenderer => }/enum.go (98%) rename tx/textual/{valuerenderer => }/enum_test.go (91%) rename tx/textual/{valuerenderer => }/int.go (99%) rename tx/textual/{valuerenderer => }/int_test.go (87%) rename tx/textual/{valuerenderer => }/message.go (99%) rename tx/textual/{valuerenderer => }/message_test.go (77%) rename tx/textual/{valuerenderer => }/protoreflect_list_test.go (98%) rename tx/textual/{valuerenderer => }/repeated_test.go (80%) rename tx/textual/{valuerenderer => }/string.go (97%) rename tx/textual/{valuerenderer => }/string_test.go (84%) rename tx/textual/{valuerenderer => }/timestamp.go (98%) rename tx/textual/{valuerenderer => }/timestamp_test.go (87%) rename tx/textual/{valuerenderer => }/tx.go (99%) rename tx/textual/{valuerenderer => }/tx_test.go (95%) rename tx/textual/{valuerenderer => }/types.go (98%) rename tx/textual/{valuerenderer => }/valuerenderer.go (93%) rename tx/textual/{valuerenderer => }/valuerenderer_test.go (51%) diff --git a/api/cosmos/msg/textual/v1/textual.pulsar.go b/api/cosmos/msg/textual/v1/textual.pulsar.go new file mode 100644 index 000000000000..6c9921937ab2 --- /dev/null +++ b/api/cosmos/msg/textual/v1/textual.pulsar.go @@ -0,0 +1,117 @@ +// Code generated by protoc-gen-go-pulsar. DO NOT EDIT. +package textualv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" +) + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.0 +// protoc (unknown) +// source: cosmos/msg/textual/v1/textual.proto + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var file_cosmos_msg_textual_v1_textual_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.MessageOptions)(nil), + ExtensionType: (*string)(nil), + Field: 11110009, + Name: "cosmos.msg.textual.v1.expert_custom_renderer", + Tag: "bytes,11110009,opt,name=expert_custom_renderer", + Filename: "cosmos/msg/textual/v1/textual.proto", + }, +} + +// Extension fields to descriptorpb.MessageOptions. +var ( + // expert_custom_renderer is an informative identifier to reference the + // algorithm used to generate the custom textual representation of the + // protobuf message where this annotation is applied. We recommend to use a + // short, versioned name as this identifier, e.g. "replace_with_username_v1". + // We also recommand providing a human-readable description as protobuf + // comments on this annotation, for example a short specification or a link + // to the relevant documentation. + // + // Also see the section on Custom Message Renderers in ADR-050. + // + // optional string expert_custom_renderer = 11110009; + E_ExpertCustomRenderer = &file_cosmos_msg_textual_v1_textual_proto_extTypes[0] +) + +var File_cosmos_msg_textual_v1_textual_proto protoreflect.FileDescriptor + +var file_cosmos_msg_textual_v1_textual_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x73, 0x67, 0x2f, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x61, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x6d, 0x73, + 0x67, 0x2e, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x1a, 0x20, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x58, + 0x0a, 0x16, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, + 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf9, 0x8c, 0xa6, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x14, 0x65, 0x78, 0x70, 0x65, 0x72, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x72, 0x42, 0xd2, 0x01, 0x0a, 0x19, 0x63, 0x6f, 0x6d, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x6d, 0x73, 0x67, 0x2e, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x61, 0x6c, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x6d, 0x73, 0x67, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x2f, 0x76, 0x31, 0x3b, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x4d, 0x54, 0xaa, 0x02, + 0x15, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x2e, 0x54, 0x65, 0x78, 0x74, + 0x75, 0x61, 0x6c, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x15, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, + 0x4d, 0x73, 0x67, 0x5c, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x21, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x4d, 0x73, 0x67, 0x5c, 0x54, 0x65, 0x78, 0x74, + 0x75, 0x61, 0x6c, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x4d, 0x73, 0x67, + 0x3a, 0x3a, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var file_cosmos_msg_textual_v1_textual_proto_goTypes = []interface{}{ + (*descriptorpb.MessageOptions)(nil), // 0: google.protobuf.MessageOptions +} +var file_cosmos_msg_textual_v1_textual_proto_depIdxs = []int32{ + 0, // 0: cosmos.msg.textual.v1.expert_custom_renderer:extendee -> google.protobuf.MessageOptions + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 0, // [0:1] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_cosmos_msg_textual_v1_textual_proto_init() } +func file_cosmos_msg_textual_v1_textual_proto_init() { + if File_cosmos_msg_textual_v1_textual_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cosmos_msg_textual_v1_textual_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 1, + NumServices: 0, + }, + GoTypes: file_cosmos_msg_textual_v1_textual_proto_goTypes, + DependencyIndexes: file_cosmos_msg_textual_v1_textual_proto_depIdxs, + ExtensionInfos: file_cosmos_msg_textual_v1_textual_proto_extTypes, + }.Build() + File_cosmos_msg_textual_v1_textual_proto = out.File + file_cosmos_msg_textual_v1_textual_proto_rawDesc = nil + file_cosmos_msg_textual_v1_textual_proto_goTypes = nil + file_cosmos_msg_textual_v1_textual_proto_depIdxs = nil +} diff --git a/docs/architecture/adr-050-sign-mode-textual.md b/docs/architecture/adr-050-sign-mode-textual.md index c8c528ab6abc..9beca192fbcb 100644 --- a/docs/architecture/adr-050-sign-mode-textual.md +++ b/docs/architecture/adr-050-sign-mode-textual.md @@ -228,7 +228,6 @@ message Grant { message MsgGrant { option (cosmos.msg.v1.signer) = "granter"; - option (cosmos.msg.v1.textual.type_url) = "authz v1beta1 grant"; string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; @@ -249,13 +248,13 @@ End of transaction messages Application developers may choose to not follow default renderer value output for their own `Msg`s. In this case, they can implement their own custom `Msg` renderer. This is similar to [EIP4430](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4430.md), where the smart contract developer chooses the description string to be shown to the end user. -This is done by setting the `cosmos.msg.v1.textual.expert_custom_renderer` Protobuf option to a non-empty string. This option CAN ONLY be set on a Protobuf message representing transaction message object (implementing `sdk.Msg` interface). +This is done by setting the `cosmos.msg.textual.v1.expert_custom_renderer` Protobuf option to a non-empty string. This option CAN ONLY be set on a Protobuf message representing transaction message object (implementing `sdk.Msg` interface). ```protobuf message MsgFooBar { // Optional comments to describe in human-readable language the formatting // rules of the custom renderer. - option (cosmos.msg.v1.textual.expert_custom_renderer) = ""; + option (cosmos.msg.textual.v1.expert_custom_renderer) = ""; // proto fields } diff --git a/proto/cosmos/msg/textual/v1/textual.proto b/proto/cosmos/msg/textual/v1/textual.proto new file mode 100644 index 000000000000..4f8cd141b067 --- /dev/null +++ b/proto/cosmos/msg/textual/v1/textual.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package cosmos.msg.textual.v1; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.MessageOptions { + // expert_custom_renderer is an informative identifier to reference the + // algorithm used to generate the custom textual representation of the + // protobuf message where this annotation is applied. We recommend to use a + // short, versioned name as this identifier, e.g. "replace_with_username_v1". + // We also recommand providing a human-readable description as protobuf + // comments on this annotation, for example a short specification or a link + // to the relevant documentation. + // + // Also see the section on Custom Message Renderers in ADR-050. + string expert_custom_renderer = 11110009; +} diff --git a/tx/textual/valuerenderer/any.go b/tx/textual/any.go similarity index 99% rename from tx/textual/valuerenderer/any.go rename to tx/textual/any.go index 6fd00b8d85c2..3256832c6d16 100644 --- a/tx/textual/valuerenderer/any.go +++ b/tx/textual/any.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/any_test.go b/tx/textual/any_test.go similarity index 82% rename from tx/textual/valuerenderer/any_test.go rename to tx/textual/any_test.go index 1af3abaca57a..e6842d0448bb 100644 --- a/tx/textual/valuerenderer/any_test.go +++ b/tx/textual/any_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,8 +7,7 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" - + "cosmossdk.io/tx/textual" "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/require" @@ -20,18 +19,18 @@ import ( type anyJsonTest struct { Proto json.RawMessage - Screens []valuerenderer.Screen + Screens []textual.Screen } func TestAny(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/any.json") + raw, err := os.ReadFile("./internal/testdata/any.json") require.NoError(t, err) var testcases []anyJsonTest err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - tr := valuerenderer.NewTextual(EmptyCoinMetadataQuerier) + tr := textual.NewTextual(EmptyCoinMetadataQuerier) for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { anyMsg := anypb.Any{} @@ -39,7 +38,7 @@ func TestAny(t *testing.T) { require.NoError(t, err) // Format into screens and check vs expected - rend := valuerenderer.NewAnyValueRenderer((&tr)) + rend := textual.NewAnyValueRenderer((&tr)) screens, err := rend.Format(context.Background(), protoreflect.ValueOfMessage(anyMsg.ProtoReflect())) require.NoError(t, err) require.Equal(t, tc.Screens, screens) diff --git a/tx/textual/valuerenderer/bench_test.go b/tx/textual/bench_test.go similarity index 99% rename from tx/textual/valuerenderer/bench_test.go rename to tx/textual/bench_test.go index b14cbc58a9f4..d09ae0d54a6c 100644 --- a/tx/textual/valuerenderer/bench_test.go +++ b/tx/textual/bench_test.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "bytes" diff --git a/tx/textual/valuerenderer/bytes.go b/tx/textual/bytes.go similarity index 98% rename from tx/textual/valuerenderer/bytes.go rename to tx/textual/bytes.go index 7b12a027572f..14b431a2688e 100644 --- a/tx/textual/valuerenderer/bytes.go +++ b/tx/textual/bytes.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "bytes" diff --git a/tx/textual/valuerenderer/bytes_test.go b/tx/textual/bytes_test.go similarity index 87% rename from tx/textual/valuerenderer/bytes_test.go rename to tx/textual/bytes_test.go index 9f094ac55b85..9041495a6606 100644 --- a/tx/textual/valuerenderer/bytes_test.go +++ b/tx/textual/bytes_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -6,7 +6,7 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/reflect/protoreflect" ) @@ -15,12 +15,12 @@ func TestBytesJsonTestCases(t *testing.T) { var testcases []bytesTest // Bytes.json contains bytes that are represented in base64 format, and // their expected results in hex. - raw, err := os.ReadFile("../internal/testdata/bytes.json") + raw, err := os.ReadFile("./internal/testdata/bytes.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(nil) + textual := textual.NewTextual(nil) for _, tc := range testcases { valrend, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("BYTES")) diff --git a/tx/textual/valuerenderer/coin_test.go b/tx/textual/coin_test.go similarity index 83% rename from tx/textual/valuerenderer/coin_test.go rename to tx/textual/coin_test.go index 77a4c94c0f47..43071b5807f3 100644 --- a/tx/textual/valuerenderer/coin_test.go +++ b/tx/textual/coin_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -12,7 +12,7 @@ import ( bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" ) // mockCoinMetadataKey is used in the mock coin metadata querier. @@ -47,33 +47,33 @@ func addMetadataToContext(ctx context.Context, metadata *bankv1beta1.Metadata) c func TestMetadataQuerier(t *testing.T) { // Errors on nil metadata querier - textual := valuerenderer.NewTextual(nil) - vr, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("COIN")) + txt := textual.NewTextual(nil) + vr, err := txt.GetFieldValueRenderer(fieldDescriptorFromName("COIN")) require.NoError(t, err) _, err = vr.Format(context.Background(), protoreflect.ValueOf((&basev1beta1.Coin{}).ProtoReflect())) require.Error(t, err) // Errors if metadata querier returns an error expErr := fmt.Errorf("mock error") - textual = valuerenderer.NewTextual(func(_ context.Context, _ string) (*bankv1beta1.Metadata, error) { + txt = textual.NewTextual(func(_ context.Context, _ string) (*bankv1beta1.Metadata, error) { return nil, expErr }) - vr, err = textual.GetFieldValueRenderer(fieldDescriptorFromName("COIN")) + vr, err = txt.GetFieldValueRenderer(fieldDescriptorFromName("COIN")) require.NoError(t, err) _, err = vr.Format(context.Background(), protoreflect.ValueOf((&basev1beta1.Coin{}).ProtoReflect())) require.ErrorIs(t, err, expErr) - _, err = vr.(valuerenderer.RepeatedValueRenderer).FormatRepeated(context.Background(), protoreflect.ValueOf(NewGenericList([]*basev1beta1.Coin{{}}))) + _, err = vr.(textual.RepeatedValueRenderer).FormatRepeated(context.Background(), protoreflect.ValueOf(NewGenericList([]*basev1beta1.Coin{{}}))) require.ErrorIs(t, err, expErr) } func TestCoinJsonTestcases(t *testing.T) { var testcases []coinJsonTest - raw, err := os.ReadFile("../internal/testdata/coin.json") + raw, err := os.ReadFile("./internal/testdata/coin.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(mockCoinMetadataQuerier) + textual := textual.NewTextual(mockCoinMetadataQuerier) vr, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("COIN")) require.NoError(t, err) diff --git a/tx/textual/valuerenderer/coins.go b/tx/textual/coins.go similarity index 99% rename from tx/textual/valuerenderer/coins.go rename to tx/textual/coins.go index 2f22ee4cfe35..c8a901d22450 100644 --- a/tx/textual/valuerenderer/coins.go +++ b/tx/textual/coins.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/coins_test.go b/tx/textual/coins_test.go similarity index 90% rename from tx/textual/valuerenderer/coins_test.go rename to tx/textual/coins_test.go index b20a137b638e..ca8105b9d92d 100644 --- a/tx/textual/valuerenderer/coins_test.go +++ b/tx/textual/coins_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -9,21 +9,21 @@ import ( bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" "cosmossdk.io/math" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/reflect/protoreflect" ) func TestCoinsJsonTestcases(t *testing.T) { var testcases []coinsJsonTest - raw, err := os.ReadFile("../internal/testdata/coins.json") + raw, err := os.ReadFile("./internal/testdata/coins.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(mockCoinMetadataQuerier) - vr, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("COINS")) - vrr := vr.(valuerenderer.RepeatedValueRenderer) + txt := textual.NewTextual(mockCoinMetadataQuerier) + vr, err := txt.GetFieldValueRenderer(fieldDescriptorFromName("COINS")) + vrr := vr.(textual.RepeatedValueRenderer) require.NoError(t, err) for _, tc := range testcases { diff --git a/tx/textual/valuerenderer/dec.go b/tx/textual/dec.go similarity index 98% rename from tx/textual/valuerenderer/dec.go rename to tx/textual/dec.go index fafbbf9132d2..62114ab76a38 100644 --- a/tx/textual/valuerenderer/dec.go +++ b/tx/textual/dec.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/dec_test.go b/tx/textual/dec_test.go similarity index 77% rename from tx/textual/valuerenderer/dec_test.go rename to tx/textual/dec_test.go index afcacb49bed9..92063230481d 100644 --- a/tx/textual/valuerenderer/dec_test.go +++ b/tx/textual/dec_test.go @@ -1,11 +1,11 @@ -package valuerenderer_test +package textual_test import ( "encoding/json" "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/reflect/protoreflect" ) @@ -13,12 +13,12 @@ import ( func TestDecJsonTestcases(t *testing.T) { type decimalTest []string var testcases []decimalTest - raw, err := os.ReadFile("../internal/testdata/decimals.json") + raw, err := os.ReadFile("./internal/testdata/decimals.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(nil) + textual := textual.NewTextual(nil) for _, tc := range testcases { tc := tc diff --git a/tx/textual/valuerenderer/duration.go b/tx/textual/duration.go similarity index 99% rename from tx/textual/valuerenderer/duration.go rename to tx/textual/duration.go index d7c2a7b08830..fe868cd87f93 100644 --- a/tx/textual/valuerenderer/duration.go +++ b/tx/textual/duration.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/duration_test.go b/tx/textual/duration_test.go similarity index 84% rename from tx/textual/valuerenderer/duration_test.go rename to tx/textual/duration_test.go index 4ad2bb5c0bee..88dd12152f06 100644 --- a/tx/textual/valuerenderer/duration_test.go +++ b/tx/textual/duration_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,7 +7,7 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" @@ -22,7 +22,7 @@ type durationTest struct { } func TestDurationJSON(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/duration.json") + raw, err := os.ReadFile("./internal/testdata/duration.json") require.NoError(t, err) var testcases []durationTest @@ -31,9 +31,9 @@ func TestDurationJSON(t *testing.T) { for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - rend := valuerenderer.NewDurationValueRenderer() + rend := textual.NewDurationValueRenderer() - var screens []valuerenderer.Screen + var screens []textual.Screen if tc.Proto != nil { screens, err = rend.Format(context.Background(), protoreflect.ValueOf(tc.Proto.ProtoReflect())) if tc.Error { diff --git a/tx/textual/valuerenderer/e2e_test.go b/tx/textual/e2e_test.go similarity index 87% rename from tx/textual/valuerenderer/e2e_test.go rename to tx/textual/e2e_test.go index add6a78a46c4..3d2675570619 100644 --- a/tx/textual/valuerenderer/e2e_test.go +++ b/tx/textual/e2e_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -16,8 +16,8 @@ import ( _ "cosmossdk.io/api/cosmos/crypto/multisig" _ "cosmossdk.io/api/cosmos/crypto/secp256k1" _ "cosmossdk.io/api/cosmos/gov/v1" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/textualpb" - "cosmossdk.io/tx/textual/valuerenderer" ) type e2eJsonTest struct { @@ -26,7 +26,7 @@ type e2eJsonTest struct { } func TestE2EJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/e2e.json") + raw, err := os.ReadFile("./internal/testdata/e2e.json") require.NoError(t, err) var testcases []e2eJsonTest @@ -37,8 +37,8 @@ func TestE2EJsonTestcases(t *testing.T) { t.Run(tc.Name, func(t *testing.T) { _, bodyBz, _, authInfoBz, signerData := createTextualData(t, tc.Proto, tc.SignerData) - tr := valuerenderer.NewTextual(mockCoinMetadataQuerier) - rend := valuerenderer.NewTxValueRenderer(&tr) + tr := textual.NewTextual(mockCoinMetadataQuerier) + rend := textual.NewTxValueRenderer(&tr) ctx := addMetadataToContext(context.Background(), tc.Metadata) data := &textualpb.TextualData{ diff --git a/tx/textual/valuerenderer/encode.go b/tx/textual/encode.go similarity index 97% rename from tx/textual/valuerenderer/encode.go rename to tx/textual/encode.go index e71bfd20255d..6a9f0f97ba15 100644 --- a/tx/textual/valuerenderer/encode.go +++ b/tx/textual/encode.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "io" diff --git a/tx/textual/valuerenderer/encode_test.go b/tx/textual/encode_test.go similarity index 88% rename from tx/textual/valuerenderer/encode_test.go rename to tx/textual/encode_test.go index 9cb15a18815c..fbfa0163791c 100644 --- a/tx/textual/valuerenderer/encode_test.go +++ b/tx/textual/encode_test.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "bytes" @@ -17,7 +17,7 @@ type encodingJsonTest struct { } func TestEncodingJson(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/encode.json") + raw, err := os.ReadFile("./internal/testdata/encode.json") require.NoError(t, err) var testcases []encodingJsonTest diff --git a/tx/textual/valuerenderer/enum.go b/tx/textual/enum.go similarity index 98% rename from tx/textual/valuerenderer/enum.go rename to tx/textual/enum.go index e07f8ce97c9a..d31e224dc3ba 100644 --- a/tx/textual/valuerenderer/enum.go +++ b/tx/textual/enum.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/enum_test.go b/tx/textual/enum_test.go similarity index 91% rename from tx/textual/valuerenderer/enum_test.go rename to tx/textual/enum_test.go index baa68b8360b7..2076ba4a55ce 100644 --- a/tx/textual/valuerenderer/enum_test.go +++ b/tx/textual/enum_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,8 +7,8 @@ import ( "strings" "testing" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/testpb" - "cosmossdk.io/tx/textual/valuerenderer" "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/require" "google.golang.org/protobuf/encoding/protojson" @@ -23,12 +23,12 @@ type enumTest struct { func TestEnumJsonTestcases(t *testing.T) { var testcases []enumTest - raw, err := os.ReadFile("../internal/testdata/enum.json") + raw, err := os.ReadFile("./internal/testdata/enum.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(nil) + textual := textual.NewTextual(nil) for _, tc := range testcases { t.Run(tc.Text, func(t *testing.T) { diff --git a/tx/textual/valuerenderer/int.go b/tx/textual/int.go similarity index 99% rename from tx/textual/valuerenderer/int.go rename to tx/textual/int.go index 51f8d09428c7..ad13b0b253d6 100644 --- a/tx/textual/valuerenderer/int.go +++ b/tx/textual/int.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/int_test.go b/tx/textual/int_test.go similarity index 87% rename from tx/textual/valuerenderer/int_test.go rename to tx/textual/int_test.go index 0b047661b7d4..48e339a04ccf 100644 --- a/tx/textual/valuerenderer/int_test.go +++ b/tx/textual/int_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -11,18 +11,18 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" "cosmossdk.io/math" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" ) func TestIntJsonTestcases(t *testing.T) { type integerTest []string var testcases []integerTest - raw, err := os.ReadFile("../internal/testdata/integers.json") + raw, err := os.ReadFile("./internal/testdata/integers.json") require.NoError(t, err) err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - textual := valuerenderer.NewTextual(nil) + textual := textual.NewTextual(nil) for _, tc := range testcases { t.Run(tc[0], func(t *testing.T) { @@ -58,7 +58,7 @@ func TestIntJsonTestcases(t *testing.T) { // checkNumberTest checks that the output of a number value renderer // matches the expected string. Only use it to test numbers. -func checkNumberTest(t *testing.T, r valuerenderer.ValueRenderer, pv protoreflect.Value, expected string) { +func checkNumberTest(t *testing.T, r textual.ValueRenderer, pv protoreflect.Value, expected string) { screens, err := r.Format(context.Background(), pv) require.NoError(t, err) require.Len(t, screens, 1) diff --git a/tx/textual/valuerenderer/message.go b/tx/textual/message.go similarity index 99% rename from tx/textual/valuerenderer/message.go rename to tx/textual/message.go index 01bf7589a025..e298ede23d85 100644 --- a/tx/textual/valuerenderer/message.go +++ b/tx/textual/message.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/message_test.go b/tx/textual/message_test.go similarity index 77% rename from tx/textual/valuerenderer/message_test.go rename to tx/textual/message_test.go index ef577784601b..694e750e6a83 100644 --- a/tx/textual/valuerenderer/message_test.go +++ b/tx/textual/message_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,10 +7,10 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" "github.com/stretchr/testify/require" bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/testpb" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" @@ -22,21 +22,21 @@ func EmptyCoinMetadataQuerier(ctx context.Context, denom string) (*bankv1beta1.M type messageJsonTest struct { Proto *testpb.Foo - Screens []valuerenderer.Screen + Screens []textual.Screen } func TestMessageJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/message.json") + raw, err := os.ReadFile("./internal/testdata/message.json") require.NoError(t, err) var testcases []messageJsonTest err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - tr := valuerenderer.NewTextual(EmptyCoinMetadataQuerier) + tr := textual.NewTextual(EmptyCoinMetadataQuerier) for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - rend := valuerenderer.NewMessageValueRenderer(&tr, (&testpb.Foo{}).ProtoReflect().Descriptor()) + rend := textual.NewMessageValueRenderer(&tr, (&testpb.Foo{}).ProtoReflect().Descriptor()) screens, err := rend.Format(context.Background(), protoreflect.ValueOf(tc.Proto.ProtoReflect())) require.NoError(t, err) diff --git a/tx/textual/valuerenderer/protoreflect_list_test.go b/tx/textual/protoreflect_list_test.go similarity index 98% rename from tx/textual/valuerenderer/protoreflect_list_test.go rename to tx/textual/protoreflect_list_test.go index 8dc5284f8151..53591d00163b 100644 --- a/tx/textual/valuerenderer/protoreflect_list_test.go +++ b/tx/textual/protoreflect_list_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "google.golang.org/protobuf/proto" diff --git a/tx/textual/valuerenderer/repeated_test.go b/tx/textual/repeated_test.go similarity index 80% rename from tx/textual/valuerenderer/repeated_test.go rename to tx/textual/repeated_test.go index f8d10e7b49e1..e85439db7898 100644 --- a/tx/textual/valuerenderer/repeated_test.go +++ b/tx/textual/repeated_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,9 +7,9 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" "github.com/stretchr/testify/require" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/testpb" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" @@ -17,7 +17,7 @@ import ( type repeatedJsonTest struct { Proto *testpb.Qux - Screens []valuerenderer.Screen + Screens []textual.Screen // TODO Remove once we finished all primitive value renderers parsing // https://github.com/cosmos/cosmos-sdk/pull/13696 // https://github.com/cosmos/cosmos-sdk/pull/13853 @@ -25,20 +25,20 @@ type repeatedJsonTest struct { } func TestRepeatedJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/repeated.json") + raw, err := os.ReadFile("./internal/testdata/repeated.json") require.NoError(t, err) var testcases []repeatedJsonTest err = json.Unmarshal(raw, &testcases) require.NoError(t, err) - tr := valuerenderer.NewTextual(mockCoinMetadataQuerier) + tr := textual.NewTextual(mockCoinMetadataQuerier) for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { // Create a context.Context containing all coins metadata, to simulate // that they are in state. ctx := context.Background() - rend := valuerenderer.NewMessageValueRenderer(&tr, (&testpb.Qux{}).ProtoReflect().Descriptor()) + rend := textual.NewMessageValueRenderer(&tr, (&testpb.Qux{}).ProtoReflect().Descriptor()) require.NoError(t, err) screens, err := rend.Format(ctx, protoreflect.ValueOf(tc.Proto.ProtoReflect())) diff --git a/tx/textual/valuerenderer/string.go b/tx/textual/string.go similarity index 97% rename from tx/textual/valuerenderer/string.go rename to tx/textual/string.go index d79dc46b0dec..59e1ea00ce79 100644 --- a/tx/textual/valuerenderer/string.go +++ b/tx/textual/string.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/string_test.go b/tx/textual/string_test.go similarity index 84% rename from tx/textual/valuerenderer/string_test.go rename to tx/textual/string_test.go index aba222b4c819..9d6f10e37d2d 100644 --- a/tx/textual/valuerenderer/string_test.go +++ b/tx/textual/string_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -7,7 +7,7 @@ import ( "os" "testing" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/reflect/protoreflect" ) @@ -17,7 +17,7 @@ type stringJsonTest struct { } func TestStringJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/string.json") + raw, err := os.ReadFile("./internal/testdata/string.json") require.NoError(t, err) var testcases []stringJsonTest @@ -26,7 +26,7 @@ func TestStringJsonTestcases(t *testing.T) { for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - rend := valuerenderer.NewStringValueRenderer() + rend := textual.NewStringValueRenderer() screens, err := rend.Format(context.Background(), protoreflect.ValueOfString(tc.Text)) require.NoError(t, err) @@ -44,7 +44,7 @@ func TestStringHighUnicode(t *testing.T) { // We cannot encode Unicode characters beyond the BMP directly in JSON, // so this case must be a native Go test. s := "\U00101234" - rend := valuerenderer.NewStringValueRenderer() + rend := textual.NewStringValueRenderer() screens, err := rend.Format(context.Background(), protoreflect.ValueOfString(s)) require.NoError(t, err) require.Equal(t, 1, len(screens)) diff --git a/tx/textual/valuerenderer/timestamp.go b/tx/textual/timestamp.go similarity index 98% rename from tx/textual/valuerenderer/timestamp.go rename to tx/textual/timestamp.go index eebe60296fd0..40b59ff164ee 100644 --- a/tx/textual/valuerenderer/timestamp.go +++ b/tx/textual/timestamp.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/timestamp_test.go b/tx/textual/timestamp_test.go similarity index 87% rename from tx/textual/valuerenderer/timestamp_test.go rename to tx/textual/timestamp_test.go index c6e72e569ee9..eec34deb05a1 100644 --- a/tx/textual/valuerenderer/timestamp_test.go +++ b/tx/textual/timestamp_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -8,7 +8,7 @@ import ( "testing" "time" - "cosmossdk.io/tx/textual/valuerenderer" + "cosmossdk.io/tx/textual" "github.com/stretchr/testify/require" "google.golang.org/protobuf/proto" @@ -32,7 +32,7 @@ type timestampJsonTest struct { } func TestTimestampJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/timestamp.json") + raw, err := os.ReadFile("./internal/testdata/timestamp.json") require.NoError(t, err) var testcases []timestampJsonTest @@ -41,9 +41,9 @@ func TestTimestampJsonTestcases(t *testing.T) { for i, tc := range testcases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - rend := valuerenderer.NewTimestampValueRenderer() + rend := textual.NewTimestampValueRenderer() - var screens []valuerenderer.Screen + var screens []textual.Screen if tc.Proto != nil { screens, err = rend.Format(context.Background(), protoreflect.ValueOf(tc.Proto.ProtoReflect())) if tc.Error { @@ -70,7 +70,7 @@ func TestTimestampJsonTestcases(t *testing.T) { } func TestTimestampBadFormat(t *testing.T) { - rend := valuerenderer.NewTimestampValueRenderer() + rend := textual.NewTimestampValueRenderer() _, err := rend.Format(context.Background(), protoreflect.ValueOf(dur.New(time.Hour).ProtoReflect())) require.Error(t, err) } diff --git a/tx/textual/valuerenderer/tx.go b/tx/textual/tx.go similarity index 99% rename from tx/textual/valuerenderer/tx.go rename to tx/textual/tx.go index 5305bc224312..5617ae22f767 100644 --- a/tx/textual/valuerenderer/tx.go +++ b/tx/textual/tx.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "bytes" diff --git a/tx/textual/valuerenderer/tx_test.go b/tx/textual/tx_test.go similarity index 95% rename from tx/textual/valuerenderer/tx_test.go rename to tx/textual/tx_test.go index afe6ff345819..fc1f35216819 100644 --- a/tx/textual/valuerenderer/tx_test.go +++ b/tx/textual/tx_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "context" @@ -24,8 +24,8 @@ import ( _ "cosmossdk.io/api/cosmos/gov/v1" txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" "cosmossdk.io/tx/signing" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/textualpb" - "cosmossdk.io/tx/textual/valuerenderer" ) // txJsonTestTx represents the type that in the JSON test @@ -43,11 +43,11 @@ type txJsonTest struct { SignerData json.RawMessage `json:"signer_data"` Metadata *bankv1beta1.Metadata Error bool - Screens []valuerenderer.Screen + Screens []textual.Screen } func TestTxJsonTestcases(t *testing.T) { - raw, err := os.ReadFile("../internal/testdata/tx.json") + raw, err := os.ReadFile("./internal/testdata/tx.json") require.NoError(t, err) var testcases []txJsonTest @@ -58,8 +58,8 @@ func TestTxJsonTestcases(t *testing.T) { t.Run(tc.Name, func(t *testing.T) { txBody, bodyBz, txAuthInfo, authInfoBz, signerData := createTextualData(t, tc.Proto, tc.SignerData) - tr := valuerenderer.NewTextual(mockCoinMetadataQuerier) - rend := valuerenderer.NewTxValueRenderer(&tr) + tr := textual.NewTextual(mockCoinMetadataQuerier) + rend := textual.NewTxValueRenderer(&tr) ctx := addMetadataToContext(context.Background(), tc.Metadata) data := &textualpb.TextualData{ diff --git a/tx/textual/valuerenderer/types.go b/tx/textual/types.go similarity index 98% rename from tx/textual/valuerenderer/types.go rename to tx/textual/types.go index ac206220df10..d51294824027 100644 --- a/tx/textual/valuerenderer/types.go +++ b/tx/textual/types.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "context" diff --git a/tx/textual/valuerenderer/valuerenderer.go b/tx/textual/valuerenderer.go similarity index 93% rename from tx/textual/valuerenderer/valuerenderer.go rename to tx/textual/valuerenderer.go index 6a9aeffb7837..2ab789136887 100644 --- a/tx/textual/valuerenderer/valuerenderer.go +++ b/tx/textual/valuerenderer.go @@ -1,4 +1,4 @@ -package valuerenderer +package textual import ( "bytes" @@ -22,7 +22,7 @@ import ( // metadata. It is meant to be passed as an argument into `NewTextual`. type CoinMetadataQueryFn func(ctx context.Context, denom string) (*bankv1beta1.Metadata, error) -// ValueRendererCreator is a function returning a ValueRenderer. +// ValueRendererCreator is a function returning a textual. type ValueRendererCreator func(protoreflect.FieldDescriptor) ValueRenderer // Textual holds the configuration for dispatching @@ -115,6 +115,10 @@ func (r *Textual) GetMessageValueRenderer(md protoreflect.MessageDescriptor) (Va return NewMessageValueRenderer(r, md), nil } +// init initializes Textual's internal `scalars` and `messages` registry for +// custom scalar and message renderers. +// +// It is an idempotent method. func (r *Textual) init() { if r.scalars == nil { r.scalars = map[string]ValueRendererCreator{} @@ -137,6 +141,12 @@ func (r *Textual) DefineScalar(scalar string, vr ValueRendererCreator) { r.scalars[scalar] = vr } +// DefineMessageRenderer adds a new custom message renderer. +func (r *Textual) DefineMessageRenderer(name protoreflect.FullName, vr ValueRenderer) { + r.init() + r.messages[name] = vr +} + // GetSignBytes returns the transaction sign bytes. func (r *Textual) GetSignBytes(ctx context.Context, bodyBz, authInfoBz []byte, signerData signing.SignerData) ([]byte, error) { data := &textualpb.TextualData{ diff --git a/tx/textual/valuerenderer/valuerenderer_test.go b/tx/textual/valuerenderer_test.go similarity index 51% rename from tx/textual/valuerenderer/valuerenderer_test.go rename to tx/textual/valuerenderer_test.go index 795cefc152d2..48613426cb67 100644 --- a/tx/textual/valuerenderer/valuerenderer_test.go +++ b/tx/textual/valuerenderer_test.go @@ -1,4 +1,4 @@ -package valuerenderer_test +package textual_test import ( "fmt" @@ -7,34 +7,34 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/protobuf/reflect/protoreflect" + "cosmossdk.io/tx/textual" "cosmossdk.io/tx/textual/internal/testpb" - "cosmossdk.io/tx/textual/valuerenderer" ) func TestDispatcher(t *testing.T) { testcases := []struct { name string expErr bool - expValueRenderer valuerenderer.ValueRenderer + expValueRenderer textual.ValueRenderer }{ - {"UINT32", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("UINT32"))}, - {"UINT64", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("UINT64"))}, - {"SDKINT", false, valuerenderer.NewIntValueRenderer(fieldDescriptorFromName("SDKINT"))}, - {"SDKDEC", false, valuerenderer.NewDecValueRenderer()}, - {"BYTES", false, valuerenderer.NewBytesValueRenderer()}, - {"TIMESTAMP", false, valuerenderer.NewTimestampValueRenderer()}, - {"DURATION", false, valuerenderer.NewDurationValueRenderer()}, - {"COIN", false, valuerenderer.NewCoinsValueRenderer(nil)}, - {"COINS", false, valuerenderer.NewCoinsValueRenderer(nil)}, - {"ENUM", false, valuerenderer.NewEnumValueRenderer(fieldDescriptorFromName("ENUM"))}, - {"ANY", false, valuerenderer.NewAnyValueRenderer(nil)}, + {"UINT32", false, textual.NewIntValueRenderer(fieldDescriptorFromName("UINT32"))}, + {"UINT64", false, textual.NewIntValueRenderer(fieldDescriptorFromName("UINT64"))}, + {"SDKINT", false, textual.NewIntValueRenderer(fieldDescriptorFromName("SDKINT"))}, + {"SDKDEC", false, textual.NewDecValueRenderer()}, + {"BYTES", false, textual.NewBytesValueRenderer()}, + {"TIMESTAMP", false, textual.NewTimestampValueRenderer()}, + {"DURATION", false, textual.NewDurationValueRenderer()}, + {"COIN", false, textual.NewCoinsValueRenderer(nil)}, + {"COINS", false, textual.NewCoinsValueRenderer(nil)}, + {"ENUM", false, textual.NewEnumValueRenderer(fieldDescriptorFromName("ENUM"))}, + {"ANY", false, textual.NewAnyValueRenderer(nil)}, {"FLOAT", true, nil}, } for _, tc := range testcases { tc := tc t.Run(tc.name, func(t *testing.T) { - textual := valuerenderer.NewTextual(nil) + textual := textual.NewTextual(nil) rend, err := textual.GetFieldValueRenderer(fieldDescriptorFromName(tc.name)) if tc.expErr { From 66fa90292cc660e2bff8465663b9f86a4739c8b9 Mon Sep 17 00:00:00 2001 From: Amaury <1293565+amaurym@users.noreply.github.com> Date: Thu, 12 Jan 2023 18:30:43 +0100 Subject: [PATCH 2/6] refactor(textual): Hash bytes when len >35 (#14598) --- .../adr-050-sign-mode-textual-annex1.md | 15 +++++--- tx/textual/bytes.go | 2 +- tx/textual/bytes_test.go | 34 ++++++++++--------- tx/textual/internal/testdata/bytes.json | 4 +-- tx/textual/internal/testdata/e2e.json | 12 +++---- tx/textual/internal/testdata/tx.json | 12 +++---- tx/textual/tx_test.go | 33 ------------------ 7 files changed, 43 insertions(+), 69 deletions(-) diff --git a/docs/architecture/adr-050-sign-mode-textual-annex1.md b/docs/architecture/adr-050-sign-mode-textual-annex1.md index a96fde09341e..48a03e806487 100644 --- a/docs/architecture/adr-050-sign-mode-textual-annex1.md +++ b/docs/architecture/adr-050-sign-mode-textual-annex1.md @@ -256,11 +256,16 @@ Examples: ### bytes -* Bytes of length shorter or equal to 32 are rendered in hexadecimal, all capital letters, without the `0x` prefix. -* Bytes of length greater than 32 are hashed using SHA256. The rendered text is `SHA-256=`, followed by the 32-byte hash, in hexadecimal, all capital letters, without the `0x` prefix. +* Bytes of length shorter or equal to 35 are rendered in hexadecimal, all capital letters, without the `0x` prefix. +* Bytes of length greater than 35 are hashed using SHA256. The rendered text is `SHA-256=`, followed by the 32-byte hash, in hexadecimal, all capital letters, without the `0x` prefix. * The hexadecimal string is finally separated into groups of 4 digits, with a space `' '` as separator. If the bytes length is odd, the 2 remaining hexadecimal characters are at the end. -Note: Data longer than 32 bytes are not rendered in a way that can be inverted. See ADR-050's [section about invertability](./adr-050-sign-mode-textual.md#invertible-rendering) for a discussion. +The number 35 was chosen because it is the longest length where the hashed-and-prefixed representation is longer than the original data directly formatted, using the 3 rules above. More specifically: +- a 35-byte array will have 70 hex characters, plus 17 space characters, resulting in 87 characters. +- byte arrays starting from length 36 will be be hashed to 32 bytes, which is 64 hex characters plus 15 spaces, and with the `SHA-256=` prefix, it takes 87 characters. +Also, secp256k1 public keys have length 33, so their Textual representation is not their hashed value, which we would like to avoid. + +Note: Data longer than 35 bytes are not rendered in a way that can be inverted. See ADR-050's [section about invertability](./adr-050-sign-mode-textual.md#invertible-rendering) for a discussion. #### Examples @@ -268,8 +273,8 @@ Inputs are displayed as byte arrays. * `[0]`: `00` * `[0,1,2]`: `0001 02` -* `[0,1,2,..,31]`: `0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F` -* `[0,1,2,..,32]`: `SHA-256=5D8F CFEF A9AE EB71 1FB8 ED1E 4B7D 5C8A 9BAF A46E 8E76 E68A A18A DCE5 A10D F6AB` +* `[0,1,2,..,34]`: `0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021 22` +* `[0,1,2,..,35]`: `SHA-256=5D7E 2D9B 1DCB C85E 7C89 0036 A2CF 2F9F E7B6 6554 F2DF 08CE C6AA 9C0A 25C9 9C21` ### address bytes diff --git a/tx/textual/bytes.go b/tx/textual/bytes.go index 14b431a2688e..401b35c90608 100644 --- a/tx/textual/bytes.go +++ b/tx/textual/bytes.go @@ -13,7 +13,7 @@ import ( var ( hashPrefix = "SHA-256=" - maxByteLen = 32 // Maximum byte length to be displayed as is. Longer than this, we hash. + maxByteLen = 35 // Maximum byte length to be displayed as is. Longer than this, we hash. ) // NewBytesValueRenderer returns a ValueRenderer for Protobuf bytes, which are diff --git a/tx/textual/bytes_test.go b/tx/textual/bytes_test.go index 9041495a6606..ab82a8cd37c0 100644 --- a/tx/textual/bytes_test.go +++ b/tx/textual/bytes_test.go @@ -23,22 +23,24 @@ func TestBytesJsonTestCases(t *testing.T) { textual := textual.NewTextual(nil) for _, tc := range testcases { - valrend, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("BYTES")) - require.NoError(t, err) - - screens, err := valrend.Format(context.Background(), protoreflect.ValueOfBytes(tc.base64)) - require.NoError(t, err) - require.Equal(t, 1, len(screens)) - require.Equal(t, tc.hex, screens[0].Text) - - // Round trip - val, err := valrend.Parse(context.Background(), screens) - require.NoError(t, err) - if len(tc.base64) > 32 { - require.Equal(t, 0, len(val.Bytes())) - } else { - require.Equal(t, tc.base64, val.Bytes()) - } + t.Run(tc.hex, func(t *testing.T) { + valrend, err := textual.GetFieldValueRenderer(fieldDescriptorFromName("BYTES")) + require.NoError(t, err) + + screens, err := valrend.Format(context.Background(), protoreflect.ValueOfBytes(tc.base64)) + require.NoError(t, err) + require.Equal(t, 1, len(screens)) + require.Equal(t, tc.hex, screens[0].Text) + + // Round trip + val, err := valrend.Parse(context.Background(), screens) + require.NoError(t, err) + if len(tc.base64) > 35 { + require.Equal(t, 0, len(val.Bytes())) + } else { + require.Equal(t, tc.base64, val.Bytes()) + } + }) } } diff --git a/tx/textual/internal/testdata/bytes.json b/tx/textual/internal/testdata/bytes.json index b8636f7796a7..b6d116f481f8 100644 --- a/tx/textual/internal/testdata/bytes.json +++ b/tx/textual/internal/testdata/bytes.json @@ -7,6 +7,6 @@ ["Zm9vYg==", "666F 6F62"], ["Zm9vYmE=", "666F 6F62 61"], ["Zm9vYmFy", "666F 6F62 6172"], - ["AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=", "0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F"], - ["AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g", "SHA-256=5D8F CFEF A9AE EB71 1FB8 ED1E 4B7D 5C8A 9BAF A46E 8E76 E68A A18A DCE5 A10D F6AB"] + ["AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI=", "0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F 2021 22"], + ["AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj", "SHA-256=5D7E 2D9B 1DCB C85E 7C89 0036 A2CF 2F9F E7B6 6554 F2DF 08CE C6AA 9C0A 25C9 9C21"] ] diff --git a/tx/textual/internal/testdata/e2e.json b/tx/textual/internal/testdata/e2e.json index 5eb670f92921..793eddbc9ec2 100644 --- a/tx/textual/internal/testdata/e2e.json +++ b/tx/textual/internal/testdata/e2e.json @@ -54,7 +54,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 1 Message" }, { "text": "Message (1/1): /cosmos.bank.v1beta1.MsgSend", "indent": 1 }, { "text": "MsgSend object", "indent": 2 }, @@ -66,7 +66,7 @@ { "text": "Gas limit: 100'000", "expert": true }, { "text": "Hash of raw bytes: 785bd306ea8962cdb9600089bdd65f3dc029e1aea112dee69e19546c9adad86e", "expert": true } ], - "cbor": "91a10172436861696e2069643a206d792d636861696ea101714163636f756e74206e756d6265723a2031a1016b53657175656e63653a2032a1017836416464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e7671613865796873a201782b5075626c6963206b65793a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b657903f5a3016d5075624b6579206f626a656374020103f5a301785c4b65793a205348412d3235363d46373935203246374620343132302043383136204446434620463036302045343836203733344220303134352035393042203139363820333835362044443030203330373420424430442031343643020203f5a101781e54686973207472616e73616374696f6e206861732031204d657373616765a201782b4d6573736167652028312f31293a202f636f736d6f732e62616e6b2e763162657461312e4d736753656e640201a2016e4d736753656e64206f626a6563740202a201783b46726f6d20616464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a2017839546f20616464726573733a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740203a2016f416d6f756e743a2031302041544f4d0203a1016e456e64206f66204d657373616765a10170466565733a20302e3030322041544f4da20172476173206c696d69743a203130302730303003f5a201785348617368206f66207261772062797465733a203738356264333036656138393632636462393630303038396264643635663364633032396531616561313132646565363965313935343663396164616438366503f5" + "cbor": "91a10172436861696e2069643a206d792d636861696ea101714163636f756e74206e756d6265723a2031a1016b53657175656e63653a2032a1017836416464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e7671613865796873a201782b5075626c6963206b65793a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b657903f5a3016d5075624b6579206f626a656374020103f5a30178574b65793a2030324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444020203f5a101781e54686973207472616e73616374696f6e206861732031204d657373616765a201782b4d6573736167652028312f31293a202f636f736d6f732e62616e6b2e763162657461312e4d736753656e640201a2016e4d736753656e64206f626a6563740202a201783b46726f6d20616464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a2017839546f20616464726573733a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740203a2016f416d6f756e743a2031302041544f4d0203a1016e456e64206f66204d657373616765a10170466565733a20302e3030322041544f4da20172476173206c696d69743a203130302730303003f5a201785348617368206f66207261772062797465733a203738356264333036656138393632636462393630303038396264643635663364633032396531616561313132646565363965313935343663396164616438366503f5" }, { "name": "a bit of everything", @@ -197,7 +197,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 2 Messages" }, { "text": "Message (1/2): /cosmos.authz.v1beta1.MsgExec", "indent": 1 }, { "text": "MsgExec object", "indent": 2 }, @@ -235,10 +235,10 @@ { "text": "Public keys: 2 Any", "indent": 4, "expert": true }, { "text": "Public keys (1/2): /cosmos.crypto.secp256k1.PubKey", "indent": 5, "expert": true }, { "text": "PubKey object", "indent": 6, "expert": true }, - { "text": "Key: SHA-256=8560 3B16 9613 06E3 9D23 BEE0 3156 7D77 F9BB 5977 A249 529F 8D9C AE2D 71CA 0ADE", "indent": 7, "expert": true }, + { "text": "Key: 0257 4EBE 0BFC 754F 5967 3BA1 1B27 500F 9158 ADE2 E17E 1A01 82B0 CA8B C652 4DB0 93", "indent": 7, "expert": true }, { "text": "Public keys (2/2): /cosmos.crypto.ed25519.PubKey", "indent": 5, "expert": true }, { "text": "PubKey object", "indent": 6, "expert": true }, - { "text": "Key: SHA-256=2DEF 8D73 17D8 7F1F A337 CA21 9CDE 80EC C602 6605 1328 B964 E27D 056A 94DD AC64", "indent": 7, "expert": true }, + { "text": "Key: 0315 0C47 F18A A327 16A6 547E DA8B 7369 067D CE11 D141 6245 B778 756C F835 9678 77", "indent": 7, "expert": true }, { "text": "End of Public keys", "indent": 4, "expert": true }, { "text": "Mode info: ModeInfo object", "indent": 2, "expert": true }, { "text": "Multi: Multi object", "indent": 3, "expert": true }, @@ -266,6 +266,6 @@ { "text": "End of Non critical extension options", "expert": true }, { "text": "Hash of raw bytes: 7ea02e8f0baed2db969e2d9ae4dc51fa31116259bd42897588072faf0ebb4d2e", "expert": true } ], - "cbor": "9847a10172436861696e2069643a206d792d636861696ea101714163636f756e74206e756d6265723a2031a1016b53657175656e63653a2032a1017836416464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e7671613865796873a201782b5075626c6963206b65793a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b657903f5a3016d5075624b6579206f626a656374020103f5a301785c4b65793a205348412d3235363d46373935203246374620343132302043383136204446434620463036302045343836203733344220303134352035393042203139363820333835362044443030203330373420424430442031343643020203f5a101781f54686973207472616e73616374696f6e206861732032204d65737361676573a201782c4d6573736167652028312f32293a202f636f736d6f732e617574687a2e763162657461312e4d7367457865630201a2016e4d736745786563206f626a6563740202a20178364772616e7465653a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a2016b4d7367733a203120416e790203a20178284d7367732028312f31293a202f636f736d6f732e62616e6b2e763162657461312e4d736753656e640204a2016e4d736753656e64206f626a6563740205a201783b46726f6d20616464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730206a2017839546f20616464726573733a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740206a2016f416d6f756e743a2031302041544f4d0206a2016b456e64206f66204d7367730203a20178254d6573736167652028322f32293a202f636f736d6f732e676f762e76312e4d7367566f74650201a2016e4d7367566f7465206f626a6563740202a2016e50726f706f73616c2069643a20310203a2017834566f7465723a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a201774f7074696f6e3a20564f54455f4f5054494f4e5f5945530203a2017901ed4d657461646174613a204c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400203a1016e456e64206f66204d657373616765a101781f4d656d6f3a203e20e29a9befb88f5c7532363942e29a9befb88f2020202020a10170466565733a20302e3030322041544f4da20178384665652070617965723a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357403f5a201783a466565206772616e7465723a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687303f5a101781c5469703a20302e30322041544f4d2c2033302730303020756f736d6fa10178355469707065723a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b683574a20172476173206c696d69743a203130302730303003f5a2017254696d656f7574206865696768743a20323003f5a201781a4f74686572207369676e65723a2031205369676e6572496e666f03f5a30178254f74686572207369676e65722028312f31293a205369676e6572496e666f206f626a656374020103f5a30178355075626c6963206b65793a202f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579020203f5a30178184c6567616379416d696e6f5075624b6579206f626a656374020303f5a3016c5468726573686f6c643a2032020403f5a301725075626c6963206b6579733a203220416e79020403f5a30178325075626c6963206b6579732028312f32293a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579020503f5a3016d5075624b6579206f626a656374020603f5a301785c4b65793a205348412d3235363d38353630203342313620393631332030364533203944323320424545302033313536203744373720463942422035393737204132343920353239462038443943204145324420373143412030414445020703f5a30178305075626c6963206b6579732028322f32293a202f636f736d6f732e63727970746f2e656432353531392e5075624b6579020503f5a3016d5075624b6579206f626a656374020603f5a301785c4b65793a205348412d3235363d32444546203844373320313744382037463146204133333720434132312039434445203830454320433630322036363035203133323820423936342045323744203035364120393444442041433634020703f5a30172456e64206f66205075626c6963206b657973020403f5a301781a4d6f646520696e666f3a204d6f6465496e666f206f626a656374020203f5a301734d756c74693a204d756c7469206f626a656374020303f5a301782042697461727261793a20436f6d706163744269744172726179206f626a656374020403f5a30174457874726120626974732073746f7265643a2035020503f5a30169456c656d733a203438020503f5a301764d6f646520696e666f733a2032204d6f6465496e666f020403f5a30178214d6f646520696e666f732028312f32293a204d6f6465496e666f206f626a656374020503f5a3017553696e676c653a2053696e676c65206f626a656374020603f5a30178214d6f64653a205349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e020703f5a30178214d6f646520696e666f732028322f32293a204d6f6465496e666f206f626a656374020503f5a3017553696e676c653a2053696e676c65206f626a656374020603f5a30178214d6f64653a205349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e020703f5a30171456e64206f66204d6f646520696e666f73020403f5a3016b53657175656e63653a2035020203f5a20173456e64206f66204f74686572207369676e657203f5a2017818457874656e73696f6e206f7074696f6e733a203120416e7903f5a3017832457874656e73696f6e206f7074696f6e732028312f31293a202f636f736d6f732e626173652e763162657461312e436f696e020103f5a30166352041544f4d020203f5a2017818456e64206f6620457874656e73696f6e206f7074696f6e7303f5a20178254e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e733a203120416e7903f5a30178414e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f31293a202f636f736d6f732e617574682e763162657461312e506172616d73020103f5a3016d506172616d73206f626a656374020203f5a301774d6178206d656d6f20636861726163746572733a203130020303f5a2017825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7303f5a201785348617368206f66207261772062797465733a203765613032653866306261656432646239363965326439616534646335316661333131313632353962643432383937353838303732666166306562623464326503f5" + "cbor": "9847a10172436861696e2069643a206d792d636861696ea101714163636f756e74206e756d6265723a2031a1016b53657175656e63653a2032a1017836416464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e7671613865796873a201782b5075626c6963206b65793a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b657903f5a3016d5075624b6579206f626a656374020103f5a30178574b65793a2030324542204444374620453446442045423736204443384120323035452046363544203739304320443330452038413337203541354320323532382045423341203932334120463146422034443739203444020203f5a101781f54686973207472616e73616374696f6e206861732032204d65737361676573a201782c4d6573736167652028312f32293a202f636f736d6f732e617574687a2e763162657461312e4d7367457865630201a2016e4d736745786563206f626a6563740202a20178364772616e7465653a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a2016b4d7367733a203120416e790203a20178284d7367732028312f31293a202f636f736d6f732e62616e6b2e763162657461312e4d736753656e640204a2016e4d736753656e64206f626a6563740205a201783b46726f6d20616464726573733a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730206a2017839546f20616464726573733a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b6835740206a2016f416d6f756e743a2031302041544f4d0206a2016b456e64206f66204d7367730203a20178254d6573736167652028322f32293a202f636f736d6f732e676f762e76312e4d7367566f74650201a2016e4d7367566f7465206f626a6563740202a2016e50726f706f73616c2069643a20310203a2017834566f7465723a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e76716138657968730203a201774f7074696f6e3a20564f54455f4f5054494f4e5f5945530203a2017901ed4d657461646174613a204c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742c2073656420646f20656975736d6f642074656d706f7220696e6369646964756e74207574206c61626f726520657420646f6c6f7265206d61676e6120616c697175612e20557420656e696d206164206d696e696d2076656e69616d2c2071756973206e6f737472756420657865726369746174696f6e20756c6c616d636f206c61626f726973206e69736920757420616c697175697020657820656120636f6d6d6f646f20636f6e7365717561742e2044756973206175746520697275726520646f6c6f7220696e20726570726568656e646572697420696e20766f6c7570746174652076656c697420657373652063696c6c756d20646f6c6f726520657520667567696174206e756c6c612070617269617475722e204578636570746575722073696e74206f6363616563617420637570696461746174206e6f6e2070726f6964656e742c2073756e7420696e2063756c706120717569206f666669636961206465736572756e74206d6f6c6c697420616e696d20696420657374206c61626f72756d2e20416c736f20697420656e647320696e2020612073696e676c6520616d70657273616e6420400203a1016e456e64206f66204d657373616765a101781f4d656d6f3a203e20e29a9befb88f5c7532363942e29a9befb88f2020202020a10170466565733a20302e3030322041544f4da20178384665652070617965723a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b68357403f5a201783a466565206772616e7465723a20636f736d6f7331756c6176336873656e7570737771666b77327933737570356b677471776e767161386579687303f5a101781c5469703a20302e30322041544f4d2c2033302730303020756f736d6fa10178355469707065723a20636f736d6f7331656a726634637572327779366b667572673966326a707070326833616665356836706b683574a20172476173206c696d69743a203130302730303003f5a2017254696d656f7574206865696768743a20323003f5a201781a4f74686572207369676e65723a2031205369676e6572496e666f03f5a30178254f74686572207369676e65722028312f31293a205369676e6572496e666f206f626a656374020103f5a30178355075626c6963206b65793a202f636f736d6f732e63727970746f2e6d756c74697369672e4c6567616379416d696e6f5075624b6579020203f5a30178184c6567616379416d696e6f5075624b6579206f626a656374020303f5a3016c5468726573686f6c643a2032020403f5a301725075626c6963206b6579733a203220416e79020403f5a30178325075626c6963206b6579732028312f32293a202f636f736d6f732e63727970746f2e736563703235366b312e5075624b6579020503f5a3016d5075624b6579206f626a656374020603f5a30178574b65793a2030323537203445424520304246432037353446203539363720334241312031423237203530304620393135382041444532204531374520314130312038324230204341384220433635322034444230203933020703f5a30178305075626c6963206b6579732028322f32293a202f636f736d6f732e63727970746f2e656432353531392e5075624b6579020503f5a3016d5075624b6579206f626a656374020603f5a30178574b65793a2030333135203043343720463138412041333237203136413620353437452044413842203733363920303637442043453131204431343120363234352042373738203735364320463833352039363738203737020703f5a30172456e64206f66205075626c6963206b657973020403f5a301781a4d6f646520696e666f3a204d6f6465496e666f206f626a656374020203f5a301734d756c74693a204d756c7469206f626a656374020303f5a301782042697461727261793a20436f6d706163744269744172726179206f626a656374020403f5a30174457874726120626974732073746f7265643a2035020503f5a30169456c656d733a203438020503f5a301764d6f646520696e666f733a2032204d6f6465496e666f020403f5a30178214d6f646520696e666f732028312f32293a204d6f6465496e666f206f626a656374020503f5a3017553696e676c653a2053696e676c65206f626a656374020603f5a30178214d6f64653a205349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e020703f5a30178214d6f646520696e666f732028322f32293a204d6f6465496e666f206f626a656374020503f5a3017553696e676c653a2053696e676c65206f626a656374020603f5a30178214d6f64653a205349474e5f4d4f44455f4c45474143595f414d494e4f5f4a534f4e020703f5a30171456e64206f66204d6f646520696e666f73020403f5a3016b53657175656e63653a2035020203f5a20173456e64206f66204f74686572207369676e657203f5a2017818457874656e73696f6e206f7074696f6e733a203120416e7903f5a3017832457874656e73696f6e206f7074696f6e732028312f31293a202f636f736d6f732e626173652e763162657461312e436f696e020103f5a30166352041544f4d020203f5a2017818456e64206f6620457874656e73696f6e206f7074696f6e7303f5a20178254e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e733a203120416e7903f5a30178414e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e732028312f31293a202f636f736d6f732e617574682e763162657461312e506172616d73020103f5a3016d506172616d73206f626a656374020203f5a301774d6178206d656d6f20636861726163746572733a203130020303f5a2017825456e64206f66204e6f6e20637269746963616c20657874656e73696f6e206f7074696f6e7303f5a201785348617368206f66207261772062797465733a203765613032653866306261656432646239363965326439616534646335316661333131313632353962643432383937353838303732666166306562623464326503f5" } ] diff --git a/tx/textual/internal/testdata/tx.json b/tx/textual/internal/testdata/tx.json index 1f59ba62449d..8accda252318 100644 --- a/tx/textual/internal/testdata/tx.json +++ b/tx/textual/internal/testdata/tx.json @@ -54,7 +54,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 1 Message" }, { "text": "Message (1/1): /cosmos.bank.v1beta1.MsgSend", "indent": 1 }, { "text": "MsgSend object", "indent": 2 }, @@ -123,7 +123,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 1 Message" }, { "text": "Message (1/1): /cosmos.bank.v1beta1.MsgSend", "indent": 1 }, { "text": "MsgSend object", "indent": 2 }, @@ -193,7 +193,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 1 Message" }, { "text": "Message (1/1): /cosmos.gov.v1.MsgVote", "indent": 1 }, { "text": "MsgVote object", "indent": 2 }, @@ -339,7 +339,7 @@ { "text": "Address: cosmos1ulav3hsenupswqfkw2y3sup5kgtqwnvqa8eyhs" }, { "text": "Public key: /cosmos.crypto.secp256k1.PubKey", "expert": true }, { "text": "PubKey object", "indent": 1, "expert": true }, - { "text": "Key: SHA-256=F795 2F7F 4120 C816 DFCF F060 E486 734B 0145 590B 1968 3856 DD00 3074 BD0D 146C", "indent": 2, "expert": true }, + { "text": "Key: 02EB DD7F E4FD EB76 DC8A 205E F65D 790C D30E 8A37 5A5C 2528 EB3A 923A F1FB 4D79 4D", "indent": 2, "expert": true }, { "text": "This transaction has 2 Messages" }, { "text": "Message (1/2): /cosmos.authz.v1beta1.MsgExec", "indent": 1 }, { "text": "MsgExec object", "indent": 2 }, @@ -377,10 +377,10 @@ { "text": "Public keys: 2 Any", "indent": 4, "expert": true }, { "text": "Public keys (1/2): /cosmos.crypto.secp256k1.PubKey", "indent": 5, "expert": true }, { "text": "PubKey object", "indent": 6, "expert": true }, - { "text": "Key: SHA-256=8560 3B16 9613 06E3 9D23 BEE0 3156 7D77 F9BB 5977 A249 529F 8D9C AE2D 71CA 0ADE", "indent": 7, "expert": true }, + { "text": "Key: 0257 4EBE 0BFC 754F 5967 3BA1 1B27 500F 9158 ADE2 E17E 1A01 82B0 CA8B C652 4DB0 93", "indent": 7, "expert": true }, { "text": "Public keys (2/2): /cosmos.crypto.ed25519.PubKey", "indent": 5, "expert": true }, { "text": "PubKey object", "indent": 6, "expert": true }, - { "text": "Key: SHA-256=2DEF 8D73 17D8 7F1F A337 CA21 9CDE 80EC C602 6605 1328 B964 E27D 056A 94DD AC64", "indent": 7, "expert": true }, + { "text": "Key: 0315 0C47 F18A A327 16A6 547E DA8B 7369 067D CE11 D141 6245 B778 756C F835 9678 77", "indent": 7, "expert": true }, { "text": "End of Public keys", "indent": 4, "expert": true }, { "text": "Mode info: ModeInfo object", "indent": 2, "expert": true }, { "text": "Multi: Multi object", "indent": 3, "expert": true }, diff --git a/tx/textual/tx_test.go b/tx/textual/tx_test.go index fc1f35216819..42e0c0c96e99 100644 --- a/tx/textual/tx_test.go +++ b/tx/textual/tx_test.go @@ -6,20 +6,17 @@ import ( "os" "testing" - "github.com/cosmos/cosmos-proto/any" "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/require" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/anypb" _ "cosmossdk.io/api/cosmos/auth/v1beta1" _ "cosmossdk.io/api/cosmos/authz/v1beta1" bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" _ "cosmossdk.io/api/cosmos/crypto/ed25519" - "cosmossdk.io/api/cosmos/crypto/multisig" _ "cosmossdk.io/api/cosmos/crypto/secp256k1" _ "cosmossdk.io/api/cosmos/gov/v1" txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" @@ -102,15 +99,9 @@ func TestTxJsonTestcases(t *testing.T) { parsedAuthInfo := &txv1beta1.AuthInfo{} err = proto.Unmarshal(parsedTextualData.AuthInfoBytes, parsedAuthInfo) require.NoError(t, err) - // Remove the non-parsable fields, i.e. the hashed bytes - for i, si := range txAuthInfo.SignerInfos { - txAuthInfo.SignerInfos[i].PublicKey = removePkKeys(t, si.PublicKey) - } diff = cmp.Diff(txAuthInfo, parsedAuthInfo, protocmp.Transform()) require.Empty(t, diff) - // Remove the non-parsable fields, i.e. the hashed public key - removePkKeys(t, signerData.PubKey) diff = cmp.Diff( signerData, signerDataFromProto(parsedTextualData.SignerData), @@ -156,27 +147,3 @@ func signerDataFromProto(d *textualpb.SignerData) signing.SignerData { PubKey: d.PubKey, } } - -// removePkKeys takes a public key Any, decodes it, and recursively removes all -// the "key" fields (hashed by textual) inside it. -func removePkKeys(t *testing.T, pkAny *anypb.Any) *anypb.Any { - pk, err := anypb.UnmarshalNew(pkAny, proto.UnmarshalOptions{}) - require.NoError(t, err) - m := pk.ProtoReflect().Interface() - switch m := m.(type) { - case *multisig.LegacyAminoPubKey: - newAnys := make([]*anypb.Any, len(m.PublicKeys)) - for i, any := range m.PublicKeys { - newAnys[i] = removePkKeys(t, any) - } - - m.PublicKeys = newAnys - newMultisigAny, err := any.New(m) - require.NoError(t, err) - - return newMultisigAny - default: - pkAny.Value = nil - return pkAny - } -} From 07d38efffb88a922bf782e8903d4252ffef03bc4 Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Thu, 12 Jan 2023 13:41:41 -0500 Subject: [PATCH 3/6] feat(core): add register services extension interface (#14605) --- core/appmodule/module.go | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/core/appmodule/module.go b/core/appmodule/module.go index 70ba46b0b4ac..2502d25c48c3 100644 --- a/core/appmodule/module.go +++ b/core/appmodule/module.go @@ -1,6 +1,9 @@ package appmodule -import "cosmossdk.io/depinject" +import ( + "cosmossdk.io/depinject" + "google.golang.org/grpc" +) // AppModule is a tag interface for app module implementations to use as a basis // for extension interfaces. It provides no functionality itself, but is the @@ -12,3 +15,23 @@ type AppModule interface { // IsAppModule is a dummy method to tag a struct as implementing an AppModule. IsAppModule() } + +// HasServices is the extension interface that modules should implement to register +// implementations of services defined in .proto files. +type HasServices interface { + AppModule + + // RegisterServices registers the module's services with the app's service + // registrar. + // + // Two types of services are currently supported: + // - read-only gRPC query services, which are the default. + // - transaction message services, which must have the protobuf service + // option "cosmos.msg.v1.service" (defined in "cosmos/msg/v1/service.proto") + // set to true. + // + // The service registrar will figure out which type of service you are + // implementing based on the presence (or absence) of protobuf options. You + // do not need to specify this in golang code. + RegisterServices(grpc.ServiceRegistrar) +} From 248f8bd488679c8b1cdf676a7c9d64a06fa87b00 Mon Sep 17 00:00:00 2001 From: Aaron Craelius Date: Thu, 12 Jan 2023 14:14:11 -0500 Subject: [PATCH 4/6] test(x/circuit): add MsgAuthorizeCircuitBreaker feature (#14512) Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Likhita Polavarapu <78951027+likhita-809@users.noreply.github.com> Co-authored-by: Marko --- api/cosmos/circuit/v1/tx.pulsar.go | 72 +- go.mod | 6 + go.sum | 9 + proto/cosmos/circuit/v1/tx.proto | 6 +- x/circuit/features/msg_authorize.feature | 87 +++ x/circuit/go.mod | 90 +++ x/circuit/go.sum | 817 +++++++++++++++++++++++ x/circuit/keeper/msg_authorize_test.go | 40 ++ x/circuit/types/tx.pb.go | 96 +-- 9 files changed, 1136 insertions(+), 87 deletions(-) create mode 100644 x/circuit/features/msg_authorize.feature create mode 100644 x/circuit/go.mod create mode 100644 x/circuit/go.sum create mode 100644 x/circuit/keeper/msg_authorize_test.go diff --git a/api/cosmos/circuit/v1/tx.pulsar.go b/api/cosmos/circuit/v1/tx.pulsar.go index aea19207025d..42721c7fe160 100644 --- a/api/cosmos/circuit/v1/tx.pulsar.go +++ b/api/cosmos/circuit/v1/tx.pulsar.go @@ -962,7 +962,7 @@ func (x *_CircuitBreakerPermissions_2_list) Append(value protoreflect.Value) { } func (x *_CircuitBreakerPermissions_2_list) AppendMutable() protoreflect.Value { - panic(fmt.Errorf("AppendMutable can not be called on message CircuitBreakerPermissions at list field LimitTypeUrls as it is not of Message kind")) + panic(fmt.Errorf("AppendMutable can not be called on message CircuitBreakerPermissions at list field LimitMsgTypes as it is not of Message kind")) } func (x *_CircuitBreakerPermissions_2_list) Truncate(n int) { @@ -981,14 +981,14 @@ func (x *_CircuitBreakerPermissions_2_list) IsValid() bool { var ( md_CircuitBreakerPermissions protoreflect.MessageDescriptor fd_CircuitBreakerPermissions_level protoreflect.FieldDescriptor - fd_CircuitBreakerPermissions_limit_type_urls protoreflect.FieldDescriptor + fd_CircuitBreakerPermissions_limit_msg_types protoreflect.FieldDescriptor ) func init() { file_cosmos_circuit_v1_tx_proto_init() md_CircuitBreakerPermissions = File_cosmos_circuit_v1_tx_proto.Messages().ByName("CircuitBreakerPermissions") fd_CircuitBreakerPermissions_level = md_CircuitBreakerPermissions.Fields().ByName("level") - fd_CircuitBreakerPermissions_limit_type_urls = md_CircuitBreakerPermissions.Fields().ByName("limit_type_urls") + fd_CircuitBreakerPermissions_limit_msg_types = md_CircuitBreakerPermissions.Fields().ByName("limit_msg_types") } var _ protoreflect.Message = (*fastReflection_CircuitBreakerPermissions)(nil) @@ -1062,9 +1062,9 @@ func (x *fastReflection_CircuitBreakerPermissions) Range(f func(protoreflect.Fie return } } - if len(x.LimitTypeUrls) != 0 { - value := protoreflect.ValueOfList(&_CircuitBreakerPermissions_2_list{list: &x.LimitTypeUrls}) - if !f(fd_CircuitBreakerPermissions_limit_type_urls, value) { + if len(x.LimitMsgTypes) != 0 { + value := protoreflect.ValueOfList(&_CircuitBreakerPermissions_2_list{list: &x.LimitMsgTypes}) + if !f(fd_CircuitBreakerPermissions_limit_msg_types, value) { return } } @@ -1085,8 +1085,8 @@ func (x *fastReflection_CircuitBreakerPermissions) Has(fd protoreflect.FieldDesc switch fd.FullName() { case "cosmos.circuit.v1.CircuitBreakerPermissions.level": return x.Level != 0 - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": - return len(x.LimitTypeUrls) != 0 + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": + return len(x.LimitMsgTypes) != 0 default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.circuit.v1.CircuitBreakerPermissions")) @@ -1105,8 +1105,8 @@ func (x *fastReflection_CircuitBreakerPermissions) Clear(fd protoreflect.FieldDe switch fd.FullName() { case "cosmos.circuit.v1.CircuitBreakerPermissions.level": x.Level = 0 - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": - x.LimitTypeUrls = nil + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": + x.LimitMsgTypes = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.circuit.v1.CircuitBreakerPermissions")) @@ -1126,11 +1126,11 @@ func (x *fastReflection_CircuitBreakerPermissions) Get(descriptor protoreflect.F case "cosmos.circuit.v1.CircuitBreakerPermissions.level": value := x.Level return protoreflect.ValueOfEnum((protoreflect.EnumNumber)(value)) - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": - if len(x.LimitTypeUrls) == 0 { + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": + if len(x.LimitMsgTypes) == 0 { return protoreflect.ValueOfList(&_CircuitBreakerPermissions_2_list{}) } - listValue := &_CircuitBreakerPermissions_2_list{list: &x.LimitTypeUrls} + listValue := &_CircuitBreakerPermissions_2_list{list: &x.LimitMsgTypes} return protoreflect.ValueOfList(listValue) default: if descriptor.IsExtension() { @@ -1154,10 +1154,10 @@ func (x *fastReflection_CircuitBreakerPermissions) Set(fd protoreflect.FieldDesc switch fd.FullName() { case "cosmos.circuit.v1.CircuitBreakerPermissions.level": x.Level = (CircuitBreakerPermissions_Level)(value.Enum()) - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": lv := value.List() clv := lv.(*_CircuitBreakerPermissions_2_list) - x.LimitTypeUrls = *clv.list + x.LimitMsgTypes = *clv.list default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.circuit.v1.CircuitBreakerPermissions")) @@ -1178,11 +1178,11 @@ func (x *fastReflection_CircuitBreakerPermissions) Set(fd protoreflect.FieldDesc // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_CircuitBreakerPermissions) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": - if x.LimitTypeUrls == nil { - x.LimitTypeUrls = []string{} + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": + if x.LimitMsgTypes == nil { + x.LimitMsgTypes = []string{} } - value := &_CircuitBreakerPermissions_2_list{list: &x.LimitTypeUrls} + value := &_CircuitBreakerPermissions_2_list{list: &x.LimitMsgTypes} return protoreflect.ValueOfList(value) case "cosmos.circuit.v1.CircuitBreakerPermissions.level": panic(fmt.Errorf("field level of message cosmos.circuit.v1.CircuitBreakerPermissions is not mutable")) @@ -1201,7 +1201,7 @@ func (x *fastReflection_CircuitBreakerPermissions) NewField(fd protoreflect.Fiel switch fd.FullName() { case "cosmos.circuit.v1.CircuitBreakerPermissions.level": return protoreflect.ValueOfEnum(0) - case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_type_urls": + case "cosmos.circuit.v1.CircuitBreakerPermissions.limit_msg_types": list := []string{} return protoreflect.ValueOfList(&_CircuitBreakerPermissions_2_list{list: &list}) default: @@ -1276,8 +1276,8 @@ func (x *fastReflection_CircuitBreakerPermissions) ProtoMethods() *protoiface.Me if x.Level != 0 { n += 1 + runtime.Sov(uint64(x.Level)) } - if len(x.LimitTypeUrls) > 0 { - for _, s := range x.LimitTypeUrls { + if len(x.LimitMsgTypes) > 0 { + for _, s := range x.LimitMsgTypes { l = len(s) n += 1 + l + runtime.Sov(uint64(l)) } @@ -1311,11 +1311,11 @@ func (x *fastReflection_CircuitBreakerPermissions) ProtoMethods() *protoiface.Me i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.LimitTypeUrls) > 0 { - for iNdEx := len(x.LimitTypeUrls) - 1; iNdEx >= 0; iNdEx-- { - i -= len(x.LimitTypeUrls[iNdEx]) - copy(dAtA[i:], x.LimitTypeUrls[iNdEx]) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LimitTypeUrls[iNdEx]))) + if len(x.LimitMsgTypes) > 0 { + for iNdEx := len(x.LimitMsgTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(x.LimitMsgTypes[iNdEx]) + copy(dAtA[i:], x.LimitMsgTypes[iNdEx]) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LimitMsgTypes[iNdEx]))) i-- dAtA[i] = 0x12 } @@ -1395,7 +1395,7 @@ func (x *fastReflection_CircuitBreakerPermissions) ProtoMethods() *protoiface.Me } case 2: if wireType != 2 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LimitTypeUrls", wireType) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LimitMsgTypes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1423,7 +1423,7 @@ func (x *fastReflection_CircuitBreakerPermissions) ProtoMethods() *protoiface.Me if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.LimitTypeUrls = append(x.LimitTypeUrls, string(dAtA[iNdEx:postIndex])) + x.LimitMsgTypes = append(x.LimitMsgTypes, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -3430,10 +3430,10 @@ type CircuitBreakerPermissions struct { // level is the level of permissions granted to this account. Level CircuitBreakerPermissions_Level `protobuf:"varint,1,opt,name=level,proto3,enum=cosmos.circuit.v1.CircuitBreakerPermissions_Level" json:"level,omitempty"` - // limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type - // URLs that the account can pause. It is an error to use limit_type_urls with + // limit_msg_types is used with LEVEL_SOME_MSGS to limit the lists of Msg type + // name that the account can pause. It is an error to use limit_msg_types with // a level other than LEVEL_SOME_MSGS. - LimitTypeUrls []string `protobuf:"bytes,2,rep,name=limit_type_urls,json=limitTypeUrls,proto3" json:"limit_type_urls,omitempty"` + LimitMsgTypes []string `protobuf:"bytes,2,rep,name=limit_msg_types,json=limitMsgTypes,proto3" json:"limit_msg_types,omitempty"` } func (x *CircuitBreakerPermissions) Reset() { @@ -3463,9 +3463,9 @@ func (x *CircuitBreakerPermissions) GetLevel() CircuitBreakerPermissions_Level { return CircuitBreakerPermissions_LEVEL_NONE_UNSPECIFIED } -func (x *CircuitBreakerPermissions) GetLimitTypeUrls() []string { +func (x *CircuitBreakerPermissions) GetLimitMsgTypes() []string { if x != nil { - return x.LimitTypeUrls + return x.LimitMsgTypes } return nil } @@ -3650,8 +3650,8 @@ var file_cosmos_circuit_v1_tx_proto_rawDesc = []byte{ 0x2e, 0x43, 0x69, 0x72, 0x63, 0x75, 0x69, 0x74, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x73, 0x22, + 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x63, 0x0a, 0x05, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1a, 0x0a, 0x16, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x53, 0x4f, diff --git a/go.mod b/go.mod index b86298cafba9..7ce8c303d3df 100644 --- a/go.mod +++ b/go.mod @@ -45,6 +45,7 @@ require ( github.com/prometheus/client_golang v1.14.0 github.com/prometheus/common v0.39.0 github.com/rakyll/statik v0.1.7 + github.com/regen-network/gocuke v0.6.2 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 @@ -76,12 +77,14 @@ require ( github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/DataDog/zstd v1.4.5 // indirect github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect + github.com/alecthomas/participle/v2 v2.0.0-alpha7 // indirect github.com/aws/aws-sdk-go v1.40.45 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cockroachdb/apd/v3 v3.1.0 // indirect github.com/cockroachdb/errors v1.8.1 // indirect github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 // indirect @@ -89,6 +92,8 @@ require ( github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect + github.com/cucumber/common/gherkin/go/v22 v22.0.0 // indirect + github.com/cucumber/common/messages/go/v17 v17.1.1 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect @@ -104,6 +109,7 @@ require ( github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gofrs/uuid v4.2.0+incompatible // indirect github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.0.0 // indirect diff --git a/go.sum b/go.sum index 079fec889d69..61c125f7e433 100644 --- a/go.sum +++ b/go.sum @@ -93,6 +93,9 @@ github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -161,6 +164,7 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= github.com/cockroachdb/errors v1.6.1/go.mod h1:tm6FTP5G81vwJ5lC0SizQo374JNCOPrHyXGitRJoDqM= @@ -216,7 +220,9 @@ github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -323,7 +329,9 @@ github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869 h1:kRpU4zq+Pzh4feET49aEWPOzwQy3U2SsbZEQ7QEcif0= @@ -757,6 +765,7 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= diff --git a/proto/cosmos/circuit/v1/tx.proto b/proto/cosmos/circuit/v1/tx.proto index 0fcd410977db..4726e3d3e8c0 100644 --- a/proto/cosmos/circuit/v1/tx.proto +++ b/proto/cosmos/circuit/v1/tx.proto @@ -47,10 +47,10 @@ message CircuitBreakerPermissions { // level is the level of permissions granted to this account. Level level = 1; - // limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type - // URLs that the account can pause. It is an error to use limit_type_urls with + // limit_msg_types is used with LEVEL_SOME_MSGS to limit the lists of Msg type + // name that the account can pause. It is an error to use limit_msg_types with // a level other than LEVEL_SOME_MSGS. - repeated string limit_type_urls = 2; + repeated string limit_msg_types = 2; // Level is the permission level. enum Level { diff --git a/x/circuit/features/msg_authorize.feature b/x/circuit/features/msg_authorize.feature new file mode 100644 index 000000000000..c0bcca8e412b --- /dev/null +++ b/x/circuit/features/msg_authorize.feature @@ -0,0 +1,87 @@ +Feature: MsgAuthorizeCircuitBreaker + + Circuit breaker actions can be authorized: + - when the granter is a super-admin + - when the permissions are valid + + Rule: the granter must be a super-admin + Example: granter is a super-admin + Given "acct1" has permission "LEVEL_SUPER_ADMIN" + When attempts to grant "acct2" the permissions + """ + { "level": "LEVEL_ALL_MSGS" } + """ + Then expect success + + Example: granter has no permissions + Given "acct1" has no permissions + When "acct1" attempts to grant "acct2" the permissions + """ + { "level": "LEVEL_ALL_MSGS" } + """ + Then expect an "unauthorized" error + + Example: granter has all msg's permissions + Given "acct1" has permission "LEVEL_ALL_MSGS" + When "acct1" attempts to grant "acct2" the permissions + """ + { "level": "LEVEL_ALL_MSGS" } + """ + Then expect an "unauthorized" error + + + Rule: limit_msg_types must be used with LEVEL_SOME_MSGS + Example: granting LEVEL_SOME_MSGS with limit_msg_types + Given "acct1" has permission "LEVEL_ALL_MSGS" + When "acct1" attempts to grant "acct2" the permissions + """ + { + "level": "LEVEL_SOME_MSGS" + "limit_msg_types": "cosmos.bank.v1beta1.MsgSend" + } + """ + Then expect success + + Example: granting LEVEL_SOME_MSGS without limit_msg_types + Given "acct1" has permission "LEVEL_SUPER_ADMIN" + When "acct1" attempts to grant "acct2" the permissions + """ + { "level": "LEVEL_SOME_MSGS" } + """ + Then expect an "invalid request" error + + Example: granting LEVEL_ALL_MSGS with limit_msg_types + Given "acct1" has permission "LEVEL_SUPER_ADMIN" + When "acct1" attempts to grant "acct2" the permissions + """ + { + "level": "LEVEL_ALL_MSGS", + "limit_msg_types": "cosmos.bank.v1beta1.MsgSend" + } + """ + Then expect an "invalid request" error + + Example: attempting to revoke with limit_msg_types + Given "acct1" has permission "LEVEL_SUPER_ADMIN" + When "acct1" attempts to revoke "acct2" the permissions + """ + { + "level": "LEVEL_NONE_UNSPECIFIED", + "limit_msg_types": "cosmos.bank.v1beta1.MsgSend" + } + """ + Then expect an "invalid request" error + + + Rule: permissions can be revoked using LEVEL_NONE_UNSPECIFIED + Example: revoking permissions + Given "acct1" has permission "LEVEL_SUPER_ADMIN" + And "acct2" has permission "LEVEL_ALL_MSGS" + When "acct1" attempts to revoke "acct2" the permissions + """ + { + "level": "LEVEL_NONE_UNSPECIFIED", + } + """ + Then expect sucesss + And expect that "acct2" has no permissions diff --git a/x/circuit/go.mod b/x/circuit/go.mod new file mode 100644 index 000000000000..642aa7a47efc --- /dev/null +++ b/x/circuit/go.mod @@ -0,0 +1,90 @@ +module github.com/cosmos/cosmos-sdk/x/circuit + +go 1.19 + +require ( + github.com/cosmos/cosmos-sdk v0.47.0-rc1 + github.com/cosmos/gogoproto v1.4.3 + github.com/regen-network/gocuke v0.6.2 + google.golang.org/grpc v1.51.0 +) + +require ( + cosmossdk.io/errors v1.0.0-beta.7 // indirect + cosmossdk.io/math v1.0.0-beta.4 // indirect + github.com/alecthomas/participle/v2 v2.0.0-alpha7 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cockroachdb/apd/v3 v3.1.0 // indirect + github.com/confio/ics23/go v0.9.0 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.1 // indirect + github.com/cosmos/gorocksdb v1.2.0 // indirect + github.com/cucumber/common/gherkin/go/v22 v22.0.0 // indirect + github.com/cucumber/common/messages/go/v17 v17.1.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.5.1 // indirect + github.com/gofrs/uuid v4.2.0+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/gtank/merlin v0.1.1 // indirect + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.15.12 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect + github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.37.0 // indirect + github.com/prometheus/procfs v0.8.0 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/spf13/afero v1.9.2 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.14.0 // indirect + github.com/subosito/gotenv v1.4.1 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tendermint/tendermint v0.37.0-rc2 // indirect + github.com/tendermint/tm-db v0.6.7 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + golang.org/x/crypto v0.4.0 // indirect + golang.org/x/exp v0.0.0-20221019170559-20944726eadf // indirect + golang.org/x/net v0.3.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.1.0 // indirect + pgregory.net/rapid v0.5.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/x/circuit/go.sum b/x/circuit/go.sum new file mode 100644 index 000000000000..1846f58e1437 --- /dev/null +++ b/x/circuit/go.sum @@ -0,0 +1,817 @@ +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= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= +cosmossdk.io/core v0.3.2 h1:KlQIufpJHJvOs7YLGTZsZcCo1WlkencDXepsr8STKZQ= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= +cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E= +github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= +github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= +github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= +github.com/cosmos/cosmos-sdk v0.47.0-rc1 h1:ptoLIOAqFGoqnZeqgec9KvC2JIZ6CVIyMHHjti9p6dQ= +github.com/cosmos/cosmos-sdk v0.47.0-rc1/go.mod h1:yWd503ULBJ71Zuv7GD0/dYJuyeg4LGWAvjeI4wK/dfY= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogoproto v1.4.3 h1:RP3yyVREh9snv/lsOvmsAPQt8f44LgL281X0IOIhhcI= +github.com/cosmos/gogoproto v1.4.3/go.mod h1:0hLIG5TR7IvV1fme1HCFKjfzW9X2x0Mo+RooWXCnOWU= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= +github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= +github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= +github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869 h1:kRpU4zq+Pzh4feET49aEWPOzwQy3U2SsbZEQ7QEcif0= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= +github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= +github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= +github.com/tendermint/tendermint v0.37.0-rc2/go.mod h1:uYQO9DRNPeZROa9X3hJOZpYcVREDC2/HST+EiU5g2+A= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= +github.com/tidwall/btree v1.5.2 h1:5eA83Gfki799V3d3bJo9sWk+yL2LRoTEah3O/SA6/8w= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= +github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20221019170559-20944726eadf h1:nFVjjKDgNY37+ZSYCJmtYf7tOlfQswHqplG2eosjOMg= +golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.1.0 h1:rVV8Tcg/8jHUkPUorwjaMTtemIMVXfIPKiOqnhEhakk= +gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +pgregory.net/rapid v0.5.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= +pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/x/circuit/keeper/msg_authorize_test.go b/x/circuit/keeper/msg_authorize_test.go new file mode 100644 index 000000000000..f6b447fac8e4 --- /dev/null +++ b/x/circuit/keeper/msg_authorize_test.go @@ -0,0 +1,40 @@ +package keeper + +import ( + "testing" + + "github.com/regen-network/gocuke" +) + +func TestAuthorize(t *testing.T) { + t.Skip("TODO: uncomment this after implementing") + gocuke.NewRunner(t, &authorizeSuite{}).Path("../features/msg_authorize.feature").Run() +} + +type authorizeSuite struct { + t gocuke.TestingT +} + +func (s *authorizeSuite) HasPermission(a string, b string) { + panic("PENDING") +} + +func (s *authorizeSuite) HasNoPermissions(a string) { + panic("PENDING") +} + +func (s *authorizeSuite) AttemptsToGrantThePermissions(a string, b string, c gocuke.DocString) { + panic("PENDING") +} + +func (s *authorizeSuite) ExpectSuccess() { + panic("PENDING") +} + +func (s *authorizeSuite) ExpectAnError(a string) { + panic("PENDING") +} + +func (s *authorizeSuite) ExpectThatHasNoPermissions(a string) { + panic("PENDING") +} diff --git a/x/circuit/types/tx.pb.go b/x/circuit/types/tx.pb.go index e390de154964..1356453d92db 100644 --- a/x/circuit/types/tx.pb.go +++ b/x/circuit/types/tx.pb.go @@ -179,10 +179,10 @@ var xxx_messageInfo_MsgAuthorizeCircuitBreakerResponse proto.InternalMessageInfo type CircuitBreakerPermissions struct { // level is the level of permissions granted to this account. Level CircuitBreakerPermissions_Level `protobuf:"varint,1,opt,name=level,proto3,enum=cosmos.circuit.v1.CircuitBreakerPermissions_Level" json:"level,omitempty"` - // limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type - // URLs that the account can pause. It is an error to use limit_type_urls with + // limit_msg_types is used with LEVEL_SOME_MSGS to limit the lists of Msg type + // name that the account can pause. It is an error to use limit_msg_types with // a level other than LEVEL_SOME_MSGS. - LimitTypeUrls []string `protobuf:"bytes,2,rep,name=limit_type_urls,json=limitTypeUrls,proto3" json:"limit_type_urls,omitempty"` + LimitMsgTypes []string `protobuf:"bytes,2,rep,name=limit_msg_types,json=limitMsgTypes,proto3" json:"limit_msg_types,omitempty"` } func (m *CircuitBreakerPermissions) Reset() { *m = CircuitBreakerPermissions{} } @@ -225,9 +225,9 @@ func (m *CircuitBreakerPermissions) GetLevel() CircuitBreakerPermissions_Level { return CircuitBreakerPermissions_LEVEL_NONE_UNSPECIFIED } -func (m *CircuitBreakerPermissions) GetLimitTypeUrls() []string { +func (m *CircuitBreakerPermissions) GetLimitMsgTypes() []string { if m != nil { - return m.LimitTypeUrls + return m.LimitMsgTypes } return nil } @@ -437,40 +437,40 @@ func init() { proto.RegisterFile("cosmos/circuit/v1/tx.proto", fileDescriptor_a0 var fileDescriptor_a02145e57a6fbb1d = []byte{ // 543 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x41, 0x6f, 0x12, 0x5d, - 0x14, 0x65, 0x20, 0x7c, 0x5f, 0xb8, 0x58, 0x4a, 0x5f, 0xd3, 0x16, 0x27, 0x3a, 0x92, 0x89, 0x31, - 0xd8, 0xb4, 0x83, 0x60, 0xdc, 0x74, 0x47, 0xdb, 0xa9, 0x92, 0x30, 0x94, 0x0c, 0xc5, 0x85, 0x9b, - 0x09, 0xc5, 0x97, 0xe9, 0xb3, 0x0c, 0x33, 0x79, 0xf7, 0x41, 0x8a, 0x1b, 0x8d, 0xbf, 0xc0, 0x5f, - 0x62, 0xfa, 0x33, 0x5c, 0x76, 0xe9, 0xd2, 0xc0, 0xa2, 0x7b, 0xe3, 0x0f, 0x30, 0xcc, 0x30, 0x50, - 0x65, 0x88, 0x6d, 0x5c, 0x11, 0xee, 0x3d, 0xf7, 0x9c, 0xf3, 0xe6, 0xdc, 0x5c, 0x90, 0x3b, 0x2e, - 0x3a, 0x2e, 0x16, 0x3b, 0x8c, 0x77, 0xfa, 0x4c, 0x14, 0x07, 0xa5, 0xa2, 0xb8, 0xd0, 0x3c, 0xee, - 0x0a, 0x97, 0xac, 0x05, 0x3d, 0x6d, 0xda, 0xd3, 0x06, 0x25, 0x79, 0x6b, 0x0a, 0x77, 0xd0, 0x9e, - 0x40, 0x1d, 0xb4, 0x03, 0xac, 0xfa, 0x45, 0x02, 0xd9, 0x40, 0xbb, 0xd2, 0x17, 0x67, 0x2e, 0x67, - 0xef, 0xe9, 0x41, 0x30, 0xb3, 0xcf, 0x69, 0xfb, 0x9c, 0x72, 0x92, 0x83, 0xff, 0x6d, 0xde, 0xee, - 0x09, 0xca, 0x73, 0x52, 0x5e, 0x2a, 0xa4, 0xcc, 0xf0, 0xef, 0xbc, 0x43, 0x73, 0xf1, 0x9b, 0x1d, - 0x4a, 0xea, 0x90, 0xf6, 0x28, 0x77, 0x18, 0x22, 0x73, 0x7b, 0x98, 0x4b, 0xe4, 0xa5, 0x42, 0xba, - 0xbc, 0xa3, 0x2d, 0x98, 0xd2, 0x7e, 0xd7, 0x6a, 0xcc, 0x67, 0xcc, 0x9b, 0x04, 0x7b, 0xf7, 0x3e, - 0x5d, 0x5f, 0x6e, 0x87, 0xba, 0xea, 0x63, 0x50, 0x97, 0xfb, 0x35, 0x29, 0x7a, 0x6e, 0x0f, 0xa9, - 0xfa, 0x43, 0x82, 0xfb, 0x4b, 0xe9, 0xc9, 0x2b, 0x48, 0x76, 0xe9, 0x80, 0x76, 0xfd, 0x37, 0x65, - 0xca, 0xe5, 0xbb, 0x78, 0xd3, 0x6a, 0x93, 0x49, 0x33, 0x20, 0x20, 0x4f, 0x60, 0xb5, 0xcb, 0x1c, - 0x26, 0x2c, 0x31, 0xf4, 0xa8, 0xd5, 0xe7, 0x5d, 0xcc, 0xc5, 0xf3, 0x89, 0x42, 0xca, 0x5c, 0xf1, - 0xcb, 0x27, 0x43, 0x8f, 0xb6, 0x78, 0x17, 0xd5, 0x0e, 0x24, 0xfd, 0x39, 0x22, 0xc3, 0x66, 0x4d, - 0x7f, 0xad, 0xd7, 0xac, 0xfa, 0x71, 0x5d, 0xb7, 0x5a, 0xf5, 0x66, 0x43, 0x3f, 0xa8, 0x1e, 0x55, - 0xf5, 0xc3, 0x6c, 0x8c, 0xac, 0xc3, 0x6a, 0xd0, 0x6b, 0x1e, 0x1b, 0xba, 0x65, 0x34, 0x5f, 0x36, - 0xb3, 0x12, 0x21, 0x90, 0x09, 0x8a, 0x95, 0x5a, 0x2d, 0xa8, 0xc5, 0xc9, 0x06, 0xac, 0x4d, 0x81, - 0xad, 0x86, 0x6e, 0x5a, 0x95, 0x43, 0xa3, 0x5a, 0xcf, 0x26, 0x54, 0x06, 0x1b, 0x06, 0xda, 0x27, - 0x9c, 0x79, 0x7f, 0xa4, 0xf8, 0x00, 0x52, 0xed, 0xe0, 0x83, 0x89, 0xe1, 0x34, 0xc7, 0x79, 0x81, - 0xa8, 0xb0, 0xe2, 0xa0, 0xbd, 0xf0, 0x82, 0xb4, 0x83, 0x76, 0xe8, 0x7f, 0x2f, 0x33, 0xc9, 0x60, - 0x3e, 0xa3, 0x3e, 0x82, 0x87, 0x91, 0x52, 0xb3, 0x00, 0xde, 0xc1, 0xa6, 0x81, 0xb6, 0x49, 0x91, - 0x8a, 0x7f, 0x33, 0x93, 0xf8, 0xbb, 0x99, 0x3c, 0x28, 0xd1, 0x5a, 0xa1, 0x9b, 0xf2, 0xcf, 0x38, - 0x24, 0x0c, 0xb4, 0xc9, 0x07, 0xd8, 0x5a, 0xb6, 0xe9, 0xbb, 0x11, 0x4b, 0xb0, 0x7c, 0xd1, 0xe4, - 0x17, 0x77, 0x82, 0x87, 0x46, 0x88, 0x07, 0x24, 0x22, 0x9f, 0x42, 0x34, 0xd9, 0x22, 0x52, 0x7e, - 0x76, 0x5b, 0xe4, 0x4c, 0x11, 0x61, 0x3d, 0x2a, 0x85, 0xa7, 0xd1, 0x44, 0x11, 0x50, 0xb9, 0x74, - 0x6b, 0x68, 0x28, 0x2a, 0x27, 0x3f, 0x5e, 0x5f, 0x6e, 0x4b, 0xfb, 0x47, 0x5f, 0x47, 0x8a, 0x74, - 0x35, 0x52, 0xa4, 0xef, 0x23, 0x45, 0xfa, 0x3c, 0x56, 0x62, 0x57, 0x63, 0x25, 0xf6, 0x6d, 0xac, - 0xc4, 0xde, 0xec, 0xd8, 0x4c, 0x9c, 0xf5, 0x4f, 0xb5, 0x8e, 0xeb, 0x14, 0xc3, 0x4b, 0xe6, 0xff, - 0xec, 0xe2, 0xdb, 0xf3, 0xe2, 0xc5, 0xec, 0xac, 0x4d, 0xf6, 0x00, 0x4f, 0xff, 0xf3, 0x6f, 0xd5, - 0xf3, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x5e, 0x15, 0xbc, 0xf5, 0x04, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xc1, 0x6e, 0xd3, 0x40, + 0x10, 0xcd, 0x26, 0x0a, 0x28, 0x13, 0x9a, 0xa6, 0x5b, 0xb5, 0x0d, 0x16, 0x98, 0xc8, 0x42, 0x28, + 0x54, 0xad, 0x43, 0x82, 0xb8, 0xf4, 0x96, 0xb6, 0x2e, 0x44, 0x8a, 0xd3, 0xc8, 0x21, 0x1c, 0xb8, + 0x58, 0xa9, 0x59, 0xb9, 0x4b, 0xed, 0xd8, 0xda, 0xdd, 0x44, 0x2d, 0x17, 0x10, 0x5f, 0xc0, 0x97, + 0xa0, 0x7e, 0x06, 0xc7, 0x1e, 0x39, 0xa2, 0xe4, 0xd0, 0x3b, 0xe2, 0x03, 0x90, 0xed, 0x38, 0x29, + 0xd4, 0x11, 0xad, 0x38, 0x59, 0x9e, 0x79, 0xf3, 0xde, 0x5b, 0xbf, 0xf5, 0x80, 0x64, 0x79, 0xdc, + 0xf5, 0x78, 0xd5, 0xa2, 0xcc, 0x1a, 0x52, 0x51, 0x1d, 0xd5, 0xaa, 0xe2, 0x54, 0xf5, 0x99, 0x27, + 0x3c, 0xbc, 0x12, 0xf5, 0xd4, 0x69, 0x4f, 0x1d, 0xd5, 0xa4, 0x8d, 0x29, 0xdc, 0xe5, 0x76, 0x00, + 0x75, 0xb9, 0x1d, 0x61, 0x95, 0xaf, 0x08, 0x24, 0x9d, 0xdb, 0x8d, 0xa1, 0x38, 0xf6, 0x18, 0xfd, + 0x40, 0xf6, 0xa2, 0x99, 0x5d, 0x46, 0xfa, 0x27, 0x84, 0xe1, 0x12, 0xdc, 0xb5, 0x59, 0x7f, 0x20, + 0x08, 0x2b, 0xa1, 0x32, 0xaa, 0xe4, 0x8c, 0xf8, 0x75, 0xde, 0x21, 0xa5, 0xf4, 0xd5, 0x0e, 0xc1, + 0x6d, 0xc8, 0xfb, 0x84, 0xb9, 0x94, 0x73, 0xea, 0x0d, 0x78, 0x29, 0x53, 0x46, 0x95, 0x7c, 0x7d, + 0x4b, 0xbd, 0x66, 0x4a, 0xfd, 0x53, 0xab, 0x33, 0x9f, 0x31, 0xae, 0x12, 0xec, 0xdc, 0xfb, 0x7c, + 0x79, 0xbe, 0x19, 0xeb, 0x2a, 0x8f, 0x41, 0x59, 0xec, 0xd7, 0x20, 0xdc, 0xf7, 0x06, 0x9c, 0x28, + 0x3f, 0x11, 0xdc, 0x5f, 0x48, 0x8f, 0x5f, 0x41, 0xd6, 0x21, 0x23, 0xe2, 0x84, 0x67, 0x2a, 0xd4, + 0xeb, 0xb7, 0xf1, 0xa6, 0xb6, 0x82, 0x49, 0x23, 0x22, 0xc0, 0x4f, 0x60, 0xd9, 0xa1, 0x2e, 0x15, + 0xa6, 0xcb, 0x6d, 0x53, 0x9c, 0xf9, 0x84, 0x97, 0xd2, 0xe5, 0x4c, 0x25, 0x67, 0x2c, 0x85, 0x65, + 0x9d, 0xdb, 0xaf, 0x83, 0xa2, 0x62, 0x41, 0x36, 0x9c, 0xc3, 0x12, 0xac, 0xb7, 0xb4, 0x37, 0x5a, + 0xcb, 0x6c, 0x1f, 0xb6, 0x35, 0xb3, 0xd7, 0xee, 0x76, 0xb4, 0xbd, 0xe6, 0x41, 0x53, 0xdb, 0x2f, + 0xa6, 0xf0, 0x2a, 0x2c, 0x47, 0xbd, 0xee, 0xa1, 0xae, 0x99, 0x7a, 0xf7, 0x65, 0xb7, 0x88, 0x30, + 0x86, 0x42, 0x54, 0x6c, 0xb4, 0x5a, 0x51, 0x2d, 0x8d, 0xd7, 0x60, 0x65, 0x0a, 0xec, 0x75, 0x34, + 0xc3, 0x6c, 0xec, 0xeb, 0xcd, 0x76, 0x31, 0xa3, 0x50, 0x58, 0x0b, 0x04, 0x19, 0xf5, 0xff, 0x4a, + 0xf1, 0x01, 0xe4, 0xfa, 0xd1, 0x07, 0x13, 0x67, 0xd3, 0x1c, 0xe7, 0x05, 0xac, 0xc0, 0x52, 0xec, + 0xde, 0x1c, 0x32, 0x27, 0x3e, 0x41, 0xde, 0x8d, 0xcc, 0xf7, 0x98, 0xc3, 0x77, 0x0a, 0x41, 0x06, + 0xf3, 0x19, 0xe5, 0x11, 0x3c, 0x4c, 0x94, 0x9a, 0x05, 0xf0, 0x1e, 0xd6, 0x75, 0x6e, 0x1b, 0x84, + 0x13, 0xf1, 0x7f, 0x66, 0x32, 0xff, 0x36, 0x53, 0x06, 0x39, 0x59, 0x2b, 0x76, 0x53, 0xff, 0x95, + 0x86, 0x8c, 0xce, 0x6d, 0xfc, 0x11, 0x36, 0x16, 0xdd, 0xf4, 0xed, 0x84, 0x4b, 0xb0, 0xf8, 0xa2, + 0x49, 0x2f, 0x6e, 0x05, 0x8f, 0x8d, 0x60, 0x1f, 0x70, 0x42, 0x3e, 0x95, 0x64, 0xb2, 0xeb, 0x48, + 0xe9, 0xd9, 0x4d, 0x91, 0x33, 0x45, 0x0e, 0xab, 0x49, 0x29, 0x3c, 0x4d, 0x26, 0x4a, 0x80, 0x4a, + 0xb5, 0x1b, 0x43, 0x63, 0x51, 0x29, 0xfb, 0xe9, 0xf2, 0x7c, 0x13, 0xed, 0x1e, 0x7c, 0x1b, 0xcb, + 0xe8, 0x62, 0x2c, 0xa3, 0x1f, 0x63, 0x19, 0x7d, 0x99, 0xc8, 0xa9, 0x8b, 0x89, 0x9c, 0xfa, 0x3e, + 0x91, 0x53, 0x6f, 0xb7, 0x6c, 0x2a, 0x8e, 0x87, 0x47, 0xaa, 0xe5, 0xb9, 0xd5, 0x78, 0x93, 0x85, + 0x8f, 0x6d, 0xfe, 0xee, 0xa4, 0x7a, 0x3a, 0x5b, 0x6b, 0xe1, 0x2f, 0x75, 0x74, 0x27, 0xdc, 0x55, + 0xcf, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x99, 0x58, 0xf0, 0xf5, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -727,11 +727,11 @@ func (m *CircuitBreakerPermissions) MarshalToSizedBuffer(dAtA []byte) (int, erro _ = i var l int _ = l - if len(m.LimitTypeUrls) > 0 { - for iNdEx := len(m.LimitTypeUrls) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.LimitTypeUrls[iNdEx]) - copy(dAtA[i:], m.LimitTypeUrls[iNdEx]) - i = encodeVarintTx(dAtA, i, uint64(len(m.LimitTypeUrls[iNdEx]))) + if len(m.LimitMsgTypes) > 0 { + for iNdEx := len(m.LimitMsgTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.LimitMsgTypes[iNdEx]) + copy(dAtA[i:], m.LimitMsgTypes[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.LimitMsgTypes[iNdEx]))) i-- dAtA[i] = 0x12 } @@ -918,8 +918,8 @@ func (m *CircuitBreakerPermissions) Size() (n int) { if m.Level != 0 { n += 1 + sovTx(uint64(m.Level)) } - if len(m.LimitTypeUrls) > 0 { - for _, s := range m.LimitTypeUrls { + if len(m.LimitMsgTypes) > 0 { + for _, s := range m.LimitMsgTypes { l = len(s) n += 1 + l + sovTx(uint64(l)) } @@ -1239,7 +1239,7 @@ func (m *CircuitBreakerPermissions) Unmarshal(dAtA []byte) error { } case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LimitTypeUrls", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LimitMsgTypes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1267,7 +1267,7 @@ func (m *CircuitBreakerPermissions) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.LimitTypeUrls = append(m.LimitTypeUrls, string(dAtA[iNdEx:postIndex])) + m.LimitMsgTypes = append(m.LimitMsgTypes, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex From 9d7a832a388fe7f9d029ef0fd768479d0437542a Mon Sep 17 00:00:00 2001 From: cipherZ Date: Thu, 12 Jan 2023 16:05:44 -0500 Subject: [PATCH 5/6] docs: added fixes to the node interaction docs (#14602) --- docs/docs/run-node/02-interact-node.md | 110 +++++++++++++++++-------- 1 file changed, 76 insertions(+), 34 deletions(-) diff --git a/docs/docs/run-node/02-interact-node.md b/docs/docs/run-node/02-interact-node.md index 480daa359db1..f531148351c2 100644 --- a/docs/docs/run-node/02-interact-node.md +++ b/docs/docs/run-node/02-interact-node.md @@ -22,7 +22,7 @@ There are multiple ways to interact with a node: using the CLI, using gRPC or us Now that your chain is running, it is time to try sending tokens from the first account you created to a second account. In a new terminal window, start by running the following query command: ```bash -simd query bank balances $MY_VALIDATOR_ADDRESS --chain-id my-test-chain +simd query bank balances $MY_VALIDATOR_ADDRESS ``` You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account: @@ -40,7 +40,7 @@ The command above creates a local key-pair that is not yet registered on the cha simd tx bank send $MY_VALIDATOR_ADDRESS $RECIPIENT 1000000stake --chain-id my-test-chain --keyring-backend test # Check that the recipient account did receive the tokens. -simd query bank balances $RECIPIENT --chain-id my-test-chain +simd query bank balances $RECIPIENT ``` Finally, delegate some of the stake tokens sent to the `recipient` account to the validator: @@ -49,7 +49,7 @@ Finally, delegate some of the stake tokens sent to the `recipient` account to th simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain --keyring-backend test # Query the total delegations to `validator`. -simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) --chain-id my-test-chain +simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) ``` You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account. @@ -79,7 +79,7 @@ You should see a list of gRPC services, like `cosmos.bank.v1beta1.Query`. This i In order to get a description of the service you can run the following command: ```bash -grpcurl \ +grpcurl -plaintext \ localhost:9090 \ describe cosmos.bank.v1beta1.Query # Service we want to inspect ``` @@ -88,8 +88,8 @@ It's also possible to execute an RPC call to query the node for information: ```bash grpcurl \ - -plaintext - -d '{"address":"$MY_VALIDATOR"}' \ + -plaintext \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ localhost:9090 \ cosmos.bank.v1beta1.Query/AllBalances ``` @@ -103,8 +103,8 @@ You may also query for historical data by passing some [gRPC metadata](https://g ```bash grpcurl \ -plaintext \ - -H "x-cosmos-block-height: 279256" \ - -d '{"address":"$MY_VALIDATOR"}' \ + -H "x-cosmos-block-height: 123" \ + -d "{\"address\":\"$MY_VALIDATOR_ADDRESS\"}" \ localhost:9090 \ cosmos.bank.v1beta1.Query/AllBalances ``` @@ -123,6 +123,8 @@ go get github.com/cosmos/cosmos-sdk@main ``` ```go +package main + import ( "context" "fmt" @@ -135,7 +137,7 @@ import ( ) func queryState() error { - myAddress, err := sdk.AccAddressFromBech32("cosmos1...") + myAddress, err := sdk.AccAddressFromBech32("cosmos1...") // the my_validator or recipient address. if err != nil { return err } @@ -157,7 +159,7 @@ func queryState() error { bankClient := banktypes.NewQueryClient(grpcConn) bankRes, err := bankClient.Balance( context.Background(), - &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "atom"}, + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, ) if err != nil { return err @@ -167,6 +169,12 @@ func queryState() error { return nil } + +func main() { + if err := queryState(); err != nil { + panic(err) + } +} ``` You can replace the query client (here we are using `x/bank`'s) with one generated from any other Protobuf service. The list of all available gRPC query endpoints is [coming soon](https://github.com/cosmos/cosmos-sdk/issues/7786). @@ -176,36 +184,63 @@ You can replace the query client (here we are using `x/bank`'s) with one generat Querying for historical blocks is done by adding the block height metadata in the gRPC request. ```go +package main + import ( - "context" - "fmt" + "context" + "fmt" - "google.golang.org/grpc" - "google.golang.org/grpc/metadata" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" ) func queryState() error { - // --snip-- + myAddress, err := sdk.AccAddressFromBech32("cosmos1yerherx4d43gj5wa3zl5vflj9d4pln42n7kuzu") // the my_validator or recipient address. + if err != nil { + return err + } + + // Create a connection to the gRPC server. + grpcConn, err := grpc.Dial( + "127.0.0.1:9090", // your gRPC server address. + grpc.WithInsecure(), // The Cosmos SDK doesn't support any transport security mechanism. + // This instantiates a general gRPC codec which handles proto bytes. We pass in a nil interface registry + // if the request/response types contain interface instead of 'nil' you should pass the application specific codec. + grpc.WithDefaultCallOptions(grpc.ForceCodec(codec.NewProtoCodec(nil).GRPCCodec())), + ) + if err != nil { + return err + } + defer grpcConn.Close() + + // This creates a gRPC client to query the x/bank service. + bankClient := banktypes.NewQueryClient(grpcConn) + + var header metadata.MD + _, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request + &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "stake"}, + grpc.Header(&header), // Retrieve header from response + ) + if err != nil { + return err + } + blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader) - var header metadata.MD - bankRes, err = bankClient.Balance( - metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // Add metadata to request - &banktypes.QueryBalanceRequest{Address: myAddress.String(), Denom: "atom"}, - grpc.Header(&header), // Retrieve header from response - ) - if err != nil { - return err - } - blockHeight := header.Get(grpctypes.GRPCBlockHeightHeader) + fmt.Println(blockHeight) // Prints the block height (12) - fmt.Println(blockHeight) // Prints the block height (12) + return nil +} - return nil +func main() { + if err := queryState(); err != nil { + panic(err) + } } ``` @@ -217,13 +252,20 @@ CosmJS documentation can be found at [https://cosmos.github.io/cosmjs](https://c As described in the [gRPC guide](../core/06-grpc_rest.md), all gRPC services on the Cosmos SDK are made available for more convenient REST-based queries through gRPC-gateway. The format of the URL path is based on the Protobuf service method's full-qualified name, but may contain small customizations so that final URLs look more idiomatic. For example, the REST endpoint for the `cosmos.bank.v1beta1.Query/AllBalances` method is `GET /cosmos/bank/v1beta1/balances/{address}`. Request arguments are passed as query parameters. +Note that the REST endpoints are not enabled by default. To enable them, edit the `api` section of your `~/.simapp/config/app.toml` file: + +```toml +# Enable defines if the API server should be enabled. +enable = true +``` + As a concrete example, the `curl` command to make balances request is: ```bash curl \ -X GET \ -H "Content-Type: application/json" \ - http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS ``` Make sure to replace `localhost:1317` with the REST endpoint of your node, configured under the `api.address` field. @@ -238,8 +280,8 @@ Querying for historical state is done using the HTTP header `x-cosmos-block-heig curl \ -X GET \ -H "Content-Type: application/json" \ - -H "x-cosmos-block-height: 279256" - http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR + -H "x-cosmos-block-height: 123" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR_ADDRESS ``` Assuming the state at that block has not yet been pruned by the node, this query should return a non-empty response. From 1a58bd0704651e0e3a8e7a8957255044be7fb3c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jan 2023 21:26:23 +0000 Subject: [PATCH 6/6] build(deps): Bump cosmossdk.io/core from 0.4.0 to 0.4.1 (#14599) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Julien Robert --- client/v2/go.mod | 2 +- client/v2/go.sum | 4 ++-- collections/go.mod | 2 +- collections/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- simapp/go.mod | 2 +- simapp/go.sum | 4 ++-- tests/go.mod | 2 +- tests/go.sum | 4 ++-- tools/confix/go.mod | 2 +- tools/confix/go.sum | 4 ++-- tools/cosmovisor/go.mod | 2 +- tools/cosmovisor/go.sum | 4 ++-- tools/rosetta/go.mod | 2 +- tools/rosetta/go.sum | 4 ++-- tx/go.mod | 2 +- tx/go.sum | 4 ++-- x/nft/go.mod | 2 +- x/nft/go.sum | 4 ++-- 20 files changed, 30 insertions(+), 30 deletions(-) diff --git a/client/v2/go.mod b/client/v2/go.mod index 1da22350dd26..e72fd07adfd9 100644 --- a/client/v2/go.mod +++ b/client/v2/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( cosmossdk.io/api v0.2.6 - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 cosmossdk.io/depinject v1.0.0-alpha.3 github.com/cosmos/cosmos-proto v1.0.0-beta.1 github.com/cosmos/cosmos-sdk v0.47.0-rc1 diff --git a/client/v2/go.sum b/client/v2/go.sum index 86873361586f..e36fc5d913a9 100644 --- a/client/v2/go.sum +++ b/client/v2/go.sum @@ -37,8 +37,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/collections/go.mod b/collections/go.mod index b614087aad31..6d3e2fb60406 100644 --- a/collections/go.mod +++ b/collections/go.mod @@ -3,7 +3,7 @@ module cosmossdk.io/collections go 1.19 require ( - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 github.com/hashicorp/go-multierror v1.1.1 // TODO: remove with go 1.20 release github.com/stretchr/testify v1.8.1 diff --git a/collections/go.sum b/collections/go.sum index a4f56336539e..432eefd96a3e 100644 --- a/collections/go.sum +++ b/collections/go.sum @@ -1,6 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= diff --git a/go.mod b/go.mod index 7ce8c303d3df..91e04a1fbed0 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ module github.com/cosmos/cosmos-sdk require ( cosmossdk.io/api v0.2.6 cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.4 diff --git a/go.sum b/go.sum index 61c125f7e433..e0309e41a8b2 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,8 @@ cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 h1:dszme7EMNp/qxjgZKjhY4lm5SN+g1Tz95UlX/qZUK64= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476/go.mod h1:q4avveOJ2Cbgab/Hm/yXDHFPM7NW9InEVysd8TzNPCE= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/simapp/go.mod b/simapp/go.mod index 51a4cb3544ae..8f3bb8198807 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -5,7 +5,7 @@ go 1.19 require ( cosmossdk.io/api v0.2.6 cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58 - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/math v1.0.0-beta.4 cosmossdk.io/tools/confix v0.0.0-00010101000000-000000000000 diff --git a/simapp/go.sum b/simapp/go.sum index f7280beb4af3..59e8d73ce2d5 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -52,8 +52,8 @@ cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58 h1:q0AkHBZnYhsnnS3AmTU cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58/go.mod h1:ztqtfnFSD3edvhNOAShzKod13nfKLM1sZj0uu0fo56w= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 h1:dszme7EMNp/qxjgZKjhY4lm5SN+g1Tz95UlX/qZUK64= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476/go.mod h1:q4avveOJ2Cbgab/Hm/yXDHFPM7NW9InEVysd8TzNPCE= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/tests/go.mod b/tests/go.mod index afbe103cd967..02cc41cde341 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -30,7 +30,7 @@ require ( cloud.google.com/go/storage v1.27.0 // indirect cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58 // indirect cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 // indirect - cosmossdk.io/core v0.4.0 // indirect + cosmossdk.io/core v0.4.1 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect filippo.io/edwards25519 v1.0.0-rc.1 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect diff --git a/tests/go.sum b/tests/go.sum index d988d8458e89..7513a33deb46 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -52,8 +52,8 @@ cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58 h1:q0AkHBZnYhsnnS3AmTU cosmossdk.io/client/v2 v2.0.0-20230104083136-11f46a0bae58/go.mod h1:ztqtfnFSD3edvhNOAShzKod13nfKLM1sZj0uu0fo56w= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 h1:dszme7EMNp/qxjgZKjhY4lm5SN+g1Tz95UlX/qZUK64= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476/go.mod h1:q4avveOJ2Cbgab/Hm/yXDHFPM7NW9InEVysd8TzNPCE= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/tools/confix/go.mod b/tools/confix/go.mod index 00ba17c74833..affee7f9f06e 100644 --- a/tools/confix/go.mod +++ b/tools/confix/go.mod @@ -14,7 +14,7 @@ require ( require ( cosmossdk.io/api v0.2.6 // indirect - cosmossdk.io/core v0.3.2 // indirect + cosmossdk.io/core v0.4.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect cosmossdk.io/math v1.0.0-beta.4 // indirect diff --git a/tools/confix/go.sum b/tools/confix/go.sum index 191eb814e33c..b8d4d3e125e1 100644 --- a/tools/confix/go.sum +++ b/tools/confix/go.sum @@ -37,8 +37,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.3.2 h1:KlQIufpJHJvOs7YLGTZsZcCo1WlkencDXepsr8STKZQ= -cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/tools/cosmovisor/go.mod b/tools/cosmovisor/go.mod index ca45ab07186d..2745536fc595 100644 --- a/tools/cosmovisor/go.mod +++ b/tools/cosmovisor/go.mod @@ -18,7 +18,7 @@ require ( cloud.google.com/go/iam v0.8.0 // indirect cloud.google.com/go/storage v1.27.0 // indirect cosmossdk.io/api v0.2.6 // indirect - cosmossdk.io/core v0.3.2 // indirect + cosmossdk.io/core v0.4.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect cosmossdk.io/math v1.0.0-beta.4 // indirect diff --git a/tools/cosmovisor/go.sum b/tools/cosmovisor/go.sum index 353272e9f017..b8235e1e6bde 100644 --- a/tools/cosmovisor/go.sum +++ b/tools/cosmovisor/go.sum @@ -48,8 +48,8 @@ cloud.google.com/go/storage v1.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgy cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.3.2 h1:KlQIufpJHJvOs7YLGTZsZcCo1WlkencDXepsr8STKZQ= -cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/tools/rosetta/go.mod b/tools/rosetta/go.mod index 8e07880da2ac..38359a4d48dc 100644 --- a/tools/rosetta/go.mod +++ b/tools/rosetta/go.mod @@ -18,7 +18,7 @@ require ( require ( cosmossdk.io/api v0.2.6 // indirect - cosmossdk.io/core v0.3.2 // indirect + cosmossdk.io/core v0.4.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect filippo.io/edwards25519 v1.0.0-rc.1 // indirect diff --git a/tools/rosetta/go.sum b/tools/rosetta/go.sum index 47f623c89400..bca43f72f84a 100644 --- a/tools/rosetta/go.sum +++ b/tools/rosetta/go.sum @@ -37,8 +37,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.3.2 h1:KlQIufpJHJvOs7YLGTZsZcCo1WlkencDXepsr8STKZQ= -cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= diff --git a/tx/go.mod b/tx/go.mod index 1dc26ef6448b..ed02f3d8ff50 100644 --- a/tx/go.mod +++ b/tx/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( cosmossdk.io/api v0.2.6 - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 cosmossdk.io/math v1.0.0-beta.4 github.com/cosmos/cosmos-proto v1.0.0-beta.1 github.com/google/go-cmp v0.5.9 diff --git a/tx/go.sum b/tx/go.sum index f88f3d1dc22d..c00744fa1a50 100644 --- a/tx/go.sum +++ b/tx/go.sum @@ -1,7 +1,7 @@ cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= diff --git a/x/nft/go.mod b/x/nft/go.mod index dc5b1516a974..3e31a0e3c9e8 100644 --- a/x/nft/go.mod +++ b/x/nft/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( cosmossdk.io/api v0.2.6 - cosmossdk.io/core v0.4.0 + cosmossdk.io/core v0.4.1 cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-beta.4 diff --git a/x/nft/go.sum b/x/nft/go.sum index b0c16b44b3bc..252f49b42763 100644 --- a/x/nft/go.sum +++ b/x/nft/go.sum @@ -39,8 +39,8 @@ cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476 h1:dszme7EMNp/qxjgZKjhY4lm5SN+g1Tz95UlX/qZUK64= cosmossdk.io/collections v0.0.0-20230106101515-aeac21494476/go.mod h1:q4avveOJ2Cbgab/Hm/yXDHFPM7NW9InEVysd8TzNPCE= -cosmossdk.io/core v0.4.0 h1:QPYg2v21OGr7yjJC5HEWiuhfFJxzdqbDDv1PZzH7cas= -cosmossdk.io/core v0.4.0/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= +cosmossdk.io/core v0.4.1 h1:5icpjPmw8J4uFp6w8OoLJPxsw6X3kRi9nAtTr3qp2Ok= +cosmossdk.io/core v0.4.1/go.mod h1:Zqd1GB+krTF3bzhTnPNwzy3NTtXu+MKLX/9sPQXTIDE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w=