From c2c229d5f249fe1d3d1e5b62ec1d8fcb4367364d Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Thu, 10 Jun 2021 19:35:04 +0200 Subject: [PATCH 01/14] Added app links Proto files See PR #473 --- Makefile | 6 + .../profiles/v1beta1/models_app_links.proto | 146 ++++++++++++ .../profiles/v1beta1/models_profile.proto | 7 + .../desmos/profiles/v1beta1/msg_server.proto | 10 + .../profiles/v1beta1/msgs_app_links.proto | 74 ++++++ proto/desmos/profiles/v1beta1/query.proto | 11 +- .../profiles/v1beta1/query_app_links.proto | 25 +++ .../proto/ibc/core/client/v1/client.proto | 74 ++++++ third_party/proto/tendermint/abci/types.proto | 210 +++++++++--------- .../proto/tendermint/crypto/keys.proto | 4 +- .../proto/tendermint/crypto/proof.proto | 12 +- .../proto/tendermint/libs/bits/types.proto | 2 +- .../proto/tendermint/types/evidence.proto | 4 +- .../proto/tendermint/types/params.proto | 14 +- .../proto/tendermint/types/types.proto | 80 +++---- .../proto/tendermint/types/validator.proto | 12 +- .../proto/tendermint/version/types.proto | 2 +- 17 files changed, 522 insertions(+), 171 deletions(-) create mode 100644 proto/desmos/profiles/v1beta1/models_app_links.proto create mode 100644 proto/desmos/profiles/v1beta1/msgs_app_links.proto create mode 100644 proto/desmos/profiles/v1beta1/query_app_links.proto create mode 100644 third_party/proto/ibc/core/client/v1/client.proto diff --git a/Makefile b/Makefile index 571acff3dc..bf7f7c877b 100644 --- a/Makefile +++ b/Makefile @@ -313,17 +313,20 @@ GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosm COSMOS_URL = https://raw.githubusercontent.com/cosmos/cosmos-sdk/v0.42.4/proto/cosmos COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/v0.6.3 +IBC_URL = https://raw.githubusercontent.com/cosmos/cosmos-sdk/v0.42.4/proto/ibc TM_CRYPTO_TYPES = third_party/proto/tendermint/crypto TM_ABCI_TYPES = third_party/proto/tendermint/abci TM_TYPES = third_party/proto/tendermint/types TM_VERSION = third_party/proto/tendermint/version TM_LIBS = third_party/proto/tendermint/libs/bits +IBC_TYPES = third_party/proto/ibc GOGO_PROTO_TYPES = third_party/proto/gogoproto COSMOS_TYPES = third_party/proto/cosmos COSMOS_PROTO_TYPES = third_party/proto/cosmos_proto CONFIO_TYPES = third_party/proto/confio +IBC_TYPES = third_party/proto/ibc proto-update-deps: @mkdir -p $(COSMOS_TYPES)/base/query/v1beta1 @@ -335,6 +338,9 @@ proto-update-deps: @mkdir -p $(COSMOS_PROTO_TYPES) @curl -sSL $(COSMOS_PROTO_URL)/cosmos.proto > $(COSMOS_PROTO_TYPES)/cosmos.proto + @mkdir -p $(IBC_TYPES)/core/client/v1 + @curl -sSL $(IBC_URL)/core/client/v1/client.proto > $(IBC_TYPES)/core/client/v1/client.proto + ## Importing of tendermint protobuf definitions currently requires the ## use of `sed` in order to build properly with cosmos-sdk's proto file layout ## (which is the standard Buf.build FILE_LAYOUT) diff --git a/proto/desmos/profiles/v1beta1/models_app_links.proto b/proto/desmos/profiles/v1beta1/models_app_links.proto new file mode 100644 index 0000000000..bf615d6922 --- /dev/null +++ b/proto/desmos/profiles/v1beta1/models_app_links.proto @@ -0,0 +1,146 @@ +syntax = "proto3"; +package desmos.profiles.v1beta1; + +option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; + +// ApplicationLink contains the data of a link to a centralized application +message ApplicationLink { + option (gogoproto.equal) = true; + + // Data contains the details of this specific link + Data data = 1 + [ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"data\"" ]; + + // State of the link + ApplicationLinkState state = 2 + [ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"state\"" ]; + + // OracleRequest represents the request that has been made to the oracle + OracleRequest oracle_request = 3 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"oracle_request\"" + ]; + + // Data coming from the result of the verification. + // Only available when the state is STATE_SUCCESS + Result result = 4 [ (gogoproto.moretags) = "yaml:\"result\"" ]; + + // CreationTime represents the time in which the link was created + google.protobuf.Timestamp creation_time = 5 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"creation_time\"" + ]; +} + +// Data contains the data associated to a specific user of a +// generic centralized application +message Data { + option (gogoproto.equal) = true; + + // The application name (eg. Twitter, GitHub, etc) + string application = 1 [ (gogoproto.moretags) = "yaml:\"application\"" ]; + // Username on the application (eg. Twitter tag, GitHub profile, etc) + string username = 2 [ (gogoproto.moretags) = "yaml:\"username\"" ]; +} + +// OracleRequest represents a generic oracle request used to +// verify the ownership of a centralized application account +message OracleRequest { + option (gogoproto.equal) = true; + + // ID is the ID of the request + int64 id = 1 + [ (gogoproto.customname) = "ID", (gogoproto.moretags) = "yaml:\"id\"" ]; + + // OracleScriptID is ID of an oracle script + int64 oracle_script_id = 2 [ + (gogoproto.customname) = "OracleScriptID", + (gogoproto.moretags) = "yaml:\"oracle_script_id\"" + ]; + + // CallData contains the data used to perform the oracle request + CallData call_data = 3 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"call_data\"" + ]; + + // ClientID represents the ID of the client that has called the oracle script + string client_id = 4 [ + (gogoproto.customname) = "ClientID", + (gogoproto.moretags) = "yaml:\"client_id\"" + ]; + + // CallData contains the data sent to a single oracle request in order to + // verify the ownership of a centralized application by a Desmos profile + message CallData { + option (gogoproto.equal) = true; + + // The application for which the ownership should be verified + string application = 1 [ (gogoproto.moretags) = "yaml:\"application\"" ]; + + // The hex encoded call data that should be used to verify the application + // account ownership + string call_data = 2 [ (gogoproto.moretags) = "yaml:\"call_data\"" ]; + } +} + +// ApplicationLinkState defines if an application link is in the following +// states: STARTED, ERRORED, SUCCESSFUL, TIMED_OUT +enum ApplicationLinkState { + option (gogoproto.goproto_enum_prefix) = false; + + // A link has just been initialized + APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED = 0 + [ (gogoproto.enumvalue_customname) = "ApplicationLinkStateInitialized" ]; + // A link has just started being verified + APPLICATION_LINK_STATE_VERIFICATION_STARTED = 1 + [ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationStarted" ]; + // A link has errored during the verification process + APPLICATION_LINK_STATE_VERIFICATION_ERROR = 2 + [ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationError" ]; + // A link has being verified successfully + APPLICATION_LINK_STATE_VERIFICATION_SUCCESS = 3 + [ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationSuccess" ]; + // A link has timed out while waiting for the verification + APPLICATION_LINK_STATE_TIMED_OUT = 4 + [ (gogoproto.enumvalue_customname) = "AppLinkStateVerificationTimedOut" ]; +} + +// Result represents a verification result +message Result { + option (gogoproto.equal) = true; + + // sum is the oneof that specifies whether this represents a success or + // failure result + oneof sum { + // Success represents a successful verification + Success success = 1; + + // Failed represents a failed verification + Failed failed = 2; + } + + // Success is the result of an application link that has been successfully + // verified + message Success { + option (gogoproto.equal) = true; + + // Value that has be signed by the profile + string value = 1 [ (gogoproto.moretags) = "yaml:\"value\"" ]; + // Signature that has been produced by signing the value + string signature = 2 [ (gogoproto.moretags) = "yaml:\"signature\"" ]; + } + + // Failed is the result of an application link that has not been verified + // successfully + message Failed { + option (gogoproto.equal) = true; + + // Error that is associated with the failure + string error = 1 [ (gogoproto.moretags) = "yaml:\"error\"" ]; + } +} diff --git a/proto/desmos/profiles/v1beta1/models_profile.proto b/proto/desmos/profiles/v1beta1/models_profile.proto index 3e392cee58..7399a682e7 100644 --- a/proto/desmos/profiles/v1beta1/models_profile.proto +++ b/proto/desmos/profiles/v1beta1/models_profile.proto @@ -6,6 +6,7 @@ import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; import "desmos/profiles/v1beta1/models_chain_links.proto"; +import "desmos/profiles/v1beta1/models_app_links.proto"; option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; @@ -52,6 +53,12 @@ message Profile { (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"chains_links\"" ]; + + // AppLinks represents the slice of all the centralized application links + repeated desmos.profiles.v1beta1.ApplicationLink app_links = 8 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"app_links\"" + ]; } // Pictures contains the data of a user profile's related pictures diff --git a/proto/desmos/profiles/v1beta1/msg_server.proto b/proto/desmos/profiles/v1beta1/msg_server.proto index 42a7b6329a..0d7d275434 100644 --- a/proto/desmos/profiles/v1beta1/msg_server.proto +++ b/proto/desmos/profiles/v1beta1/msg_server.proto @@ -11,6 +11,7 @@ import "desmos/profiles/v1beta1/msgs_profile.proto"; import "desmos/profiles/v1beta1/msgs_relationships.proto"; import "desmos/profiles/v1beta1/msgs_dtag_requests.proto"; import "desmos/profiles/v1beta1/msgs_chain_links.proto"; +import "desmos/profiles/v1beta1/msgs_app_links.proto"; option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; @@ -64,4 +65,13 @@ service Msg { // from a profile rpc UnlinkChainAccount(MsgUnlinkChainAccount) returns (UnlinkChainAccountResponse); + + // CreateApplicationLink defines a method to create a centralized application + // link + rpc CreateApplicationLink(MsgCreateApplicationLink) + returns (MsgCreateApplicationLinkResponse); + + // UnlinkApplication defines a method to remove a centralized application + rpc UnlinkApplication(MsgUnlinkApplication) + returns (MsgUnlinkApplicationResponse); } \ No newline at end of file diff --git a/proto/desmos/profiles/v1beta1/msgs_app_links.proto b/proto/desmos/profiles/v1beta1/msgs_app_links.proto new file mode 100644 index 0000000000..bf52ea2c16 --- /dev/null +++ b/proto/desmos/profiles/v1beta1/msgs_app_links.proto @@ -0,0 +1,74 @@ +syntax = "proto3"; +package desmos.profiles.v1beta1; + +option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; + +import "desmos/profiles/v1beta1/models_app_links.proto"; + +import "gogoproto/gogo.proto"; +import "ibc/core/client/v1/client.proto"; + +// MsgCreateApplicationLink defines a msg to connect a profile with a +// centralized application account (eg. Twitter, GitHub, etc). +message MsgCreateApplicationLink { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // The sender of the connection request + string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ]; + + // LinkData contains the data related to the application to which connect + Data link_data = 2 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"link_data\"" + ]; + + // CallData contains the data used to verify the link + OracleRequest.CallData call_data = 3 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"call_data\"" + ]; + + // The port on which the packet will be sent + string source_port = 4 [ (gogoproto.moretags) = "yaml:\"source_port\"" ]; + // The channel by which the packet will be sent + string source_channel = 5 + [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + ibc.core.client.v1.Height timeout_height = 6 [ + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"timeout_height\"" + ]; + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + uint64 timeout_timestamp = 7 + [ (gogoproto.moretags) = "yaml:\"timeout_timestamp\"" ]; +} + +// MsgCreateApplicationLinkResponse defines the Msg/CreateApplicationLink +// response type. +message MsgCreateApplicationLinkResponse {} + +// ------------------------------------------------------------------------------------------------------------------- + +// MsgUnlinkApplication defines a msg to delete an application link from a user +// profile +message MsgUnlinkApplication { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // Application represents the name of the application to unlink + string application = 1 [ (gogoproto.moretags) = "yaml:\"application\"" ]; + + // Username represents the username inside the application to unlink + string username = 2 [ (gogoproto.moretags) = "yaml:\"username\"" ]; + + // Signer represents the Desmos account to which the application should be + // unlinked + string signer = 3 [ (gogoproto.moretags) = "yaml:\"signer\"" ]; +} + +// MsgUnlinkApplicationResponse defines the Msg/UnlinkApplication response +// type. +message MsgUnlinkApplicationResponse {} \ No newline at end of file diff --git a/proto/desmos/profiles/v1beta1/query.proto b/proto/desmos/profiles/v1beta1/query.proto index f25ee5863f..b18f459c0e 100644 --- a/proto/desmos/profiles/v1beta1/query.proto +++ b/proto/desmos/profiles/v1beta1/query.proto @@ -9,6 +9,7 @@ import "desmos/profiles/v1beta1/query_relationships.proto"; import "desmos/profiles/v1beta1/query_dtag_requests.proto"; import "desmos/profiles/v1beta1/query_params.proto"; import "desmos/profiles/v1beta1/query_chain_links.proto"; +import "desmos/profiles/v1beta1/query_app_links.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; @@ -56,4 +57,12 @@ service Query { option (google.api.http).get = "/desmos/profiles/v1beta1/chain-links/{chain_name}/{target_address}"; } -} \ No newline at end of file + + // ProfileByAppLink queries the profile linked with the given application and + // having the given username + rpc ProfileByAppLink(QueryProfileByAppLinkRequest) + returns (QueryProfileByAppLinkResponse) { + option (google.api.http).get = + "/desmos/profiles/v1beta1/app-links/{application}/{username}"; + } +} diff --git a/proto/desmos/profiles/v1beta1/query_app_links.proto b/proto/desmos/profiles/v1beta1/query_app_links.proto new file mode 100644 index 0000000000..e421465082 --- /dev/null +++ b/proto/desmos/profiles/v1beta1/query_app_links.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package desmos.profiles.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/any.proto"; +import "desmos/profiles/v1beta1/models_params.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; + +option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; + +// QueryProfileByAppLinkRequest represent the parameters used to query for a +// specific profile given an application name and a username +message QueryProfileByAppLinkRequest { + string application = 1; + string username = 2; +} + +// QueryProfileByAppLinkResponse represents the response to the query used to +// get a profile by a given application name and username +message QueryProfileByAppLinkResponse { + google.protobuf.Any profile = 1 + [ (cosmos_proto.accepts_interface) = "AccountI" ]; +} diff --git a/third_party/proto/ibc/core/client/v1/client.proto b/third_party/proto/ibc/core/client/v1/client.proto new file mode 100644 index 0000000000..11d2195aaf --- /dev/null +++ b/third_party/proto/ibc/core/client/v1/client.proto @@ -0,0 +1,74 @@ +syntax = "proto3"; +package ibc.core.client.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +// IdentifiedClientState defines a client state with an additional client +// identifier field. +message IdentifiedClientState { + // client identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // client state + google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""]; +} + +// ConsensusStateWithHeight defines a consensus state with an additional height field. +message ConsensusStateWithHeight { + // consensus state height + Height height = 1 [(gogoproto.nullable) = false]; + // consensus state + google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml\"consensus_state\""]; +} + +// ClientConsensusStates defines all the stored consensus states for a given +// client. +message ClientConsensusStates { + // client identifier + string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // consensus states and their heights associated with the client + repeated ConsensusStateWithHeight consensus_states = 2 + [(gogoproto.moretags) = "yaml:\"consensus_states\"", (gogoproto.nullable) = false]; +} + +// ClientUpdateProposal is a governance proposal. If it passes, the client is +// updated with the provided header. The update may fail if the header is not +// valid given certain conditions specified by the client implementation. +message ClientUpdateProposal { + option (gogoproto.goproto_getters) = false; + // the title of the update proposal + string title = 1; + // the description of the proposal + string description = 2; + // the client identifier for the client to be updated if the proposal passes + string client_id = 3 [(gogoproto.moretags) = "yaml:\"client_id\""]; + // the header used to update the client if the proposal passes + google.protobuf.Any header = 4; +} + +// Height is a monotonically increasing data type +// that can be compared against another Height for the purposes of updating and +// freezing clients +// +// Normally the RevisionHeight is incremented at each height while keeping RevisionNumber +// the same. However some consensus algorithms may choose to reset the +// height in certain conditions e.g. hard forks, state-machine breaking changes +// In these cases, the RevisionNumber is incremented so that height continues to +// be monitonically increasing even as the RevisionHeight gets reset +message Height { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + // the revision that the client is currently on + uint64 revision_number = 1 [(gogoproto.moretags) = "yaml:\"revision_number\""]; + // the height within the given revision + uint64 revision_height = 2 [(gogoproto.moretags) = "yaml:\"revision_height\""]; +} + +// Params defines the set of IBC light client parameters. +message Params { + // allowed_clients defines the list of allowed client state types. + repeated string allowed_clients = 1 [(gogoproto.moretags) = "yaml:\"allowed_clients\""]; +} diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto index 53a2446111..8e3a909363 100644 --- a/third_party/proto/tendermint/abci/types.proto +++ b/third_party/proto/tendermint/abci/types.proto @@ -21,20 +21,20 @@ import "gogoproto/gogo.proto"; message Request { oneof value { - RequestEcho echo = 1; - RequestFlush flush = 2; - RequestInfo info = 3; - RequestSetOption set_option = 4; - RequestInitChain init_chain = 5; - RequestQuery query = 6; - RequestBeginBlock begin_block = 7; - RequestCheckTx check_tx = 8; - RequestDeliverTx deliver_tx = 9; - RequestEndBlock end_block = 10; - RequestCommit commit = 11; - RequestListSnapshots list_snapshots = 12; - RequestOfferSnapshot offer_snapshot = 13; - RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestSetOption set_option = 4; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestBeginBlock begin_block = 7; + RequestCheckTx check_tx = 8; + RequestDeliverTx deliver_tx = 9; + RequestEndBlock end_block = 10; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; RequestApplySnapshotChunk apply_snapshot_chunk = 15; } } @@ -46,48 +46,48 @@ message RequestEcho { message RequestFlush {} message RequestInfo { - string version = 1; + string version = 1; uint64 block_version = 2; - uint64 p2p_version = 3; + uint64 p2p_version = 3; } // nondeterministic message RequestSetOption { - string key = 1; + string key = 1; string value = 2; } message RequestInitChain { google.protobuf.Timestamp time = 1 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; - int64 initial_height = 6; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; } message RequestQuery { - bytes data = 1; - string path = 2; + bytes data = 1; + string path = 2; int64 height = 3; - bool prove = 4; + bool prove = 4; } message RequestBeginBlock { - bytes hash = 1; - tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; - LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; + bytes hash = 1; + tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; + LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; } enum CheckTxType { - NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; } message RequestCheckTx { - bytes tx = 1; + bytes tx = 1; CheckTxType type = 2; } @@ -115,13 +115,13 @@ message RequestOfferSnapshot { message RequestLoadSnapshotChunk { uint64 height = 1; uint32 format = 2; - uint32 chunk = 3; + uint32 chunk = 3; } // Applies a snapshot chunk message RequestApplySnapshotChunk { - uint32 index = 1; - bytes chunk = 2; + uint32 index = 1; + bytes chunk = 2; string sender = 3; } @@ -130,21 +130,21 @@ message RequestApplySnapshotChunk { message Response { oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - ResponseListSnapshots list_snapshots = 13; - ResponseOfferSnapshot offer_snapshot = 14; - ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseSetOption set_option = 5; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseBeginBlock begin_block = 8; + ResponseCheckTx check_tx = 9; + ResponseDeliverTx deliver_tx = 10; + ResponseEndBlock end_block = 11; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; ResponseApplySnapshotChunk apply_snapshot_chunk = 16; } } @@ -163,10 +163,10 @@ message ResponseFlush {} message ResponseInfo { string data = 1; - string version = 2; + string version = 2; uint64 app_version = 3; - int64 last_block_height = 4; + int64 last_block_height = 4; bytes last_block_app_hash = 5; } @@ -174,69 +174,69 @@ message ResponseInfo { message ResponseSetOption { uint32 code = 1; // bytes data = 2; - string log = 3; + string log = 3; string info = 4; } message ResponseInitChain { ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; - bytes app_hash = 3; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; } message ResponseQuery { uint32 code = 1; // bytes data = 2; // use "value" instead. - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; tendermint.crypto.ProofOps proof_ops = 8; - int64 height = 9; + int64 height = 9; string codespace = 10; } message ResponseBeginBlock { repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; string codespace = 8; } message ResponseDeliverTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic int64 gas_wanted = 5 [json_name = "gas_wanted"]; - int64 gas_used = 6 [json_name = "gas_used"]; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic string codespace = 8; } message ResponseEndBlock { repeated ValidatorUpdate validator_updates = 1 - [(gogoproto.nullable) = false]; + [(gogoproto.nullable) = false]; ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + repeated Event events = 3 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; } message ResponseCommit { // reserve 1 - bytes data = 2; + bytes data = 2; int64 retain_height = 3; } @@ -248,10 +248,10 @@ message ResponseOfferSnapshot { Result result = 1; enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Snapshot accepted, apply chunks - ABORT = 2; // Abort all snapshot restoration - REJECT = 3; // Reject this specific snapshot, try others + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others REJECT_FORMAT = 4; // Reject all snapshots of this format, try others REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others } @@ -262,16 +262,16 @@ message ResponseLoadSnapshotChunk { } message ResponseApplySnapshotChunk { - Result result = 1; + Result result = 1; repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply repeated string reject_senders = 3; // Chunk senders to reject and ban enum Result { - UNKNOWN = 0; // Unknown result, abort all snapshot restoration - ACCEPT = 1; // Chunk successfully accepted - ABORT = 2; // Abort all snapshot restoration - RETRY = 3; // Retry chunk (combine with refetch and reject) - RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) REJECT_SNAPSHOT = 5; // Reject this snapshot, try others } } @@ -282,10 +282,10 @@ message ResponseApplySnapshotChunk { // ConsensusParams contains all consensus-relevant parameters // that can be adjusted by the abci app message ConsensusParams { - BlockParams block = 1; - tendermint.types.EvidenceParams evidence = 2; + BlockParams block = 1; + tendermint.types.EvidenceParams evidence = 2; tendermint.types.ValidatorParams validator = 3; - tendermint.types.VersionParams version = 4; + tendermint.types.VersionParams version = 4; } // BlockParams contains limits on the block size. @@ -305,16 +305,16 @@ message LastCommitInfo { // ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. // Later, transactions may be queried using these events. message Event { - string type = 1; + string type = 1; repeated EventAttribute attributes = 2 [ (gogoproto.nullable) = false, - (gogoproto.jsontag) = "attributes,omitempty" + (gogoproto.jsontag) = "attributes,omitempty" ]; } // EventAttribute is a single key-value pair, associated with an event. message EventAttribute { - bytes key = 1; + bytes key = 1; bytes value = 2; bool index = 3; // nondeterministic } @@ -324,8 +324,8 @@ message EventAttribute { // One usage is indexing transaction results. message TxResult { int64 height = 1; - uint32 index = 2; - bytes tx = 3; + uint32 index = 2; + bytes tx = 3; ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; } @@ -342,18 +342,18 @@ message Validator { // ValidatorUpdate message ValidatorUpdate { tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; - int64 power = 2; + int64 power = 2; } // VoteInfo message VoteInfo { - Validator validator = 1 [(gogoproto.nullable) = false]; + Validator validator = 1 [(gogoproto.nullable) = false]; bool signed_last_block = 2; } enum EvidenceType { - UNKNOWN = 0; - DUPLICATE_VOTE = 1; + UNKNOWN = 0; + DUPLICATE_VOTE = 1; LIGHT_CLIENT_ATTACK = 2; } @@ -366,7 +366,7 @@ message Evidence { // The corresponding time where the offense occurred google.protobuf.Timestamp time = 4 [ (gogoproto.nullable) = false, - (gogoproto.stdtime) = true + (gogoproto.stdtime) = true ]; // Total voting power of the validator set in case the ABCI application does // not store historical validators. @@ -378,10 +378,10 @@ message Evidence { // State Sync Types message Snapshot { - uint64 height = 1; // The height at which the snapshot was taken - uint32 format = 2; // The application-specific snapshot format - uint32 chunks = 3; // Number of chunks in the snapshot - bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical bytes metadata = 5; // Arbitrary application metadata } diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto index 8b1b225095..16fd7adf3e 100644 --- a/third_party/proto/tendermint/crypto/keys.proto +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -8,10 +8,10 @@ import "gogoproto/gogo.proto"; // PublicKey defines the keys available for use with Tendermint Validators message PublicKey { option (gogoproto.compare) = true; - option (gogoproto.equal) = true; + option (gogoproto.equal) = true; oneof sum { - bytes ed25519 = 1; + bytes ed25519 = 1; bytes secp256k1 = 2; } } diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto index 0107f7a65a..975df76853 100644 --- a/third_party/proto/tendermint/crypto/proof.proto +++ b/third_party/proto/tendermint/crypto/proof.proto @@ -6,10 +6,10 @@ option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; import "gogoproto/gogo.proto"; message Proof { - int64 total = 1; - int64 index = 2; + int64 total = 1; + int64 index = 2; bytes leaf_hash = 3; - repeated bytes aunts = 4; + repeated bytes aunts = 4; } message ValueOp { @@ -21,8 +21,8 @@ message ValueOp { } message DominoOp { - string key = 1; - string input = 2; + string key = 1; + string input = 2; string output = 3; } @@ -31,7 +31,7 @@ message DominoOp { // for example neighbouring node hash message ProofOp { string type = 1; - bytes key = 2; + bytes key = 2; bytes data = 3; } diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto index 53b59ce6c0..3111d113a5 100644 --- a/third_party/proto/tendermint/libs/bits/types.proto +++ b/third_party/proto/tendermint/libs/bits/types.proto @@ -4,6 +4,6 @@ package tendermint.libs.bits; option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; message BitArray { - int64 bits = 1; + int64 bits = 1; repeated uint64 elems = 2; } diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto index d077234cff..3b234571ba 100644 --- a/third_party/proto/tendermint/types/evidence.proto +++ b/third_party/proto/tendermint/types/evidence.proto @@ -10,7 +10,7 @@ import "tendermint/types/validator.proto"; message Evidence { oneof sum { - DuplicateVoteEvidence duplicate_vote_evidence = 1; + DuplicateVoteEvidence duplicate_vote_evidence = 1; LightClientAttackEvidence light_client_attack_evidence = 2; } } @@ -27,7 +27,7 @@ message DuplicateVoteEvidence { // LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. message LightClientAttackEvidence { tendermint.types.LightBlock conflicting_block = 1; - int64 common_height = 2; + int64 common_height = 2; repeated tendermint.types.Validator byzantine_validators = 3; int64 total_voting_power = 4; google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto index ee67564e9f..0de7d846fb 100644 --- a/third_party/proto/tendermint/types/params.proto +++ b/third_party/proto/tendermint/types/params.proto @@ -11,10 +11,10 @@ option (gogoproto.equal_all) = true; // ConsensusParams contains consensus critical parameters that determine the // validity of blocks. message ConsensusParams { - BlockParams block = 1 [(gogoproto.nullable) = false]; - EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; + BlockParams block = 1 [(gogoproto.nullable) = false]; + EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; ValidatorParams validator = 3 [(gogoproto.nullable) = false]; - VersionParams version = 4 [(gogoproto.nullable) = false]; + VersionParams version = 4 [(gogoproto.nullable) = false]; } // BlockParams contains limits on the block size. @@ -46,7 +46,7 @@ message EvidenceParams { // mechanism for handling [Nothing-At-Stake // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; // This sets the maximum size of total evidence in bytes that can be committed in a single block. // and should fall comfortably under the max block bytes. @@ -58,7 +58,7 @@ message EvidenceParams { // NOTE: uses ABCI pubkey naming, not Amino names. message ValidatorParams { option (gogoproto.populate) = true; - option (gogoproto.equal) = true; + option (gogoproto.equal) = true; repeated string pub_key_types = 1; } @@ -66,7 +66,7 @@ message ValidatorParams { // VersionParams contains the ABCI application version. message VersionParams { option (gogoproto.populate) = true; - option (gogoproto.equal) = true; + option (gogoproto.equal) = true; uint64 app_version = 1; } @@ -76,5 +76,5 @@ message VersionParams { // It is hashed into the Header.ConsensusHash. message HashedParams { int64 block_max_bytes = 1; - int64 block_max_gas = 2; + int64 block_max_gas = 2; } diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto index 1538d5cd7c..7f7ea74cac 100644 --- a/third_party/proto/tendermint/types/types.proto +++ b/third_party/proto/tendermint/types/types.proto @@ -12,22 +12,22 @@ import "tendermint/types/validator.proto"; // BlockIdFlag indicates which BlcokID the signature is for enum BlockIDFlag { option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; + option (gogoproto.goproto_enum_prefix) = false; BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; - BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; - BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; - BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; } // SignedMsgType is a type of signed message in the consensus. enum SignedMsgType { option (gogoproto.goproto_enum_stringer) = true; - option (gogoproto.goproto_enum_prefix) = false; + option (gogoproto.goproto_enum_prefix) = false; SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; // Votes - SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; + SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; // Proposals @@ -37,7 +37,7 @@ enum SignedMsgType { // PartsetHeader message PartSetHeader { uint32 total = 1; - bytes hash = 2; + bytes hash = 2; } message Part { @@ -48,7 +48,7 @@ message Part { // BlockID message BlockID { - bytes hash = 1; + bytes hash = 1; PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; } @@ -57,27 +57,27 @@ message BlockID { // Header defines the structure of a Tendermint block header. message Header { // basic block info - tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; string chain_id = 2 [(gogoproto.customname) = "ChainID"]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; // prev block info BlockID last_block_id = 5 [(gogoproto.nullable) = false]; // hashes of block data bytes last_commit_hash = 6; // commit from validators from the last block - bytes data_hash = 7; // transactions + bytes data_hash = 7; // transactions // hashes from the app output from the prev block - bytes validators_hash = 8; // validators for the current block + bytes validators_hash = 8; // validators for the current block bytes next_validators_hash = 9; // validators for the next block - bytes consensus_hash = 10; // consensus params for current block - bytes app_hash = 11; // state after txs from the previous block - bytes last_results_hash = 12; // root hash of all results from the txs from the previous block + bytes consensus_hash = 10; // consensus params for current block + bytes app_hash = 11; // state after txs from the previous block + bytes last_results_hash = 12; // root hash of all results from the txs from the previous block // consensus info - bytes evidence_hash = 13; // evidence included in the block + bytes evidence_hash = 13; // evidence included in the block bytes proposer_address = 14; // original proposer of the block } @@ -92,43 +92,43 @@ message Data { // Vote represents a prevote, precommit, or commit vote from validators for // consensus. message Vote { - SignedMsgType type = 1; - int64 height = 2; - int32 round = 3; + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; BlockID block_id = 4 - [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. google.protobuf.Timestamp timestamp = 5 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes validator_address = 6; - int32 validator_index = 7; - bytes signature = 8; + int32 validator_index = 7; + bytes signature = 8; } // Commit contains the evidence that a block was committed by a set of validators. message Commit { - int64 height = 1; - int32 round = 2; - BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; } // CommitSig is a part of the Vote included in a Commit. message CommitSig { - BlockIDFlag block_id_flag = 1; + BlockIDFlag block_id_flag = 1; bytes validator_address = 2; - google.protobuf.Timestamp timestamp = 3 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 4; } message Proposal { - SignedMsgType type = 1; - int64 height = 2; - int32 round = 3; + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; int32 pol_round = 4; - BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; google.protobuf.Timestamp timestamp = 6 - [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; bytes signature = 7; } @@ -143,15 +143,15 @@ message LightBlock { } message BlockMeta { - BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; int64 block_size = 2; - Header header = 3 [(gogoproto.nullable) = false]; - int64 num_txs = 4; + Header header = 3 [(gogoproto.nullable) = false]; + int64 num_txs = 4; } // TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. message TxProof { bytes root_hash = 1; - bytes data = 2; - tendermint.crypto.Proof proof = 3; + bytes data = 2; + tendermint.crypto.Proof proof = 3; } diff --git a/third_party/proto/tendermint/types/validator.proto b/third_party/proto/tendermint/types/validator.proto index 54c763668e..49860b96d6 100644 --- a/third_party/proto/tendermint/types/validator.proto +++ b/third_party/proto/tendermint/types/validator.proto @@ -7,19 +7,19 @@ import "gogoproto/gogo.proto"; import "tendermint/crypto/keys.proto"; message ValidatorSet { - repeated Validator validators = 1; - Validator proposer = 2; + repeated Validator validators = 1; + Validator proposer = 2; int64 total_voting_power = 3; } message Validator { - bytes address = 1; - tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; - int64 voting_power = 3; + bytes address = 1; + tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; + int64 voting_power = 3; int64 proposer_priority = 4; } message SimpleValidator { - tendermint.crypto.PublicKey pub_key = 1; + tendermint.crypto.PublicKey pub_key = 1; int64 voting_power = 2; } diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto index 0dc33d36cf..6061868bd4 100644 --- a/third_party/proto/tendermint/version/types.proto +++ b/third_party/proto/tendermint/version/types.proto @@ -20,5 +20,5 @@ message Consensus { option (gogoproto.equal) = true; uint64 block = 1; - uint64 app = 2; + uint64 app = 2; } From e94b29ba59082a1810857bc875a46008219912ef Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 15 Jun 2021 09:01:48 +0200 Subject: [PATCH 02/14] Implemented application links logic See PR #479 --- go.mod | 2 + go.sum | 308 +- proto/desmos/posts/v1beta1/posts.proto | 6 +- proto/desmos/profiles/v1beta1/genesis.proto | 10 + .../profiles/v1beta1/models_app_links.proto | 10 +- .../profiles/v1beta1/models_profile.proto | 7 - .../desmos/profiles/v1beta1/msg_server.proto | 5 +- .../profiles/v1beta1/msgs_app_links.proto | 8 +- proto/desmos/profiles/v1beta1/query.proto | 10 +- .../profiles/v1beta1/query_app_links.proto | 26 +- x/profiles/client/cli/cli_app_links.go | 174 ++ x/profiles/client/cli/cli_chain_links.go | 6 +- x/profiles/client/cli/query.go | 1 + x/profiles/client/cli/tx.go | 2 + x/profiles/keeper/alias_functions.go | 48 +- x/profiles/keeper/genesis.go | 8 + x/profiles/keeper/genesis_test.go | 9 +- x/profiles/keeper/grpc_query.go | 29 + x/profiles/keeper/keeper.go | 2 +- x/profiles/keeper/keeper_app_links.go | 118 + x/profiles/keeper/keeper_ibc.go | 6 + x/profiles/keeper/msg_server_app_link.go | 79 + x/profiles/keeper/msgs_server_profile.go | 2 + x/profiles/keeper/relay_app_links.go | 267 ++ x/profiles/keeper/relay_app_links_test.go | 193 ++ x/profiles/module_ibc.go | 251 +- x/profiles/simulation/genesis.go | 1 + x/profiles/types/codec.go | 6 +- x/profiles/types/error.go | 17 +- x/profiles/types/events.go | 17 + x/profiles/types/expected_keeper.go | 13 + x/profiles/types/genesis.go | 32 +- x/profiles/types/genesis.pb.go | 359 ++- x/profiles/types/genesis_test.go | 5 + x/profiles/types/keys.go | 33 +- x/profiles/types/models_app_links.go | 200 ++ x/profiles/types/models_app_links.pb.go | 2616 +++++++++++++++++ x/profiles/types/models_packets.go | 2 +- x/profiles/types/msg_server.pb.go | 148 +- x/profiles/types/msgs_app_links.go | 125 + x/profiles/types/msgs_app_links.pb.go | 1102 +++++++ x/profiles/types/packet.go | 16 + x/profiles/types/query.pb.go | 113 +- x/profiles/types/query.pb.gw.go | 116 + x/profiles/types/query_app_links.pb.go | 641 ++++ 45 files changed, 6933 insertions(+), 216 deletions(-) create mode 100644 x/profiles/client/cli/cli_app_links.go create mode 100644 x/profiles/keeper/keeper_app_links.go create mode 100644 x/profiles/keeper/msg_server_app_link.go create mode 100644 x/profiles/keeper/relay_app_links.go create mode 100644 x/profiles/keeper/relay_app_links_test.go create mode 100644 x/profiles/types/models_app_links.go create mode 100644 x/profiles/types/models_app_links.pb.go create mode 100644 x/profiles/types/msgs_app_links.go create mode 100644 x/profiles/types/msgs_app_links.pb.go create mode 100644 x/profiles/types/packet.go create mode 100644 x/profiles/types/query_app_links.pb.go diff --git a/go.mod b/go.mod index c002935785..c590855f9a 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,8 @@ module github.com/desmos-labs/desmos go 1.15 require ( + github.com/armon/go-metrics v0.3.8 + github.com/bandprotocol/chain v1.0.1-0.20210519090833-cb190e5f333a github.com/cosmos/cosmos-sdk v0.42.4 github.com/cosmos/go-bip39 v1.0.0 github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20200515063516-9c493b11de3e diff --git a/go.sum b/go.sum index 42fcf367eb..081d04e75b 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,7 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -24,12 +25,14 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -51,6 +54,12 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/bandprotocol/chain v1.0.1-0.20210519090833-cb190e5f333a h1:5XmKrdpEsQo//JPgjicFNZ5iS81LA0O9t/5CSJFgzNM= +github.com/bandprotocol/chain v1.0.1-0.20210519090833-cb190e5f333a/go.mod h1:1fwexaHdT3YxD+aPcq0dWSswChjXUUevIf9rctYgJjA= +github.com/bandprotocol/go-owasm v0.0.0-20210311072328-a6859c27139c h1:G0NLmoFYgPJqH9M2HLkGHayY9euzrEdOOt30/Pqbfqo= +github.com/bandprotocol/go-owasm v0.0.0-20210311072328-a6859c27139c/go.mod h1:buKhSOd32eN0zPbZ/k+4sa6znl33cDg+8JnORQD3/c8= +github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= 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= @@ -58,12 +67,25 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blevesearch/bleve v1.0.9/go.mod h1:tb04/rbU29clbtNgorgFd8XdJea4x3ybYaOjWKr+UBU= +github.com/blevesearch/blevex v0.0.0-20190916190636-152f0fe5c040/go.mod h1:WH+MU2F4T0VmSdaPX+Wu5GYoZBrYWdOZWSjzvYcDmqQ= +github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= +github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= +github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= +github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= +github.com/blevesearch/zap/v11 v11.0.9/go.mod h1:47hzinvmY2EvvJruzsSCJpro7so8L1neseaGjrtXHOY= +github.com/blevesearch/zap/v12 v12.0.9/go.mod h1:paQuvxy7yXor+0Mx8p2KNmJgygQbQNN+W6HRfL5Hvwc= +github.com/blevesearch/zap/v13 v13.0.1/go.mod h1:XmyNLMvMf8Z5FjLANXwUeDW3e1+o77TTGUWrth7T9WI= +github.com/blevesearch/zap/v14 v14.0.0/go.mod h1:sUc/gPGJlFbSQ2ZUh/wGRYwkKx+Dg/5p+dd+eq6QMXk= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= +github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= @@ -76,6 +98,7 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= 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= @@ -113,24 +136,36 @@ github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6 github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +github.com/couchbase/ghistogram v0.1.0/go.mod h1:s1Jhy76zqfEecpNWJfWUiKZookAFaiGOEoyzgHt9i7k= +github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= +github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= +github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= +github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20200515063516-9c493b11de3e h1:hGcgtbuXVwaFx6Hf3KzlrG2elBkijzFqQkWYluo/EZw= github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20200515063516-9c493b11de3e/go.mod h1:5TMhouV+kDGQZZrBK+rzBP+Jmeyu0V7WvrBHqukiTv8= github.com/desmos-labs/cosmos-sdk v0.42.5-0.20210520121507-028ded8dbe62 h1:S3thkiFnm9/YUB/injCKQ1jjYKkavLix3mMm2n3n22A= github.com/desmos-labs/cosmos-sdk v0.42.5-0.20210520121507-028ded8dbe62/go.mod h1:3JyT+Ud7QRTO1/ikncNqVhaF526ZKNqh2HGMqXn+QHE= +github.com/dgraph-io/badger v1.6.1 h1:w9pSFNSdq/JPM1N12Fz/F/bzo993Is1W+Q7HjPzi7yg= +github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= +github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -144,6 +179,7 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= +github.com/eapache/channels v1.1.0/go.mod h1:jMm2qB5Ubtg9zLd+inMZd2/NUvXgzmWXsDaLyQIGfH0= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -159,6 +195,7 @@ github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqL github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -168,10 +205,16 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fxamacker/cbor/v2 v2.2.1-0.20200526031912-58b82b5bfc05/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= 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-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gorp/gorp v2.2.0+incompatible/go.mod h1:7IfkAQnO7jfT/9IQ3R9wL1dFhukN6aQxzKTHnkxzA/E= 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.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= @@ -180,6 +223,10 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -200,6 +247,7 @@ github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a 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= @@ -227,22 +275,27 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= 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.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw= +github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -274,6 +327,8 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= +github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -281,10 +336,13 @@ github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYtXdgmf1AVNs0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -304,13 +362,46 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= +github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= +github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= +github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= +github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= +github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= +github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= +github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= +github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= +github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= @@ -327,45 +418,131 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= +github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/kljensen/snowball v0.6.0/go.mod h1:27N7E8fVU5H68RlUmnWwZCfxgt4POBJfENGMvNRhldw= 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/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= 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.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kyokomi/emoji v2.2.4+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a/go.mod h1:jVntzcUU+2BtVohZBQmSHWUmh8B55LCNfPhcNCIvvIg= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= +github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= +github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-libp2p v0.10.2/go.mod h1:BYckt6lmS/oA1SlRETSPWSUulCQKiZuTVsymVMc//HQ= +github.com/libp2p/go-libp2p-autonat v0.3.1/go.mod h1:0OzOi1/cVc7UcxfOddemYD5vzEqi4fwRbnZcJGLi68U= +github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= +github.com/libp2p/go-libp2p-circuit v0.3.1/go.mod h1:8RMIlivu1+RxhebipJwFDA45DasLx+kkrp4IlJj53F4= +github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= +github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= +github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= +github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= +github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= +github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= +github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= +github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= +github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= +github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= +github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= +github.com/libp2p/go-libp2p-mplex v0.2.4/go.mod h1:mI7iOezdWFOisvUwaYd3IDrJ4oVmgoXK8H331ui39CE= +github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= +github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= +github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= +github.com/libp2p/go-libp2p-pubsub v0.3.3/go.mod h1:DTMSVmZZfXodB/pvdTGrY2eHPZ9W2ev7hzTH83OKHrI= +github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= +github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= +github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= +github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= +github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= +github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= +github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= +github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= +github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= +github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= +github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= +github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= +github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= +github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= +github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= +github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -377,10 +554,45 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ 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/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= +github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= +github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= +github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= +github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= +github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= +github.com/multiformats/go-multistream v0.1.2/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= +github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -390,22 +602,28 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oasisprotocol/deoxysii v0.0.0-20200527154044-851aec403956/go.mod h1:cE5EgXTIhq5oAVdZ7LZd1FjTRLALPEzv93CWzBtDkyI= +github.com/oasisprotocol/ed25519 v0.0.0-20200528083105-55566edd6df0/go.mod h1:IZbb50w3AB72BVobEF6qG93NNSrTw/V2QlboxqSu3Xw= +github.com/oasisprotocol/oasis-core/go v0.0.0-20200730171716-3be2b460b3ac/go.mod h1:DD7nvKy+YbFcksSeu2P+LyrW6/6Xa2hgmPSdyJA4z+M= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= @@ -413,6 +631,7 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= @@ -434,8 +653,10 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= 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/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -447,12 +668,15 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= @@ -488,12 +712,14 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 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= @@ -510,6 +736,8 @@ github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZ github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/segmentio/kafka-go v0.3.7/go.mod h1:8rEphJEczp+yDE/R5vwmaqZgF1wllrl4ioQcNKB8wVA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -518,9 +746,12 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= 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= @@ -532,6 +763,7 @@ github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= @@ -545,9 +777,12 @@ 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.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -564,6 +799,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= @@ -572,32 +809,60 @@ github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= +github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= +github.com/tendermint/go-amino v0.15.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= 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.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= +github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= github.com/tendermint/tendermint v0.34.10 h1:wBOc/It8sh/pVH9np2V5fBvRmIyFN/bUrGPx+eAHexs= github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= +github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= +github.com/thepudds/fzgo v0.2.2/go.mod h1:ZgigL1toyKrar3rWdXz7Fuv7bUpKZ4BAYN49TpEFMCI= +github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= +github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= +github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= +github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= +github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= 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.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec/go.mod h1:BZ1RAoRPbCxum9Grlv5aeksu2H8BiKehBYooU2LFiOQ= +gitlab.com/yawning/dynlib.git v0.0.0-20200603163025-35fe007b0761/go.mod h1:U41r+zgpFRTlkSzMhBjUqbupvVBafgokFFkKn0j+874= +gitlab.com/yawning/slice.git v0.0.0-20190714152416-bc4ae2510529/go.mod h1:sgaKGjNNjAAVrZvQQhE3oYIbnFZVaCBE2T7PmbpKJ4U= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -606,26 +871,41 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= 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.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/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-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -659,9 +939,11 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/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-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -669,6 +951,7 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/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-20190227160552-c95aed5357e7/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= @@ -677,13 +960,16 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/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-20200226121028-0de0cce0169b/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-20200421231249-e086a090c8fd/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-20200602114024-627f9648deb9/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-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -700,6 +986,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ 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-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-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -710,22 +997,32 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/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-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/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-20190405154228-4b34438f7a67/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-20190526052359-791d8a0f4d09/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-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/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-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -738,6 +1035,7 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/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-20200722175500-76b94024e4b6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -763,6 +1061,7 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb 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-20181130052023-1c3d964395ce/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= @@ -779,11 +1078,14 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/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-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/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-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -802,6 +1104,7 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 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/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -825,6 +1128,7 @@ google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a h1:tzkHckzMzgPr8SC google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc/security/advancedtls v0.0.0-20200504170109-c8482678eb49/go.mod h1:MqvBVrZckRvDn3WrLNRHuHWrNGuZISOF4ohGDsL+tK4= 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= @@ -853,6 +1157,8 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10= gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= +gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= 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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= diff --git a/proto/desmos/posts/v1beta1/posts.proto b/proto/desmos/posts/v1beta1/posts.proto index 825b60b2d8..439ff04480 100644 --- a/proto/desmos/posts/v1beta1/posts.proto +++ b/proto/desmos/posts/v1beta1/posts.proto @@ -80,10 +80,12 @@ enum CommentsState { [ (gogoproto.enumvalue_customname) = "CommentsStateUnspecified" ]; // COMMENT_STATE_ALLOWED tells that's possible to comment a post - COMMENTS_STATE_ALLOWED = 1 [ (gogoproto.enumvalue_customname) = "CommentsStateAllowed" ]; + COMMENTS_STATE_ALLOWED = 1 + [ (gogoproto.enumvalue_customname) = "CommentsStateAllowed" ]; // COMMENT_STATE_BLOCKED tells that's not possible to comment a post - COMMENTS_STATE_BLOCKED = 2 [ (gogoproto.enumvalue_customname) = "CommentsStateBlocked" ]; + COMMENTS_STATE_BLOCKED = 2 + [ (gogoproto.enumvalue_customname) = "CommentsStateBlocked" ]; } // ___________________________________________________________________________________________________________________ diff --git a/proto/desmos/profiles/v1beta1/genesis.proto b/proto/desmos/profiles/v1beta1/genesis.proto index c4233383c8..31ee340ce0 100644 --- a/proto/desmos/profiles/v1beta1/genesis.proto +++ b/proto/desmos/profiles/v1beta1/genesis.proto @@ -6,6 +6,7 @@ import "desmos/profiles/v1beta1/models_params.proto"; import "desmos/profiles/v1beta1/models_profile.proto"; import "desmos/profiles/v1beta1/models_relationships.proto"; import "desmos/profiles/v1beta1/models_dtag_requests.proto"; +import "desmos/profiles/v1beta1/models_app_links.proto"; option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; @@ -37,4 +38,13 @@ message GenesisState { (gogoproto.moretags) = "yaml:\"ibc_port_id\"", (gogoproto.customname) = "IBCPortID" ]; + + repeated ApplicationLinkEntry application_links = 6 [ (gogoproto.nullable) = false ]; } + +// AppLinkEntry represents an application link entry inside the genesis state +message ApplicationLinkEntry { + string user = 1; + desmos.profiles.v1beta1.ApplicationLink link = 2 + [ (gogoproto.nullable) = false ]; +} \ No newline at end of file diff --git a/proto/desmos/profiles/v1beta1/models_app_links.proto b/proto/desmos/profiles/v1beta1/models_app_links.proto index bf615d6922..b4d13ee998 100644 --- a/proto/desmos/profiles/v1beta1/models_app_links.proto +++ b/proto/desmos/profiles/v1beta1/models_app_links.proto @@ -15,8 +15,7 @@ message ApplicationLink { [ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"data\"" ]; // State of the link - ApplicationLinkState state = 2 - [ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"state\"" ]; + ApplicationLinkState state = 2 [ (gogoproto.moretags) = "yaml:\"state\"" ]; // OracleRequest represents the request that has been made to the oracle OracleRequest oracle_request = 3 [ @@ -144,3 +143,10 @@ message Result { string error = 1 [ (gogoproto.moretags) = "yaml:\"error\"" ]; } } + +// ClientRequest contains the data of a client oracle request +message ClientRequest { + string user = 1; + string application = 2; + string username = 3; +} \ No newline at end of file diff --git a/proto/desmos/profiles/v1beta1/models_profile.proto b/proto/desmos/profiles/v1beta1/models_profile.proto index 7399a682e7..3e392cee58 100644 --- a/proto/desmos/profiles/v1beta1/models_profile.proto +++ b/proto/desmos/profiles/v1beta1/models_profile.proto @@ -6,7 +6,6 @@ import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; import "cosmos_proto/cosmos.proto"; import "desmos/profiles/v1beta1/models_chain_links.proto"; -import "desmos/profiles/v1beta1/models_app_links.proto"; option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; @@ -53,12 +52,6 @@ message Profile { (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"chains_links\"" ]; - - // AppLinks represents the slice of all the centralized application links - repeated desmos.profiles.v1beta1.ApplicationLink app_links = 8 [ - (gogoproto.nullable) = false, - (gogoproto.moretags) = "yaml:\"app_links\"" - ]; } // Pictures contains the data of a user profile's related pictures diff --git a/proto/desmos/profiles/v1beta1/msg_server.proto b/proto/desmos/profiles/v1beta1/msg_server.proto index 0d7d275434..f7d612c2ea 100644 --- a/proto/desmos/profiles/v1beta1/msg_server.proto +++ b/proto/desmos/profiles/v1beta1/msg_server.proto @@ -66,10 +66,9 @@ service Msg { rpc UnlinkChainAccount(MsgUnlinkChainAccount) returns (UnlinkChainAccountResponse); - // CreateApplicationLink defines a method to create a centralized application + // LinkApplication defines a method to create a centralized application // link - rpc CreateApplicationLink(MsgCreateApplicationLink) - returns (MsgCreateApplicationLinkResponse); + rpc LinkApplication(MsgLinkApplication) returns (MsgLinkApplicationResponse); // UnlinkApplication defines a method to remove a centralized application rpc UnlinkApplication(MsgUnlinkApplication) diff --git a/proto/desmos/profiles/v1beta1/msgs_app_links.proto b/proto/desmos/profiles/v1beta1/msgs_app_links.proto index bf52ea2c16..b7878bac6b 100644 --- a/proto/desmos/profiles/v1beta1/msgs_app_links.proto +++ b/proto/desmos/profiles/v1beta1/msgs_app_links.proto @@ -8,9 +8,9 @@ import "desmos/profiles/v1beta1/models_app_links.proto"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; -// MsgCreateApplicationLink defines a msg to connect a profile with a +// MsgLinkApplication defines a msg to connect a profile with a // centralized application account (eg. Twitter, GitHub, etc). -message MsgCreateApplicationLink { +message MsgLinkApplication { option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -46,9 +46,9 @@ message MsgCreateApplicationLink { [ (gogoproto.moretags) = "yaml:\"timeout_timestamp\"" ]; } -// MsgCreateApplicationLinkResponse defines the Msg/CreateApplicationLink +// MsgLinkApplicationResponse defines the Msg/LinkApplication // response type. -message MsgCreateApplicationLinkResponse {} +message MsgLinkApplicationResponse {} // ------------------------------------------------------------------------------------------------------------------- diff --git a/proto/desmos/profiles/v1beta1/query.proto b/proto/desmos/profiles/v1beta1/query.proto index b18f459c0e..1d63634638 100644 --- a/proto/desmos/profiles/v1beta1/query.proto +++ b/proto/desmos/profiles/v1beta1/query.proto @@ -58,11 +58,9 @@ service Query { "/desmos/profiles/v1beta1/chain-links/{chain_name}/{target_address}"; } - // ProfileByAppLink queries the profile linked with the given application and - // having the given username - rpc ProfileByAppLink(QueryProfileByAppLinkRequest) - returns (QueryProfileByAppLinkResponse) { - option (google.api.http).get = - "/desmos/profiles/v1beta1/app-links/{application}/{username}"; + // UserApplicationLinks queries application links for the given user + rpc UserApplicationLinks(QueryUserApplicationLinksRequest) + returns (QueryUserApplicationLinksResponse) { + option (google.api.http).get = "/desmos/profiles/v1beta1/app-links/{user}"; } } diff --git a/proto/desmos/profiles/v1beta1/query_app_links.proto b/proto/desmos/profiles/v1beta1/query_app_links.proto index e421465082..6c06f44a4c 100644 --- a/proto/desmos/profiles/v1beta1/query_app_links.proto +++ b/proto/desmos/profiles/v1beta1/query_app_links.proto @@ -4,22 +4,26 @@ package desmos.profiles.v1beta1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; -import "desmos/profiles/v1beta1/models_params.proto"; +import "desmos/profiles/v1beta1/models_app_links.proto"; import "cosmos_proto/cosmos.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; option go_package = "github.com/desmos-labs/desmos/x/profiles/types"; -// QueryProfileByAppLinkRequest represent the parameters used to query for a -// specific profile given an application name and a username -message QueryProfileByAppLinkRequest { - string application = 1; - string username = 2; +// QueryUserApplicationLinksRequest represent the request used when querying the +// application links of a specific user +message QueryUserApplicationLinksRequest { + string user = 1; + + // Pagination defines an optional pagination for the request + cosmos.base.query.v1beta1.PageRequest pagination = 2; } -// QueryProfileByAppLinkResponse represents the response to the query used to -// get a profile by a given application name and username -message QueryProfileByAppLinkResponse { - google.protobuf.Any profile = 1 - [ (cosmos_proto.accepts_interface) = "AccountI" ]; +// QueryUserApplicationLinksResponse represents the response to the query used +// to get the application links for a specific user +message QueryUserApplicationLinksResponse { + repeated ApplicationLink links = 1 [ (gogoproto.nullable) = false ]; + + // Pagination defines the pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/x/profiles/client/cli/cli_app_links.go b/x/profiles/client/cli/cli_app_links.go new file mode 100644 index 0000000000..eba8dbddc4 --- /dev/null +++ b/x/profiles/client/cli/cli_app_links.go @@ -0,0 +1,174 @@ +package cli + +import ( + "context" + "fmt" + "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/version" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + channelutils "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/client/utils" + + "github.com/desmos-labs/desmos/x/profiles/types" +) + +const ( + flagPacketTimeoutHeight = "packet-timeout-height" + flagPacketTimeoutTimestamp = "packet-timeout-timestamp" + flagAbsoluteTimeouts = "absolute-timeouts" +) + +// GetCmdLinkApplication returns the command to create a NewMsgLinkApplication transaction +func GetCmdLinkApplication() *cobra.Command { + cmd := &cobra.Command{ + Use: "link-app [src-port] [src-channel] [application] [username] [verification-call-data]", + Short: "Link a centralized application account to your Desmos profile", + Long: strings.TrimSpace(`Connect a Desmos profile to a centralized social network account through IBC. +Timeouts can be specified as absolute or relative using the "absolute-timeouts" flag. +Timeout height can be set by passing in the height string in the form {revision}-{height} using the "packet-timeout-height" flag. +Relative timeouts are added to the block height and block timestamp queried from the latest consensus state corresponding +to the counterparty channel. Any timeout set to 0 is disabled.`), + Example: fmt.Sprintf( + "%s tx profiles link-app [src-port] [src-channel] [application] [username] [verification-call-data]", + version.AppName), + Args: cobra.ExactArgs(5), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + sender := clientCtx.GetFromAddress() + srcPort := args[0] + srcChannel := args[1] + linkData := types.NewData(args[2], args[3]) + oracleRequestCallData := types.NewOracleRequestCallData(args[2], args[4]) + + timeoutHeightStr, err := cmd.Flags().GetString(flagPacketTimeoutHeight) + if err != nil { + return err + } + timeoutHeight, err := clienttypes.ParseHeight(timeoutHeightStr) + if err != nil { + return err + } + + timeoutTimestamp, err := cmd.Flags().GetUint64(flagPacketTimeoutTimestamp) + if err != nil { + return err + } + + absoluteTimeouts, err := cmd.Flags().GetBool(flagAbsoluteTimeouts) + if err != nil { + return err + } + + // if the timeouts are not absolute, retrieve latest block height and block timestamp + // for the consensus state connected to the destination port/channel + if !absoluteTimeouts { + consensusState, height, _, err := channelutils.QueryLatestConsensusState(clientCtx, srcPort, srcChannel) + if err != nil { + return err + } + + if !timeoutHeight.IsZero() { + absoluteHeight := height + absoluteHeight.RevisionNumber += timeoutHeight.RevisionNumber + absoluteHeight.RevisionHeight += timeoutHeight.RevisionHeight + timeoutHeight = absoluteHeight + } + + if timeoutTimestamp != 0 { + timeoutTimestamp = consensusState.GetTimestamp() + timeoutTimestamp + } + } + + msg := types.NewMsgLinkApplication( + linkData, oracleRequestCallData, sender, + srcPort, srcChannel, timeoutHeight, timeoutTimestamp, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(flagPacketTimeoutHeight, types.DefaultRelativePacketTimeoutHeight, "Packet timeout block height. The timeout is disabled when set to 0-0.") + cmd.Flags().Uint64(flagPacketTimeoutTimestamp, types.DefaultRelativePacketTimeoutTimestamp, "Packet timeout timestamp in nanoseconds. Default is 10 minutes. The timeout is disabled when set to 0.") + cmd.Flags().Bool(flagAbsoluteTimeouts, false, "Timeout flags are used as absolute timeouts.") + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// GetCmdUnlinkApplication returns the command allowing to unlink a centralized application from a Desmos profile +func GetCmdUnlinkApplication() *cobra.Command { + cmd := &cobra.Command{ + Use: "unlink-app [application] [username]", + Short: "Unlink a centralized application account from your Desmos profile", + Example: fmt.Sprintf("%s tx profiles unlink-app [application] [username]", version.AppName), + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + sender := clientCtx.GetFromAddress() + + msg := types.NewMsgUnlinkApplication(args[0], args[1], sender) + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// ------------------------------------------------------------------------------------------------------------------- + +// GetCmdQueryAppLinks returns the command allowing to query the application links associated with a profile +func GetCmdQueryAppLinks() *cobra.Command { + cmd := &cobra.Command{ + Use: "app-links [user]", + Short: "Get all the application links associated to the given username with optional pagination", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + res, err := queryClient.UserApplicationLinks( + context.Background(), + &types.QueryUserApplicationLinksRequest{User: args[0], Pagination: pageReq}, + ) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + flags.AddPaginationFlagsToCmd(cmd, "app links") + + return cmd +} diff --git a/x/profiles/client/cli/cli_chain_links.go b/x/profiles/client/cli/cli_chain_links.go index a0724f45d6..56da1bc925 100644 --- a/x/profiles/client/cli/cli_chain_links.go +++ b/x/profiles/client/cli/cli_chain_links.go @@ -19,7 +19,7 @@ import ( // GetCmdLinkChainAccount returns the command allowing to link an external chain account func GetCmdLinkChainAccount() *cobra.Command { cmd := &cobra.Command{ - Use: "link [data-file]", + Use: "link-chain [data-file]", Args: cobra.ExactArgs(1), Short: "Link a Desmos profile to an external chain account using the data written inside the given file", Long: strings.TrimSpace(fmt.Sprintf(`Link an external account to a Desmos profile. @@ -84,7 +84,7 @@ Where data.json contains: // GetCmdUnlinkChainAccount returns the command allowing to unlink an external chain account from a profile func GetCmdUnlinkChainAccount() *cobra.Command { cmd := &cobra.Command{ - Use: "unlink [chain-name] [address]", + Use: "unlink-chain [chain-name] [address]", Short: "Unlink the external account having the given chain name and address", Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { @@ -113,7 +113,7 @@ func GetCmdUnlinkChainAccount() *cobra.Command { // given an external chain name and address func GetCmdQueryProfileByChainLink() *cobra.Command { cmd := &cobra.Command{ - Use: "chain-link [chain-name] [address]", + Use: "profile-by-chain-link [chain-name] [address]", Short: "Get the profile linked with the external account having the specified chain name and address", Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { diff --git a/x/profiles/client/cli/query.go b/x/profiles/client/cli/query.go index fc8a227827..e398aa3db3 100644 --- a/x/profiles/client/cli/query.go +++ b/x/profiles/client/cli/query.go @@ -23,6 +23,7 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryUserBlocks(), GetCmdQueryParams(), GetCmdQueryProfileByChainLink(), + GetCmdQueryAppLinks(), ) return profileQueryCmd } diff --git a/x/profiles/client/cli/tx.go b/x/profiles/client/cli/tx.go index ca7b1593c5..a2c34bbc52 100644 --- a/x/profiles/client/cli/tx.go +++ b/x/profiles/client/cli/tx.go @@ -30,6 +30,8 @@ func NewTxCmd() *cobra.Command { GetCmdUnblockUser(), GetCmdLinkChainAccount(), GetCmdUnlinkChainAccount(), + GetCmdLinkApplication(), + GetCmdUnlinkApplication(), ) return profileTxCmd diff --git a/x/profiles/keeper/alias_functions.go b/x/profiles/keeper/alias_functions.go index 4d38680e28..49743d4cda 100644 --- a/x/profiles/keeper/alias_functions.go +++ b/x/profiles/keeper/alias_functions.go @@ -55,7 +55,8 @@ func (k Keeper) IterateRelationships(ctx sdk.Context, fn func(index int64, relat } } -// IterateUserRelationships iterates through the relationships with the given user address and performs the provided function +// IterateUserRelationships iterates through the relationships with the given user address +// and performs the provided function func (k Keeper) IterateUserRelationships(ctx sdk.Context, user string, fn func(index int64, relationship types.Relationship) (stop bool)) { store := ctx.KVStore(k.storeKey) @@ -75,3 +76,48 @@ func (k Keeper) IterateUserRelationships(ctx sdk.Context, user string, fn func(i i++ } } + +// -------------------------------------------------------------------------------------------------------------------- + +// IterateUserApplicationLinks iterates through all the application links realted to the given user +// and performs the provided function +func (k Keeper) IterateUserApplicationLinks(ctx sdk.Context, user string, fn func(index int64, link types.ApplicationLink) (stop bool)) { + store := ctx.KVStore(k.storeKey) + + iterator := sdk.KVStorePrefixIterator(store, types.UserApplicationLinksPrefix(user)) + defer iterator.Close() + + i := int64(0) + + for ; iterator.Valid(); iterator.Next() { + link := types.MustUnmarshalApplicationLink(k.cdc, iterator.Value()) + + stop := fn(i, link) + + if stop { + break + } + i++ + } +} + +// GetApplicationLinksEntries returns a slice of ApplicationLinkEntry objects containing the details of all the +// applications links entries stored inside the current context +func (k Keeper) GetApplicationLinksEntries(ctx sdk.Context) []types.ApplicationLinkEntry { + var entries []types.ApplicationLinkEntry + + k.ak.IterateAccounts(ctx, func(account authtypes.AccountI) (stop bool) { + k.IterateUserApplicationLinks(ctx, account.GetAddress().String(), func(_ int64, link types.ApplicationLink) (stop bool) { + entries = append(entries, types.NewApplicationLinkEntry( + account.GetAddress().String(), + link, + )) + + return false + }) + + return false + }) + + return entries +} diff --git a/x/profiles/keeper/genesis.go b/x/profiles/keeper/genesis.go index 2fad39c40d..7abdb5924e 100644 --- a/x/profiles/keeper/genesis.go +++ b/x/profiles/keeper/genesis.go @@ -16,6 +16,7 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { k.GetAllUsersBlocks(ctx), k.GetParams(ctx), k.GetPort(ctx), + k.GetApplicationLinksEntries(ctx), ) } @@ -85,5 +86,12 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) []abci.Val } } + for _, entry := range data.ApplicationLinks { + err := k.SaveApplicationLink(ctx, entry.User, entry.Link) + if err != nil { + panic(err) + } + } + return nil } diff --git a/x/profiles/keeper/genesis_test.go b/x/profiles/keeper/genesis_test.go index 388521666a..45aaee5083 100644 --- a/x/profiles/keeper/genesis_test.go +++ b/x/profiles/keeper/genesis_test.go @@ -35,7 +35,7 @@ func (suite *KeeperTestSuite) Test_ExportGenesis() { Relationships: nil, Blocks: nil, }, - expGenesis: types.NewGenesisState(nil, nil, nil, types.DefaultParams(), ""), + expGenesis: types.NewGenesisState(nil, nil, nil, types.DefaultParams(), "", nil), }, { name: "non-empty state", @@ -120,6 +120,7 @@ func (suite *KeeperTestSuite) Test_ExportGenesis() { sdk.NewInt(1000), ), "port-id", + nil, ), }, } @@ -225,7 +226,7 @@ func (suite *KeeperTestSuite) Test_InitGenesis() { }{ { name: "empty genesis", - genesis: types.NewGenesisState(nil, nil, nil, types.DefaultParams(), types.IBCPortID), + genesis: types.NewGenesisState(nil, nil, nil, types.DefaultParams(), types.IBCPortID, nil), expState: struct { Profiles []*types.Profile DTagTransferRequests []types.DTagTransferRequest @@ -253,6 +254,7 @@ func (suite *KeeperTestSuite) Test_InitGenesis() { []types.UserBlock{}, types.DefaultParams(), "profiles-port-id", + nil, ), expErr: true, }, @@ -267,6 +269,7 @@ func (suite *KeeperTestSuite) Test_InitGenesis() { }, types.DefaultParams(), "profiles-port-id", + nil, ), expErr: true, }, @@ -281,6 +284,7 @@ func (suite *KeeperTestSuite) Test_InitGenesis() { []types.UserBlock{}, types.DefaultParams(), "profiles-port-id", + nil, ), expErr: true, }, @@ -328,6 +332,7 @@ func (suite *KeeperTestSuite) Test_InitGenesis() { sdk.NewInt(1000), ), "profiles-port-id", + nil, ), expState: struct { Profiles []*types.Profile diff --git a/x/profiles/keeper/grpc_query.go b/x/profiles/keeper/grpc_query.go index 5fa7f0ac59..9b79498625 100644 --- a/x/profiles/keeper/grpc_query.go +++ b/x/profiles/keeper/grpc_query.go @@ -140,3 +140,32 @@ func (k Keeper) ProfileByChainLink(ctx context.Context, request *types.QueryProf return &types.QueryProfileByChainLinkResponse{Profile: profileAny}, nil } + +// UserApplicationLinks implements the Query/UserApplicationLinks gRPC method +func (k Keeper) UserApplicationLinks(ctx context.Context, request *types.QueryUserApplicationLinksRequest) (*types.QueryUserApplicationLinksResponse, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + var links []types.ApplicationLink + + // Get user links prefix store + store := sdkCtx.KVStore(k.storeKey) + linksStore := prefix.NewStore(store, types.UserApplicationLinksPrefix(request.User)) + + // Get paginated user links + pageRes, err := query.FilteredPaginate(linksStore, request.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) { + var link types.ApplicationLink + if err := k.cdc.UnmarshalBinaryBare(value, &link); err != nil { + return false, status.Error(codes.Internal, err.Error()) + } + + if accumulate { + links = append(links, link) + } + return true, nil + }) + + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryUserApplicationLinksResponse{Links: links, Pagination: pageRes}, nil +} diff --git a/x/profiles/keeper/keeper.go b/x/profiles/keeper/keeper.go index 969a34e1f6..30773c10db 100644 --- a/x/profiles/keeper/keeper.go +++ b/x/profiles/keeper/keeper.go @@ -130,7 +130,7 @@ func (k Keeper) RemoveProfile(ctx sdk.Context, address string) error { } // Get all keys of chains links - linkKeys := [][]byte{} + var linkKeys = make([][]byte, len(profile.ChainsLinks)) for _, link := range profile.ChainsLinks { addrData, err := types.UnpackAddressData(k.cdc, link.Address) if err != nil { diff --git a/x/profiles/keeper/keeper_app_links.go b/x/profiles/keeper/keeper_app_links.go new file mode 100644 index 0000000000..4ab7f5d8d2 --- /dev/null +++ b/x/profiles/keeper/keeper_app_links.go @@ -0,0 +1,118 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/desmos-labs/desmos/x/profiles/types" +) + +// Connections are stored in two ways: +// 1. ApplicationLinkKey -> types.ApplicationLink +// 2. ClientID -> types.ClientRequest +// +// This allows to get connections by client id quickly + +// SaveApplicationLink stores the given connection replacing any existing one for the same user and application +func (k Keeper) SaveApplicationLink(ctx sdk.Context, user string, link types.ApplicationLink) error { + _, found, err := k.GetProfile(ctx, user) + if err != nil { + return err + } + + if !found { + return sdkerrors.Wrapf(types.ErrProfileNotFound, "a profile is required to link an application") + } + + store := ctx.KVStore(k.storeKey) + + // Store the link + linkBz, err := k.cdc.MarshalBinaryBare(&link) + if err != nil { + return err + } + store.Set(types.ApplicationLinkKey(user, link.Data.Application, link.Data.Username), linkBz) + + // Store the client request + clientRequest := types.NewClientRequest(user, link.Data.Application, link.Data.Username) + requestBz, err := k.cdc.MarshalBinaryBare(&clientRequest) + if err != nil { + return err + } + store.Set(types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID), requestBz) + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypesApplicationLinkSaved, + sdk.NewAttribute(types.AttributeKeyUser, user), + sdk.NewAttribute(types.AttributeKeyApplicationName, link.Data.Application), + sdk.NewAttribute(types.AttributeKeyApplicationUsername, link.Data.Username), + ), + ) + + return nil +} + +// GetApplicationLink returns the link for the given user, application and username. +// If the link is not found returns an error instead +func (k Keeper) GetApplicationLink(ctx sdk.Context, user, application, username string) (types.ApplicationLink, error) { + store := ctx.KVStore(k.storeKey) + + linkKey := types.ApplicationLinkKey(user, application, username) + if !store.Has(linkKey) { + return types.ApplicationLink{}, sdkerrors.Wrap(sdkerrors.ErrNotFound, "link not found") + } + + var link types.ApplicationLink + err := k.cdc.UnmarshalBinaryBare(store.Get(linkKey), &link) + if err != nil { + return types.ApplicationLink{}, err + } + + return link, nil +} + +// GetApplicationLinkByClientID returns the application link and user given a specific client id +func (k Keeper) GetApplicationLinkByClientID(ctx sdk.Context, clientID string) (string, types.ApplicationLink, error) { + store := ctx.KVStore(k.storeKey) + + // Get the client request using the client id + clientIDKey := types.ApplicationLinkClientIDKey(clientID) + if !store.Has(clientIDKey) { + return "", types.ApplicationLink{}, + sdkerrors.Wrapf(sdkerrors.ErrNotFound, "link for client id %s not found", clientID) + } + + var clientRequest types.ClientRequest + err := k.cdc.UnmarshalBinaryBare(clientIDKey, &clientRequest) + if err != nil { + return "", types.ApplicationLink{}, err + } + + link, err := k.GetApplicationLink(ctx, clientRequest.User, clientRequest.Application, clientRequest.Username) + if err != nil { + return "", types.ApplicationLink{}, err + } + + return clientRequest.User, link, nil +} + +// DeleteApplicationLink removes the application link associated to the given user, +// for the given application and username +func (k Keeper) DeleteApplicationLink(ctx sdk.Context, user string, application, username string) error { + store := ctx.KVStore(k.storeKey) + + // Get the link to obtain the client id + link, err := k.GetApplicationLink(ctx, user, application, username) + if err != nil { + return err + } + + // Delete the client request + store.Delete(types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID)) + + // Delete the link object + store.Delete(types.ApplicationLinkKey(user, application, username)) + + return nil +} diff --git a/x/profiles/keeper/keeper_ibc.go b/x/profiles/keeper/keeper_ibc.go index c9ceff072d..9bb4f31ba7 100644 --- a/x/profiles/keeper/keeper_ibc.go +++ b/x/profiles/keeper/keeper_ibc.go @@ -6,10 +6,16 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + "github.com/tendermint/tendermint/libs/log" "github.com/desmos-labs/desmos/x/profiles/types" ) +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", "x/"+host.ModuleName+"-"+types.ModuleName) +} + // ChanCloseInit defines a wrapper function for the channel Keeper's function func (k Keeper) ChanCloseInit(ctx sdk.Context, portID, channelID string) error { capName := host.ChannelCapabilityPath(portID, channelID) diff --git a/x/profiles/keeper/msg_server_app_link.go b/x/profiles/keeper/msg_server_app_link.go new file mode 100644 index 0000000000..bed5133802 --- /dev/null +++ b/x/profiles/keeper/msg_server_app_link.go @@ -0,0 +1,79 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/desmos-labs/desmos/x/profiles/types" +) + +// LinkApplication defines a rpc handler method for MsgLinkApplication. +func (k Keeper) LinkApplication( + goCtx context.Context, msg *types.MsgLinkApplication, +) (*types.MsgLinkApplicationResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + user, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, err + } + + if err := k.StartProfileConnection( + ctx, msg.LinkData, msg.CallData, user, + msg.SourcePort, msg.SourceChannel, msg.TimeoutHeight, msg.TimeoutTimestamp, + ); err != nil { + return nil, err + } + + k.Logger(ctx).Info("Application link created", + "application", msg.LinkData.Application, + "username", msg.LinkData.Username, + "account", msg.Sender) + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypesApplicationLinkCreated, + sdk.NewAttribute(types.AttributeKeyUser, msg.Sender), + sdk.NewAttribute(types.AttributeKeyApplicationName, msg.LinkData.Application), + sdk.NewAttribute(types.AttributeKeyApplicationUsername, msg.LinkData.Username), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + ), + }) + + return &types.MsgLinkApplicationResponse{}, nil +} + +func (k msgServer) UnlinkApplication( + goCtx context.Context, msg *types.MsgUnlinkApplication, +) (*types.MsgUnlinkApplicationResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + err := k.DeleteApplicationLink(ctx, msg.Signer, msg.Application, msg.Username) + if err != nil { + return nil, err + } + + k.Logger(ctx).Info("Application link removed", + "application", msg.Application, + "username", msg.Username, + "account", msg.Signer) + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeApplicationLinkDeleted, + sdk.NewAttribute(types.AttributeKeyUser, msg.Signer), + sdk.NewAttribute(types.AttributeKeyApplicationName, msg.Application), + sdk.NewAttribute(types.AttributeKeyApplicationUsername, msg.Username), + ), + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + ), + }) + + return &types.MsgUnlinkApplicationResponse{}, nil +} diff --git a/x/profiles/keeper/msgs_server_profile.go b/x/profiles/keeper/msgs_server_profile.go index 18fa2b7ab7..7e5ad071c6 100644 --- a/x/profiles/keeper/msgs_server_profile.go +++ b/x/profiles/keeper/msgs_server_profile.go @@ -10,6 +10,8 @@ import ( "github.com/desmos-labs/desmos/x/profiles/types" ) +var _ types.MsgServer = &msgServer{} + type msgServer struct { Keeper } diff --git a/x/profiles/keeper/relay_app_links.go b/x/profiles/keeper/relay_app_links.go new file mode 100644 index 0000000000..b964ee434a --- /dev/null +++ b/x/profiles/keeper/relay_app_links.go @@ -0,0 +1,267 @@ +package keeper + +import ( + "encoding/hex" + "fmt" + "strings" + + "github.com/armon/go-metrics" + "github.com/bandprotocol/chain/pkg/obi" + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" + + "github.com/desmos-labs/desmos/x/profiles/types" + + oracletypes "github.com/bandprotocol/chain/x/oracle/types" +) + +// TODO: Make the following parameter +const ( + // OracleScriptID represents the oracle script to be called on Band Protocol + OracleScriptID = oracletypes.OracleScriptID(32) + + OracleAskCount = 10 + OracleMinCount = 6 + OraclePrepareGas = 50_000 + OracleExecuteGas = 200_000 + + FeePayer = "desmos-ibc-profiles" +) + +var ( + FeeCoins = sdk.NewCoins(sdk.NewCoin("band", sdk.NewInt(0))) +) + +// oracleScriptCallData represents the data that should be OBI-encoded and sent to perform an oracle request +type oracleScriptCallData struct { + Application string `obi:"application"` + CallData string `obi:"call_data"` +} + +// resultData represents the data that is returned by the oracle script +type resultData struct { + Signature string `obi:"signature"` + Value string `obi:"value"` +} + +// StartProfileConnection creates and sends an IBC packet containing the proper data allowing to call +// the Band Protocol oracle script so that the sender account can be verified using the given verification data. +// nolint:interfacer +func (k Keeper) StartProfileConnection( + ctx sdk.Context, + applicationData types.Data, + oracleRequestCallData types.OracleRequest_CallData, + sender sdk.AccAddress, + sourcePort, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, +) error { + sourceChannelEnd, found := k.channelKeeper.GetChannel(ctx, sourcePort, sourceChannel) + if !found { + return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", sourcePort, sourceChannel) + } + + destinationPort := sourceChannelEnd.GetCounterparty().GetPortID() + destinationChannel := sourceChannelEnd.GetCounterparty().GetChannelID() + + // Get the next sequence + sequence, found := k.channelKeeper.GetNextSequenceSend(ctx, sourcePort, sourceChannel) + if !found { + return sdkerrors.Wrapf( + channeltypes.ErrSequenceSendNotFound, + "source port: %s, source channel: %s", sourcePort, sourceChannel, + ) + } + + // Begin createOutgoingPacket logic + channelCap, ok := k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(sourcePort, sourceChannel)) + if !ok { + return sdkerrors.Wrap(channeltypes.ErrChannelCapabilityNotFound, "module does not own channel capability") + } + + // Create the call data to be used + data := oracleScriptCallData{ + Application: oracleRequestCallData.Application, + CallData: oracleRequestCallData.CallData, + } + + // Serialize the call data using the OBI encoding + callDataBz, err := obi.Encode(data) + if err != nil { + return err + } + + // Create the Oracle request packet data + clientID := sender.String() + "-" + applicationData.Application + "-" + applicationData.Username + packetData := oracletypes.NewOracleRequestPacketData( + clientID, + OracleScriptID, + callDataBz, + OracleAskCount, + OracleMinCount, + FeeCoins, + FeePayer, + OraclePrepareGas, + OracleExecuteGas, + ) + + // Create the IBC packet + packet := channeltypes.NewPacket( + packetData.GetBytes(), + sequence, + sourcePort, + sourceChannel, + destinationPort, + destinationChannel, + timeoutHeight, + timeoutTimestamp, + ) + + // Send the IBC packet + err = k.channelKeeper.SendPacket(ctx, channelCap, packet) + if err != nil { + return err + } + + // Store the connection + err = k.SaveApplicationLink(ctx, sender.String(), types.NewApplicationLink( + applicationData, + types.ApplicationLinkStateInitialized, + types.NewOracleRequest(-1, int64(OracleScriptID), oracleRequestCallData, clientID), + nil, + ctx.BlockTime(), + )) + if err != nil { + return err + } + + labels := []metrics.Label{ + telemetry.NewLabel("destination-port", destinationPort), + telemetry.NewLabel("destination-channel", destinationChannel), + } + + defer func() { + telemetry.IncrCounterWithLabels( + []string{"ibc", types.ModuleName, "connect-profile"}, + 1, + labels, + ) + }() + + return nil +} + +func (k Keeper) OnRecvApplicationLinkPacketData( + ctx sdk.Context, + data oracletypes.OracleResponsePacketData, +) error { + // Get the request by the client ID + user, link, err := k.GetApplicationLinkByClientID(ctx, data.ClientID) + if err != nil { + return err + } + + switch data.ResolveStatus { + case oracletypes.RESOLVE_STATUS_EXPIRED: + link.State = types.AppLinkStateVerificationError + link.Result = types.NewErrorResult(types.ErrRequestExpired) + + case oracletypes.RESOLVE_STATUS_FAILURE: + link.State = types.AppLinkStateVerificationError + link.Result = types.NewErrorResult(types.ErrRequestFailed) + + case oracletypes.RESOLVE_STATUS_SUCCESS: + var result resultData + err = obi.Decode(data.Result, &result) + if err != nil { + return fmt.Errorf("error while decoding request result: %s", err) + } + + // Verify the application username to make sure it's the same that is returned (avoid replay attacks) + if strings.EqualFold(result.Value, link.Data.Username) { + link.State = types.AppLinkStateVerificationError + link.Result = types.NewErrorResult(types.ErrInvalidAppUsername) + return k.SaveApplicationLink(ctx, user, link) + } + + // Verify the signature to make sure it's from the same user (avoid identity theft) + addr, err := sdk.AccAddressFromBech32(user) + if err != nil { + return err + } + acc := k.ak.GetAccount(ctx, addr) + + sigBz, err := hex.DecodeString(result.Signature) + if err != nil { + return err + } + + if !acc.GetPubKey().VerifySignature([]byte(result.Value), sigBz) { + link.State = types.AppLinkStateVerificationError + link.Result = types.NewErrorResult(types.ErrInvalidSignature) + return k.SaveApplicationLink(ctx, user, link) + } + + link.State = types.AppLinkStateVerificationSuccess + link.Result = types.NewSuccessResult(result.Value, result.Signature) + } + + return k.SaveApplicationLink(ctx, user, link) +} + +func (k Keeper) OnOracleRequestAcknowledgementPacket( + ctx sdk.Context, + data oracletypes.OracleRequestPacketData, + ack channeltypes.Acknowledgement, +) error { + // Get the request by the client ID + user, link, err := k.GetApplicationLinkByClientID(ctx, data.ClientID) + if err != nil { + return err + } + + switch res := ack.Response.(type) { + case *channeltypes.Acknowledgement_Error: + // The acknowledgment failed on the receiving chain. + // Update the state to ERROR and the result to an error one + link.State = types.AppLinkStateVerificationError + link.Result = types.NewErrorResult(res.Error) + + case *channeltypes.Acknowledgement_Result: + // The acknowledgement succeeded on the receiving chain + // Set the state to STARTED + link.State = types.AppLinkStateVerificationStarted + + var packetAck oracletypes.OracleRequestPacketAcknowledgement + err = oracletypes.ModuleCdc.UnmarshalJSON(res.Result, &packetAck) + if err != nil { + return fmt.Errorf("cannot unmarshal oracle request packet acknowledgment: %s", err) + } + + // Set the oracle request ID returned from BAND + link.OracleRequest.ID = int64(packetAck.RequestID) + + } + + return k.SaveApplicationLink(ctx, user, link) +} + +func (k Keeper) OnOracleRequestTimeoutPacket( + ctx sdk.Context, + data oracletypes.OracleRequestPacketData, +) error { + // Get the request by the client ID + user, connection, err := k.GetApplicationLinkByClientID(ctx, data.ClientID) + if err != nil { + return err + } + + connection.State = types.AppLinkStateVerificationTimedOut + + return k.SaveApplicationLink(ctx, user, connection) +} diff --git a/x/profiles/keeper/relay_app_links_test.go b/x/profiles/keeper/relay_app_links_test.go new file mode 100644 index 0000000000..6fe150a575 --- /dev/null +++ b/x/profiles/keeper/relay_app_links_test.go @@ -0,0 +1,193 @@ +package keeper_test + +import ( + "encoding/base64" + "time" + + oracletypes "github.com/bandprotocol/chain/x/oracle/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/desmos-labs/desmos/x/profiles/types" +) + +func createResponsePacketData( + clientID string, requestID int64, status oracletypes.ResolveStatus, result []byte, +) oracletypes.OracleResponsePacketData { + return oracletypes.OracleResponsePacketData{ + ClientID: clientID, + RequestID: oracletypes.RequestID(requestID), + AnsCount: 1, + RequestTime: 1, + ResolveTime: 1, + ResolveStatus: status, + Result: result, + } +} + +func (suite *KeeperTestSuite) Test_OnRecvApplicationLinkPacketData() { + resultBz, err := base64.StdEncoding.DecodeString("AAAAAIBhMDBhN2Q1YmQ0NWU0MjYxNTY0NWZjYWViNGQ4MDBhZjIyNzA0ZTU0OTM3YWIyMzVlNWU1MGJlYmQzOGU4OGI3NjVmZGI2OTZjMjI3MTJjMGNhYjExNzY3NTZiNjM0NmNiYzExNDgxYzU0NGQxZjc4MjhjYjIzMzYyMGMwNjE3MwAAAAxyaWNtb250YWduaW4=") + suite.Require().NoError(err) + + tests := []struct { + name string + store func(sdk.Context) + data oracletypes.OracleResponsePacketData + shouldErr bool + expLink types.ApplicationLink + }{ + { + name: "Non existing connection returns error", + data: createResponsePacketData( + "client_id", + -1, + oracletypes.RESOLVE_STATUS_SUCCESS, + []byte{}, + ), + shouldErr: true, + }, + { + name: "Resolve status expired updates connection properly", + store: func(context sdk.Context) { + link := types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationStarted, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + nil, + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ) + + err := suite.k.SaveApplicationLink(suite.ctx, "user", link) + suite.Require().NoError(err) + }, + data: createResponsePacketData( + "client_id", + 1, + oracletypes.RESOLVE_STATUS_EXPIRED, + nil, + ), + shouldErr: false, + expLink: types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationError, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + types.NewErrorResult(types.ErrRequestExpired), + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ), + }, + { + + name: "Resolve status failure updates connection properly", + store: func(context sdk.Context) { + link := types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationStarted, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + nil, + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ) + + err := suite.k.SaveApplicationLink(suite.ctx, "user", link) + suite.Require().NoError(err) + }, + data: createResponsePacketData( + "client_id", + 1, + oracletypes.RESOLVE_STATUS_FAILURE, + nil, + ), + shouldErr: false, + expLink: types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationError, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + types.NewErrorResult(types.ErrRequestFailed), + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ), + }, + { + + name: "Resolve status success updates connection properly", + store: func(context sdk.Context) { + link := types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationStarted, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + nil, + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ) + + err := suite.k.SaveApplicationLink(suite.ctx, "user", link) + suite.Require().NoError(err) + }, + data: createResponsePacketData( + "client_id", + 1, + oracletypes.RESOLVE_STATUS_SUCCESS, + resultBz, + ), + shouldErr: false, + expLink: types.NewApplicationLink( + types.NewData("twitter", "user"), + types.AppLinkStateVerificationSuccess, + types.NewOracleRequest( + 1, + 1, + types.NewOracleRequestCallData("twitter", "tweet-123456789"), + "client_id", + ), + types.NewSuccessResult( + "ricmontagnin", + "a00a7d5bd45e42615645fcaeb4d800af22704e54937ab235e5e50bebd38e88b765fdb696c22712c0cab1176756b6346cbc11481c544d1f7828cb233620c06173", + ), + time.Date(2020, 1, 1, 00, 00, 00, 000, time.UTC), + ), + }, + } + + for _, uc := range tests { + uc := uc + suite.Run(uc.name, func() { + suite.SetupTest() + if uc.store != nil { + uc.store(suite.ctx) + } + + err := suite.k.OnRecvApplicationLinkPacketData(suite.ctx, uc.data) + + if uc.shouldErr { + suite.Require().Error(err) + } else { + suite.Require().NoError(err) + + _, stored, err := suite.k.GetApplicationLinkByClientID(suite.ctx, uc.expLink.OracleRequest.ClientID) + suite.Require().NoError(err) + suite.Require().True(stored.Equal(uc.expLink)) + } + }) + } +} diff --git a/x/profiles/module_ibc.go b/x/profiles/module_ibc.go index 2656cb2c2f..a0149c3634 100644 --- a/x/profiles/module_ibc.go +++ b/x/profiles/module_ibc.go @@ -4,6 +4,8 @@ import ( "fmt" "math" + oracletypes "github.com/bandprotocol/chain/x/oracle/types" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" @@ -15,6 +17,44 @@ import ( "github.com/desmos-labs/desmos/x/profiles/types" ) +// ValidateProfilesChannelParams does validation of a newly created profiles channel. A profiles +// channel must be UNORDERED, use the correct port (by default 'profiles'), and use the current +// supported version. Only 2^32 channels are allowed to be created. +func ValidateProfilesChannelParams( + ctx sdk.Context, + keeper keeper.Keeper, + order channeltypes.Order, + portID string, + channelID string, + version string, +) error { + // NOTE: for escrow address security only 2^32 channels are allowed to be created + // Issue: https://github.com/cosmos/cosmos-sdk/issues/7737 + channelSequence, err := channeltypes.ParseChannelSequence(channelID) + if err != nil { + return err + } + if channelSequence > uint64(math.MaxUint32) { + return sdkerrors.Wrapf(types.ErrMaxProfilesChannels, "channel sequence %d is greater than max allowed profiles channels %d", channelSequence, uint64(math.MaxUint32)) + } + if order != channeltypes.UNORDERED { + return sdkerrors.Wrapf(channeltypes.ErrInvalidChannelOrdering, "expected %s channel, got %s ", channeltypes.UNORDERED, order) + } + + // Require portID is the portID profiles module is bound to + boundPort := keeper.GetPort(ctx) + if boundPort != portID { + return sdkerrors.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + } + + if version != types.IBCVersion { + return sdkerrors.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.IBCVersion) + } + return nil +} + +// ------------------------------------------------------------------------------------------------------------------- + // OnChanOpenInit implements the IBCModule interface func (am AppModule) OnChanOpenInit( ctx sdk.Context, @@ -114,32 +154,82 @@ func (am AppModule) OnChanCloseConfirm( return nil } +// ------------------------------------------------------------------------------------------------------------------- + // OnRecvPacket implements the IBCModule interface func (am AppModule) OnRecvPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + packet channeltypes.Packet, ) (*sdk.Result, []byte, error) { - var packetData types.LinkChainAccountPacketData - if err := types.ProtoCdc.UnmarshalJSON(modulePacket.GetData(), &packetData); err != nil { - return nil, nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal packet data: %s", err.Error()) + var ack channeltypes.Acknowledgement + var err error + + // Try handling the chain link packet data + ack, err = am.HandlePacket(ctx, packet, handleOracleRequestPacketData, handleLinkChainAccountPacketData) + if err != nil { + return nil, nil, err + } + + // Encode acknowledgement + ackBytes, err := sdk.SortJSON(types.ModuleCdc.MustMarshalJSON(&ack)) + if err != nil { + return nil, []byte{}, sdkerrors.Wrap(sdkerrors.ErrInvalidType, err.Error()) } + + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + return &sdk.Result{ + Events: ctx.EventManager().Events().ToABCIEvents(), + }, ackBytes, nil +} + +// PacketHandler represents a method that tries handling a packet, and returns types.ErrInvalidPacketData +// if it cannot handle the contained data +type PacketHandler = func(am AppModule, ctx sdk.Context, packet channeltypes.Packet) (channeltypes.Acknowledgement, error) + +// HandlePacket handles the given packet by passing it to the provided packet handlers one by one until either one can +// handle it, or they all return with types.ErrInvalidPacketData. +func (am AppModule) HandlePacket( + ctx sdk.Context, packet channeltypes.Packet, packetHandlers ...PacketHandler, +) (channeltypes.Acknowledgement, error) { var ack channeltypes.Acknowledgement + var err error + for _, handler := range packetHandlers { + ack, err = handler(am, ctx, packet) + if types.ErrInvalidPacketData.Is(err) { + continue + } + } + return ack, err +} + +// handleLinkChainAccountPacketData tries handling athe given packet by deserializing the inner data +// as a LinkChainAccountPacketData instance. +// Returns ErrInvalidPacketData if the given packet data is not of such type. +func handleLinkChainAccountPacketData( + am AppModule, ctx sdk.Context, packet channeltypes.Packet, +) (channeltypes.Acknowledgement, error) { + var packetData types.LinkChainAccountPacketData + if err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &packetData); err != nil { + return channeltypes.Acknowledgement{}, sdkerrors.Wrapf(types.ErrInvalidPacketData, "%T", packet) + } + + var acknowledgement channeltypes.Acknowledgement packetAck, err := am.keeper.OnRecvLinkChainAccountPacket(ctx, packetData) if err != nil { - ack = channeltypes.NewErrorAcknowledgement(err.Error()) + acknowledgement = channeltypes.NewErrorAcknowledgement(err.Error()) } else { // Encode packet acknowledgment packetAckBytes, err := packetAck.Marshal() if err != nil { - return nil, []byte{}, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) + return channeltypes.Acknowledgement{}, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error()) } - ack = channeltypes.NewResultAcknowledgement(packetAckBytes) + acknowledgement = channeltypes.NewResultAcknowledgement(packetAckBytes) } address, err := types.UnpackAddressData(am.cdc, packetData.SourceAddress) if err != nil { - return nil, []byte{}, err + return channeltypes.Acknowledgement{}, err } ctx.EventManager().EmitEvent( @@ -149,75 +239,134 @@ func (am AppModule) OnRecvPacket( sdk.NewAttribute(types.AttributeChainLinkSourceAddress, address.GetAddress()), sdk.NewAttribute(types.AttributeChainLinkSourceChainName, packetData.SourceChainConfig.Name), sdk.NewAttribute(types.AttributeChainLinkDestinationAddress, packetData.DestinationAddress), - sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", err != nil)), + sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", true)), ), ) - // Encode acknowledgement - ackBytes, err := sdk.SortJSON(types.ProtoCdc.MustMarshalJSON(&ack)) + return acknowledgement, nil +} + +// handleOracleRequestPacketData tries handling athe given packet by deserializing the inner data +// as an OracleResponsePacketData instance. +// Returns ErrInvalidPacketData if the given packet data is not of such type. +func handleOracleRequestPacketData( + am AppModule, ctx sdk.Context, packet channeltypes.Packet, +) (channeltypes.Acknowledgement, error) { + var data oracletypes.OracleResponsePacketData + if err := oracletypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { + return channeltypes.Acknowledgement{}, sdkerrors.Wrapf(types.ErrInvalidPacketData, "%T", packet) + } + + acknowledgement := channeltypes.NewResultAcknowledgement([]byte{byte(1)}) + + err := am.keeper.OnRecvApplicationLinkPacketData(ctx, data) if err != nil { - return nil, []byte{}, sdkerrors.Wrap(sdkerrors.ErrInvalidType, err.Error()) + acknowledgement = channeltypes.NewErrorAcknowledgement(err.Error()) } + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyClientID, data.ClientID), + sdk.NewAttribute(types.AttributeKeyRequestID, fmt.Sprintf("%d", data.RequestID)), + sdk.NewAttribute(types.AttributeKeyResolveStatus, data.ResolveStatus.String()), + sdk.NewAttribute(types.AttributeKeyAckSuccess, fmt.Sprintf("%t", true)), + ), + ) + // NOTE: acknowledgement will be written synchronously during IBC handler execution. - return &sdk.Result{ - Events: ctx.EventManager().Events().ToABCIEvents(), - }, ackBytes, nil + return acknowledgement, nil } +// ------------------------------------------------------------------------------------------------------------------- + // OnAcknowledgementPacket implements the IBCModule interface func (am AppModule) OnAcknowledgementPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + packet channeltypes.Packet, acknowledgement []byte, ) (*sdk.Result, error) { + var ack channeltypes.Acknowledgement + err := types.ModuleCdc.UnmarshalJSON(acknowledgement, &ack) + if err != nil { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, + "cannot unmarshal oracle packet acknowledgement: %v", err) + } + + var data oracletypes.OracleRequestPacketData + err = oracletypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data) + if err != nil { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, + "cannot unmarshal oracle request packet data: %s", err.Error()) + } + + err = am.keeper.OnOracleRequestAcknowledgementPacket(ctx, data, ack) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyClientID, data.ClientID), + sdk.NewAttribute(types.AttributeKeyAck, fmt.Sprintf("%v", ack)), + ), + ) + + switch resp := ack.Response.(type) { + case *channeltypes.Acknowledgement_Result: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)), + ), + ) + case *channeltypes.Acknowledgement_Error: + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypePacket, + sdk.NewAttribute(types.AttributeKeyAckError, resp.Error), + ), + ) + } + return &sdk.Result{ Events: ctx.EventManager().Events().ToABCIEvents(), }, nil } +// ------------------------------------------------------------------------------------------------------------------- + // OnTimeoutPacket implements the IBCModule interface func (am AppModule) OnTimeoutPacket( ctx sdk.Context, - modulePacket channeltypes.Packet, + packet channeltypes.Packet, ) (*sdk.Result, error) { - return &sdk.Result{ - Events: ctx.EventManager().Events().ToABCIEvents(), - }, nil -} - -// ValidateProfilesChannelParams does validation of a newly created profiles channel. A profiles -// channel must be UNORDERED, use the correct port (by default 'profiles'), and use the current -// supported version. Only 2^32 channels are allowed to be created. -func ValidateProfilesChannelParams( - ctx sdk.Context, - keeper keeper.Keeper, - order channeltypes.Order, - portID string, - channelID string, - version string, -) error { - // NOTE: for escrow address security only 2^32 channels are allowed to be created - // Issue: https://github.com/cosmos/cosmos-sdk/issues/7737 - channelSequence, err := channeltypes.ParseChannelSequence(channelID) + var data oracletypes.OracleRequestPacketData + err := types.ModuleCdc.UnmarshalJSON(packet.GetData(), &data) if err != nil { - return err - } - if channelSequence > uint64(math.MaxUint32) { - return sdkerrors.Wrapf(types.ErrMaxProfilesChannels, "channel sequence %d is greater than max allowed profiles channels %d", channelSequence, uint64(math.MaxUint32)) - } - if order != channeltypes.UNORDERED { - return sdkerrors.Wrapf(channeltypes.ErrInvalidChannelOrdering, "expected %s channel, got %s ", channeltypes.UNORDERED, order) + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, + "cannot unmarshal oracle request packet data: %s", err.Error()) } - // Require portID is the portID profiles module is bound to - boundPort := keeper.GetPort(ctx) - if boundPort != portID { - return sdkerrors.Wrapf(porttypes.ErrInvalidPort, "invalid port: %s, expected %s", portID, boundPort) + err = am.keeper.OnOracleRequestTimeoutPacket(ctx, data) + if err != nil { + return nil, err } - if version != types.IBCVersion { - return sdkerrors.Wrapf(types.ErrInvalidVersion, "got %s, expected %s", version, types.IBCVersion) - } - return nil + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeTimeout, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyOracleID, fmt.Sprintf("%d", data.OracleScriptID)), + sdk.NewAttribute(types.AttributeKeyClientID, data.ClientID), + sdk.NewAttribute(types.AttributeKeyRequestKey, data.RequestKey), + ), + ) + + return &sdk.Result{ + Events: ctx.EventManager().Events().ToABCIEvents(), + }, nil } diff --git a/x/profiles/simulation/genesis.go b/x/profiles/simulation/genesis.go index c203bb929d..2be1ef01e6 100644 --- a/x/profiles/simulation/genesis.go +++ b/x/profiles/simulation/genesis.go @@ -25,6 +25,7 @@ func RandomizedGenState(simsState *module.SimulationState) { RandomBioParams(simsState.Rand), ), types.IBCPortID, + nil, ) bz, err := simsState.Cdc.MarshalJSON(profileGenesis) diff --git a/x/profiles/types/codec.go b/x/profiles/types/codec.go index abe1f62b36..4cbc27c6ee 100644 --- a/x/profiles/types/codec.go +++ b/x/profiles/types/codec.go @@ -22,6 +22,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(MsgUnblockUser{}, "desmos/MsgUnblockUser", nil) cdc.RegisterConcrete(MsgLinkChainAccount{}, "desmos/MsgLinkChainAccount", nil) cdc.RegisterConcrete(MsgUnlinkChainAccount{}, "desmos/MsgUnlinkChainAccount", nil) + cdc.RegisterConcrete(MsgLinkApplication{}, "desmos/MsgLinkApplication", nil) + cdc.RegisterConcrete(MsgUnlinkApplication{}, "desmos/MsgUnlinkApplication", nil) cdc.RegisterConcrete(&Profile{}, "desmos/Profile", nil) } @@ -49,6 +51,8 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgUnblockUser{}, &MsgLinkChainAccount{}, &MsgUnlinkChainAccount{}, + &MsgLinkApplication{}, + &MsgUnlinkApplication{}, ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) @@ -65,7 +69,7 @@ var ( // defined at the application level. AminoCdc = codec.NewAminoCodec(amino) - ProtoCdc = codec.NewProtoCodec(types.NewInterfaceRegistry()) + ModuleCdc = codec.NewProtoCodec(types.NewInterfaceRegistry()) ) func init() { diff --git a/x/profiles/types/error.go b/x/profiles/types/error.go index ed974c4181..dcf35970d4 100644 --- a/x/profiles/types/error.go +++ b/x/profiles/types/error.go @@ -12,8 +12,17 @@ var ( ErrProfileNotFound = sdkerrors.Register(ModuleName, 10, "profile not found") - ErrInvalidChainLink = sdkerrors.Register(ModuleName, 30, "invalid chain link") - ErrDuplicatedChainLink = sdkerrors.Register(ModuleName, 31, "chain link already exists") - ErrInvalidAddressData = sdkerrors.Register(ModuleName, 32, "invalid address data") - ErrInvalidProof = sdkerrors.Register(ModuleName, 33, "invalid proof") + ErrInvalidPacketData = sdkerrors.Register(ModuleName, 31, "invalid packet data type") + ErrInvalidChainLink = sdkerrors.Register(ModuleName, 35, "invalid chain link") + ErrDuplicatedChainLink = sdkerrors.Register(ModuleName, 36, "chain link already exists") + ErrInvalidAddressData = sdkerrors.Register(ModuleName, 37, "invalid address data") + ErrInvalidProof = sdkerrors.Register(ModuleName, 38, "invalid proof") +) + +const ( + ErrIBCTimeout = "ibc connection timeout" + ErrRequestExpired = "oracle request expired" + ErrRequestFailed = "oracle request failed" + ErrInvalidSignature = "invalid signature" + ErrInvalidAppUsername = "invalid application username" ) diff --git a/x/profiles/types/events.go b/x/profiles/types/events.go index 743a85b20c..d5fb1af4f1 100644 --- a/x/profiles/types/events.go +++ b/x/profiles/types/events.go @@ -42,4 +42,21 @@ const ( AttributeKeyAckSuccess = "success" EventTypeLinkChainAccountPacket = "link_chain_account_packet" + + EventTypePacket = "profiles_verification_packet" + EventTypeTimeout = "timeout" + EventTypesApplicationLinkCreated = "application_link_created" + EventTypesApplicationLinkSaved = "application_link_saved" + EventTypeApplicationLinkDeleted = "application_link_deleted" + + AttributeKeyUser = "user" + AttributeKeyApplicationName = "application_name" + AttributeKeyApplicationUsername = "application_username" + AttributeKeyOracleID = "oracle_id" + AttributeKeyClientID = "client_id" + AttributeKeyRequestID = "request_id" + AttributeKeyRequestKey = "request_key" + AttributeKeyResolveStatus = "resolve_status" + AttributeKeyAck = "acknowledgement" + AttributeKeyAckError = "error" ) diff --git a/x/profiles/types/expected_keeper.go b/x/profiles/types/expected_keeper.go index 0429568e42..cd4bdf5750 100644 --- a/x/profiles/types/expected_keeper.go +++ b/x/profiles/types/expected_keeper.go @@ -3,16 +3,29 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" + connectiontypes "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" + ibcexported "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) // ChannelKeeper defines the expected IBC channel keeper type ChannelKeeper interface { GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channeltypes.Channel, found bool) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) + SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error ChanCloseInit(ctx sdk.Context, portID, channelID string, chanCap *capabilitytypes.Capability) error } +// ClientKeeper defines the expected IBC client keeper +type ClientKeeper interface { + GetClientConsensusState(ctx sdk.Context, clientID string) (connection ibcexported.ConsensusState, found bool) +} + +// ConnectionKeeper defines the expected IBC connection keeper +type ConnectionKeeper interface { + GetConnection(ctx sdk.Context, connectionID string) (connection connectiontypes.ConnectionEnd, found bool) +} + // PortKeeper defines the expected IBC port keeper type PortKeeper interface { BindPort(ctx sdk.Context, portID string) *capabilitytypes.Capability diff --git a/x/profiles/types/genesis.go b/x/profiles/types/genesis.go index 07f84f6f31..beb8dbd807 100644 --- a/x/profiles/types/genesis.go +++ b/x/profiles/types/genesis.go @@ -8,7 +8,8 @@ import ( // NewGenesisState creates a new genesis state func NewGenesisState( - requests []DTagTransferRequest, relationships []Relationship, blocks []UserBlock, params Params, portID string, + requests []DTagTransferRequest, relationships []Relationship, blocks []UserBlock, + params Params, portID string, applicationLinks []ApplicationLinkEntry, ) *GenesisState { return &GenesisState{ Params: params, @@ -16,12 +17,13 @@ func NewGenesisState( Relationships: relationships, Blocks: blocks, IBCPortID: portID, + ApplicationLinks: applicationLinks, } } // DefaultGenesisState returns a default GenesisState func DefaultGenesisState() *GenesisState { - return NewGenesisState(nil, nil, nil, DefaultParams(), IBCPortID) + return NewGenesisState(nil, nil, nil, DefaultParams(), IBCPortID, nil) } // ValidateGenesis validates the given genesis state and returns an error if something is invalid @@ -32,7 +34,7 @@ func ValidateGenesis(data *GenesisState) error { } for _, req := range data.DTagTransferRequests { - err := req.Validate() + err = req.Validate() if err != nil { return err } @@ -43,23 +45,31 @@ func ValidateGenesis(data *GenesisState) error { return fmt.Errorf("duplicated relationship: %s", rel) } - err := rel.Validate() + err = rel.Validate() if err != nil { return err } } for _, ub := range data.Blocks { - err := ub.Validate() + err = ub.Validate() if err != nil { return err } } - if err := host.PortIdentifierValidator(data.IBCPortID); err != nil { + err = host.PortIdentifierValidator(data.IBCPortID) + if err != nil { return err } + for _, entry := range data.ApplicationLinks { + err = entry.Link.Validate() + if err != nil { + return err + } + } + return nil } @@ -73,3 +83,13 @@ func containDuplicates(relationships []Relationship, relationship Relationship) } return count > 1 } + +// -------------------------------------------------------------------------------------------------------------------- + +// NewApplicationLinkEntry allows to build a new ApplicationLinkEntry instance +func NewApplicationLinkEntry(user string, link ApplicationLink) ApplicationLinkEntry { + return ApplicationLinkEntry{ + User: user, + Link: link, + } +} diff --git a/x/profiles/types/genesis.pb.go b/x/profiles/types/genesis.pb.go index e756b05c00..524be4dfc7 100644 --- a/x/profiles/types/genesis.pb.go +++ b/x/profiles/types/genesis.pb.go @@ -25,11 +25,12 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the profiles module's genesis state. type GenesisState struct { - DTagTransferRequests []DTagTransferRequest `protobuf:"bytes,1,rep,name=dtag_transfer_requests,json=dtagTransferRequests,proto3" json:"dtag_transfer_requests" yaml:"dtag_transfer_requests"` - Relationships []Relationship `protobuf:"bytes,2,rep,name=relationships,proto3" json:"relationships" yaml:"users_relationships"` - Blocks []UserBlock `protobuf:"bytes,3,rep,name=blocks,proto3" json:"blocks" yaml:"users_blocks"` - Params Params `protobuf:"bytes,4,opt,name=params,proto3" json:"params" yaml:"params"` - IBCPortID string `protobuf:"bytes,5,opt,name=ibc_port_id,json=ibcPortId,proto3" json:"ibc_port_id,omitempty" yaml:"ibc_port_id"` + DTagTransferRequests []DTagTransferRequest `protobuf:"bytes,1,rep,name=dtag_transfer_requests,json=dtagTransferRequests,proto3" json:"dtag_transfer_requests" yaml:"dtag_transfer_requests"` + Relationships []Relationship `protobuf:"bytes,2,rep,name=relationships,proto3" json:"relationships" yaml:"users_relationships"` + Blocks []UserBlock `protobuf:"bytes,3,rep,name=blocks,proto3" json:"blocks" yaml:"users_blocks"` + Params Params `protobuf:"bytes,4,opt,name=params,proto3" json:"params" yaml:"params"` + IBCPortID string `protobuf:"bytes,5,opt,name=ibc_port_id,json=ibcPortId,proto3" json:"ibc_port_id,omitempty" yaml:"ibc_port_id"` + ApplicationLinks []ApplicationLinkEntry `protobuf:"bytes,6,rep,name=application_links,json=applicationLinks,proto3" json:"application_links"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -100,8 +101,69 @@ func (m *GenesisState) GetIBCPortID() string { return "" } +func (m *GenesisState) GetApplicationLinks() []ApplicationLinkEntry { + if m != nil { + return m.ApplicationLinks + } + return nil +} + +// AppLinkEntry represents an application link entry inside the genesis state +type ApplicationLinkEntry struct { + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Link ApplicationLink `protobuf:"bytes,2,opt,name=link,proto3" json:"link"` +} + +func (m *ApplicationLinkEntry) Reset() { *m = ApplicationLinkEntry{} } +func (m *ApplicationLinkEntry) String() string { return proto.CompactTextString(m) } +func (*ApplicationLinkEntry) ProtoMessage() {} +func (*ApplicationLinkEntry) Descriptor() ([]byte, []int) { + return fileDescriptor_24f308c1ccf2d582, []int{1} +} +func (m *ApplicationLinkEntry) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationLinkEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ApplicationLinkEntry.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ApplicationLinkEntry) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationLinkEntry.Merge(m, src) +} +func (m *ApplicationLinkEntry) XXX_Size() int { + return m.Size() +} +func (m *ApplicationLinkEntry) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationLinkEntry.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationLinkEntry proto.InternalMessageInfo + +func (m *ApplicationLinkEntry) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *ApplicationLinkEntry) GetLink() ApplicationLink { + if m != nil { + return m.Link + } + return ApplicationLink{} +} + func init() { proto.RegisterType((*GenesisState)(nil), "desmos.profiles.v1beta1.GenesisState") + proto.RegisterType((*ApplicationLinkEntry)(nil), "desmos.profiles.v1beta1.ApplicationLinkEntry") } func init() { @@ -109,35 +171,40 @@ func init() { } var fileDescriptor_24f308c1ccf2d582 = []byte{ - // 443 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x6a, 0xd4, 0x40, - 0x18, 0xc7, 0x13, 0x5b, 0x17, 0x36, 0x6b, 0x2f, 0x71, 0xd5, 0x10, 0x31, 0x59, 0x46, 0x0a, 0x0b, - 0xd6, 0x84, 0xae, 0x37, 0xc1, 0xcb, 0xb4, 0xa0, 0xbd, 0x48, 0x89, 0x15, 0xc1, 0x4b, 0x98, 0x24, - 0xd3, 0x74, 0x30, 0xd9, 0x89, 0xf3, 0xcd, 0x8a, 0x7d, 0x0b, 0x7d, 0x04, 0xdf, 0xa6, 0xc7, 0x1e, - 0x3d, 0x05, 0xc9, 0xbe, 0xc1, 0x3e, 0x81, 0x24, 0x33, 0xea, 0xb6, 0x6c, 0x58, 0x6f, 0x43, 0xe6, - 0xf7, 0xff, 0xfd, 0xbf, 0x0c, 0x9f, 0xb5, 0x9f, 0x51, 0x28, 0x39, 0x84, 0x95, 0xe0, 0xe7, 0xac, - 0xa0, 0x10, 0x7e, 0x39, 0x4c, 0xa8, 0x24, 0x87, 0x61, 0x4e, 0xe7, 0x14, 0x18, 0x04, 0x95, 0xe0, - 0x92, 0xdb, 0x8f, 0x14, 0x16, 0xfc, 0xc1, 0x02, 0x8d, 0xb9, 0xe3, 0x9c, 0xe7, 0xbc, 0x63, 0xc2, - 0xf6, 0xa4, 0x70, 0xf7, 0x59, 0x9f, 0xb5, 0xe4, 0x19, 0x2d, 0x20, 0xae, 0x88, 0x20, 0xa5, 0x76, - 0xbb, 0x07, 0xdb, 0x60, 0xf5, 0x5d, 0xd3, 0xb3, 0x2d, 0xb4, 0xa0, 0x05, 0x91, 0x8c, 0xcf, 0xe1, - 0x82, 0x55, 0xf0, 0x9f, 0x99, 0x4c, 0x92, 0x3c, 0x16, 0xf4, 0xf3, 0x82, 0x82, 0xd4, 0x19, 0xf4, - 0x7d, 0xd7, 0xba, 0xf7, 0x5a, 0xbd, 0xc1, 0x3b, 0x49, 0x24, 0xb5, 0x7f, 0x98, 0xd6, 0xc3, 0x0e, - 0x94, 0x82, 0xcc, 0xe1, 0x9c, 0x8a, 0xbf, 0x09, 0xc7, 0x9c, 0xec, 0x4c, 0x47, 0xb3, 0x83, 0xa0, - 0xe7, 0x91, 0x82, 0xe3, 0x33, 0x92, 0x9f, 0xe9, 0x54, 0xa4, 0x42, 0xf8, 0xd5, 0x55, 0xed, 0x1b, - 0x4d, 0xed, 0x8f, 0x37, 0x5c, 0xc2, 0xaa, 0xf6, 0x9f, 0x5c, 0x92, 0xb2, 0x78, 0x89, 0x36, 0x37, - 0xa2, 0x68, 0xdc, 0x5e, 0xdc, 0x8e, 0xd9, 0xdc, 0xda, 0xbb, 0xf1, 0xff, 0xce, 0x9d, 0x6e, 0xb2, - 0xfd, 0xde, 0xc9, 0xa2, 0x35, 0x1a, 0xa3, 0x76, 0xa4, 0x55, 0xed, 0xbb, 0xaa, 0x7a, 0x01, 0x54, - 0xdc, 0x7a, 0x4f, 0x14, 0xdd, 0xf4, 0xdb, 0x1f, 0xac, 0x41, 0x52, 0xf0, 0xf4, 0x13, 0x38, 0x3b, - 0x5d, 0x13, 0xea, 0x6d, 0x7a, 0x0f, 0x54, 0xe0, 0x16, 0xc5, 0x8f, 0x75, 0xcd, 0xfd, 0xf5, 0x1a, - 0x65, 0x41, 0x91, 0xd6, 0xd9, 0x6f, 0xad, 0x81, 0x5a, 0x12, 0x67, 0x77, 0x62, 0x4e, 0x47, 0x33, - 0xbf, 0x57, 0x7c, 0xda, 0x61, 0xf8, 0x81, 0xb6, 0xee, 0x29, 0xab, 0x0a, 0xa3, 0x48, 0x5b, 0xec, - 0x23, 0x6b, 0xc4, 0x92, 0x34, 0xae, 0xb8, 0x90, 0x31, 0xcb, 0x9c, 0xbb, 0x13, 0x73, 0x3a, 0xc4, - 0x4f, 0x9b, 0xda, 0x1f, 0x9e, 0xe0, 0xa3, 0x53, 0x2e, 0xe4, 0xc9, 0xf1, 0xaa, 0xf6, 0x6d, 0x15, - 0x5e, 0x23, 0x51, 0x34, 0x64, 0x49, 0xda, 0x01, 0x19, 0x7e, 0x73, 0xd5, 0x78, 0xe6, 0x75, 0xe3, - 0x99, 0xbf, 0x1a, 0xcf, 0xfc, 0xb6, 0xf4, 0x8c, 0xeb, 0xa5, 0x67, 0xfc, 0x5c, 0x7a, 0xc6, 0xc7, - 0x20, 0x67, 0xf2, 0x62, 0x91, 0x04, 0x29, 0x2f, 0x43, 0x35, 0xe8, 0xf3, 0x82, 0x24, 0xa0, 0xcf, - 0xe1, 0xd7, 0x7f, 0xab, 0x27, 0x2f, 0x2b, 0x0a, 0xc9, 0xa0, 0x5b, 0xb2, 0x17, 0xbf, 0x03, 0x00, - 0x00, 0xff, 0xff, 0xaa, 0xdf, 0xb4, 0x2b, 0x7f, 0x03, 0x00, 0x00, + // 524 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6e, 0xd3, 0x30, + 0x00, 0xc6, 0x9b, 0xad, 0x54, 0xaa, 0xcb, 0x24, 0x30, 0x05, 0xa2, 0x22, 0x92, 0x2a, 0x68, 0x52, + 0x25, 0xb6, 0x44, 0x2b, 0x37, 0x24, 0x0e, 0x64, 0x43, 0x30, 0x09, 0xa1, 0x29, 0x0c, 0x21, 0x71, + 0x29, 0x4e, 0xeb, 0x65, 0x56, 0xd3, 0xd8, 0xd8, 0x2e, 0xa2, 0x6f, 0xc1, 0x2b, 0xf0, 0x36, 0x3b, + 0xee, 0xc8, 0x29, 0x42, 0xe9, 0x1b, 0x94, 0x17, 0x40, 0xb1, 0x3d, 0xd6, 0x4e, 0x8d, 0xba, 0x9b, + 0x55, 0xff, 0xbe, 0x3f, 0xfd, 0x14, 0x83, 0xdd, 0x11, 0x16, 0x13, 0x2a, 0x02, 0xc6, 0xe9, 0x19, + 0x49, 0xb1, 0x08, 0xbe, 0x1f, 0xc4, 0x58, 0xa2, 0x83, 0x20, 0xc1, 0x19, 0x16, 0x44, 0xf8, 0x8c, + 0x53, 0x49, 0xe1, 0x63, 0x8d, 0xf9, 0x57, 0x98, 0x6f, 0xb0, 0x4e, 0x3b, 0xa1, 0x09, 0x55, 0x4c, + 0x50, 0x9e, 0x34, 0xde, 0x79, 0x5e, 0xe5, 0x3a, 0xa1, 0x23, 0x9c, 0x8a, 0x01, 0x43, 0x1c, 0x4d, + 0x8c, 0x77, 0x67, 0x6f, 0x13, 0xac, 0x7f, 0x37, 0x74, 0x7f, 0x03, 0xcd, 0x71, 0x8a, 0x24, 0xa1, + 0x99, 0x38, 0x27, 0x4c, 0xdc, 0x52, 0x33, 0x92, 0x28, 0x19, 0x70, 0xfc, 0x6d, 0x8a, 0x85, 0xbc, + 0xd2, 0xf8, 0x1b, 0x34, 0x88, 0xb1, 0x41, 0x4a, 0xb2, 0xb1, 0xe1, 0xbd, 0xbf, 0x75, 0x70, 0xf7, + 0xad, 0xde, 0xec, 0xa3, 0x44, 0x12, 0xc3, 0x5f, 0x16, 0x78, 0xa4, 0x8c, 0x25, 0x47, 0x99, 0x38, + 0xc3, 0xfc, 0x7f, 0x82, 0x6d, 0x75, 0xb7, 0x7b, 0xad, 0xfe, 0x9e, 0x5f, 0x31, 0xaa, 0x7f, 0x74, + 0x8a, 0x92, 0x53, 0xa3, 0x8a, 0xb4, 0x28, 0x7c, 0x75, 0x91, 0xbb, 0xb5, 0x22, 0x77, 0xdb, 0x6b, + 0x2e, 0xc5, 0x22, 0x77, 0x9f, 0xce, 0xd0, 0x24, 0x7d, 0xe9, 0xad, 0x4f, 0xf4, 0xa2, 0x76, 0x79, + 0x71, 0x53, 0x06, 0x29, 0xd8, 0x59, 0xd9, 0xcb, 0xde, 0x52, 0xcd, 0x76, 0x2b, 0x9b, 0x45, 0x4b, + 0x74, 0xe8, 0x95, 0x95, 0x16, 0xb9, 0xdb, 0xd1, 0xd1, 0x53, 0x81, 0xf9, 0x8d, 0xfd, 0xbd, 0x68, + 0xd5, 0x1f, 0x7e, 0x06, 0x8d, 0x38, 0xa5, 0xc3, 0xb1, 0xb0, 0xb7, 0x55, 0x92, 0x57, 0x99, 0xf4, + 0x49, 0x60, 0x1e, 0x96, 0x68, 0xf8, 0xc4, 0xc4, 0x3c, 0x58, 0x8e, 0xd1, 0x2e, 0x5e, 0x64, 0xec, + 0xe0, 0x07, 0xd0, 0xd0, 0x1f, 0x95, 0x5d, 0xef, 0x5a, 0xbd, 0x56, 0xdf, 0xad, 0x34, 0x3e, 0x51, + 0x58, 0xf8, 0xd0, 0xb8, 0xee, 0x68, 0x57, 0x2d, 0xf6, 0x22, 0xe3, 0x02, 0x0f, 0x41, 0x8b, 0xc4, + 0xc3, 0x01, 0xa3, 0x5c, 0x0e, 0xc8, 0xc8, 0xbe, 0xd3, 0xb5, 0x7a, 0xcd, 0xf0, 0x59, 0x91, 0xbb, + 0xcd, 0xe3, 0xf0, 0xf0, 0x84, 0x72, 0x79, 0x7c, 0xb4, 0xc8, 0x5d, 0xa8, 0xc5, 0x4b, 0xa4, 0x17, + 0x35, 0x49, 0x3c, 0x54, 0xc0, 0x08, 0x7e, 0x05, 0xf7, 0x11, 0x63, 0x29, 0x19, 0xaa, 0x05, 0xf4, + 0xe7, 0x62, 0x37, 0xd4, 0x1f, 0xdf, 0xaf, 0xec, 0xf7, 0xfa, 0x5a, 0xf1, 0x9e, 0x64, 0xe3, 0x37, + 0x99, 0xe4, 0xb3, 0xb0, 0x5e, 0xb6, 0x8d, 0xee, 0xa1, 0xd5, 0x3b, 0xe1, 0x65, 0xa0, 0xbd, 0x8e, + 0x87, 0x10, 0xd4, 0xcb, 0x9d, 0x6c, 0xab, 0xec, 0x1d, 0xa9, 0x33, 0x0c, 0x41, 0xbd, 0x6c, 0x60, + 0x6f, 0xa9, 0x81, 0x7a, 0xb7, 0x2d, 0x60, 0xb2, 0x95, 0x36, 0x7c, 0x77, 0x51, 0x38, 0xd6, 0x65, + 0xe1, 0x58, 0x7f, 0x0a, 0xc7, 0xfa, 0x39, 0x77, 0x6a, 0x97, 0x73, 0xa7, 0xf6, 0x7b, 0xee, 0xd4, + 0xbe, 0xf8, 0x09, 0x91, 0xe7, 0xd3, 0xd8, 0x1f, 0xd2, 0x49, 0xa0, 0x9d, 0xf7, 0x53, 0x14, 0x0b, + 0x73, 0x0e, 0x7e, 0x5c, 0x3f, 0x24, 0x39, 0x63, 0x58, 0xc4, 0x0d, 0xf5, 0x6c, 0x5e, 0xfc, 0x0b, + 0x00, 0x00, 0xff, 0xff, 0x48, 0x0f, 0xc8, 0xc1, 0x81, 0x04, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -160,6 +227,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ApplicationLinks) > 0 { + for iNdEx := len(m.ApplicationLinks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ApplicationLinks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } if len(m.IBCPortID) > 0 { i -= len(m.IBCPortID) copy(dAtA[i:], m.IBCPortID) @@ -222,6 +303,46 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ApplicationLinkEntry) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationLinkEntry) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationLinkEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Link.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.User) > 0 { + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { offset -= sovGenesis(v) base := offset @@ -263,6 +384,27 @@ func (m *GenesisState) Size() (n int) { if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } + if len(m.ApplicationLinks) > 0 { + for _, e := range m.ApplicationLinks { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *ApplicationLinkEntry) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.Link.Size() + n += 1 + l + sovGenesis(uint64(l)) return n } @@ -468,6 +610,155 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } m.IBCPortID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationLinks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ApplicationLinks = append(m.ApplicationLinks, ApplicationLinkEntry{}) + if err := m.ApplicationLinks[len(m.ApplicationLinks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ApplicationLinkEntry) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationLinkEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationLinkEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Link", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Link.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/x/profiles/types/genesis_test.go b/x/profiles/types/genesis_test.go index 6ef2f671fc..d7d1f9805b 100644 --- a/x/profiles/types/genesis_test.go +++ b/x/profiles/types/genesis_test.go @@ -34,6 +34,7 @@ func TestValidateGenesis(t *testing.T) { types.DefaultMaxBioLength, ), types.IBCPortID, + nil, ), shouldError: true, }, @@ -52,6 +53,7 @@ func TestValidateGenesis(t *testing.T) { nil, types.DefaultParams(), types.IBCPortID, + nil, ), shouldError: true, }, @@ -87,6 +89,7 @@ func TestValidateGenesis(t *testing.T) { }, types.DefaultParams(), types.IBCPortID, + nil, ), shouldError: true, }, @@ -116,6 +119,7 @@ func TestValidateGenesis(t *testing.T) { }, types.DefaultParams(), types.IBCPortID, + nil, ), shouldError: true, }, @@ -157,6 +161,7 @@ func TestValidateGenesis(t *testing.T) { }, types.DefaultParams(), types.IBCPortID, + nil, ), shouldError: false, }, diff --git a/x/profiles/types/keys.go b/x/profiles/types/keys.go index 87ef9e2b73..380f9142cd 100644 --- a/x/profiles/types/keys.go +++ b/x/profiles/types/keys.go @@ -1,5 +1,7 @@ package types +import "strings" + // DONTCOVER const ( @@ -21,6 +23,8 @@ const ( ActionUnblockUser = "unblock_user" ActionLinkChainAccount = "link_chain_account" ActionUnlinkChainAccount = "unlink_chain_account" + ActionLinkApplication = "link_application" + ActionUnlinkApplication = "unlink_application" QuerierRoute = ModuleName QueryProfile = "profile" @@ -38,14 +42,16 @@ const ( ) var ( - DTagPrefix = []byte("dtag") - DTagTransferRequestsPrefix = []byte("transfer_requests") - RelationshipsStorePrefix = []byte("relationships") - UsersBlocksStorePrefix = []byte("users_blocks") - ChainsLinksPrefix = []byte("chains_links") + DTagPrefix = []byte("dtag") + DTagTransferRequestsPrefix = []byte("transfer_requests") + RelationshipsStorePrefix = []byte("relationships") + UsersBlocksStorePrefix = []byte("users_blocks") + ChainsLinksPrefix = []byte("chains_links") + ApplicationLinkPrefix = []byte("application_link") + ApplicationLinkClientIDPrefix = []byte("client_id") // IBCPortKey defines the key to store the port ID in store - IBCPortKey = []byte("ibc-port") + IBCPortKey = []byte{0x01} ) // DTagStoreKey turns a DTag into the key used to store the address associated with it into the store @@ -84,3 +90,18 @@ func UsersBlocksStoreKey(user string) []byte { func ChainsLinksStoreKey(chainName string, address string) []byte { return append(ChainsLinksPrefix, []byte(chainName+address)...) } + +// UserApplicationLinksPrefix returns the store prefix used to identify all the application links for the given user +func UserApplicationLinksPrefix(user string) []byte { + return append(ApplicationLinkPrefix, []byte(user)...) +} + +// ApplicationLinkKey returns the key used to store the user that is linked to the given application and username +func ApplicationLinkKey(user, application, username string) []byte { + return append(UserApplicationLinksPrefix(user), []byte(strings.ToLower(application)+strings.ToLower(username))...) +} + +// ApplicationLinkClientIDKey returns the key used to store the connection for the given client id +func ApplicationLinkClientIDKey(clientID string) []byte { + return append(ApplicationLinkClientIDPrefix, []byte(clientID)...) +} diff --git a/x/profiles/types/models_app_links.go b/x/profiles/types/models_app_links.go new file mode 100644 index 0000000000..7a04a3e34b --- /dev/null +++ b/x/profiles/types/models_app_links.go @@ -0,0 +1,200 @@ +package types + +import ( + "encoding/hex" + "fmt" + "strings" + "time" + + "github.com/cosmos/cosmos-sdk/codec" +) + +// NewApplicationLink allows to build a new ApplicationLink instance +func NewApplicationLink( + data Data, state ApplicationLinkState, oracleRequest OracleRequest, result *Result, creationTime time.Time, +) ApplicationLink { + return ApplicationLink{ + Data: data, + State: state, + OracleRequest: oracleRequest, + Result: result, + CreationTime: creationTime, + } +} + +// Validate returns an error if the instance does not contain valid data +func (l ApplicationLink) Validate() error { + err := l.Data.Validate() + if err != nil { + return err + } + + err = l.OracleRequest.Validate() + if err != nil { + return err + } + + switch result := (l.Result.Sum).(type) { + case *Result_Success_: + err = result.Validate() + case *Result_Failed_: + err = result.Validate() + } + if err != nil { + return err + } + + if l.CreationTime.IsZero() { + return fmt.Errorf("invalid creation time: %s", l.CreationTime) + } + + return nil +} + +// MustUnmarshalApplicationLink deserializes the given byte array as an application link using +// the provided BinaryMarshaler +func MustUnmarshalApplicationLink(cdc codec.BinaryMarshaler, bz []byte) ApplicationLink { + var link ApplicationLink + cdc.MustUnmarshalBinaryBare(bz, &link) + return link +} + +// -------------------------------------------------------------------------------------------------------------------- + +// NewData allows to build a new Data instance +func NewData(application, username string) Data { + return Data{ + Application: application, + Username: username, + } +} + +// Validate returns an error if the instance does not contain valid data +func (d Data) Validate() error { + if len(strings.TrimSpace(d.Application)) == 0 { + return fmt.Errorf("application name cannot be empty or blank") + } + + if len(strings.TrimSpace(d.Username)) == 0 { + return fmt.Errorf("application username cannot be empty or blank") + } + + return nil +} + +// -------------------------------------------------------------------------------------------------------------------- + +// NewOracleRequest allows to build a new OracleRequest instance +func NewOracleRequest(id int64, scriptID int64, callData OracleRequest_CallData, clientID string) OracleRequest { + return OracleRequest{ + ID: id, + OracleScriptID: scriptID, + CallData: callData, + ClientID: clientID, + } +} + +// Validate returns an error if the instance does not contain valid data +func (o OracleRequest) Validate() error { + if o.OracleScriptID <= 0 { + return fmt.Errorf("invalid oracle script id: %d", o.OracleScriptID) + } + + err := o.CallData.Validate() + if err != nil { + return err + } + + if len(strings.TrimSpace(o.ClientID)) == 0 { + return fmt.Errorf("client id cannot be empty or blank") + } + + return nil +} + +// NewOracleRequestCallData allows to build a new OracleRequest_CallData instance +func NewOracleRequestCallData(application, callData string) OracleRequest_CallData { + return OracleRequest_CallData{ + Application: application, + CallData: callData, + } +} + +// Validate returns an error if the instance does not contain valid data +func (c OracleRequest_CallData) Validate() error { + if len(strings.TrimSpace(c.Application)) == 0 { + return fmt.Errorf("application cannot be empty or blank") + } + + if len(strings.TrimSpace(c.CallData)) == 0 { + return fmt.Errorf("call data cannot be empty or blank") + } + + if _, err := hex.DecodeString(c.CallData); err != nil { + return fmt.Errorf("invalid call data encoding: must be hex") + } + + return nil +} + +// -------------------------------------------------------------------------------------------------------------------- + +// NewErrorResult allows to build a new Result instance representing an error +func NewErrorResult(error string) *Result { + return &Result{ + Sum: &Result_Failed_{ + Failed: &Result_Failed{ + Error: error, + }, + }, + } +} + +// Validate returns an error if the instance does not contain valid data +func (r Result_Failed_) Validate() error { + if len(strings.TrimSpace(r.Failed.Error)) == 0 { + return fmt.Errorf("error message cannot be empty or blank") + } + + return nil +} + +// NewSuccessResult allows to build a new Result instance representing a success +func NewSuccessResult(value, signature string) *Result { + return &Result{ + Sum: &Result_Success_{ + Success: &Result_Success{ + Value: value, + Signature: signature, + }, + }, + } +} + +// Validate returns an error if the instance does not contain valid data +func (r Result_Success_) Validate() error { + if len(strings.TrimSpace(r.Success.Value)) == 0 { + return fmt.Errorf("value cannot be empty or blank") + } + + if len(strings.TrimSpace(r.Success.Signature)) == 0 { + return fmt.Errorf("signature cannot be empty or blank") + } + + if _, err := hex.DecodeString(r.Success.Signature); err != nil { + return fmt.Errorf("invalid signature encoding; must be hex") + } + + return nil +} + +// -------------------------------------------------------------------------------------------------------------------- + +// NewClientRequest allows to build a new ClientRequest instance +func NewClientRequest(user, application, username string) ClientRequest { + return ClientRequest{ + User: user, + Application: application, + Username: username, + } +} diff --git a/x/profiles/types/models_app_links.pb.go b/x/profiles/types/models_app_links.pb.go new file mode 100644 index 0000000000..208723d2ab --- /dev/null +++ b/x/profiles/types/models_app_links.pb.go @@ -0,0 +1,2616 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: desmos/profiles/v1beta1/models_app_links.proto + +package types + +import ( + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ApplicationLinkState defines if an application link is in the following +// states: STARTED, ERRORED, SUCCESSFUL, TIMED_OUT +type ApplicationLinkState int32 + +const ( + // A link has just been initialized + ApplicationLinkStateInitialized ApplicationLinkState = 0 + // A link has just started being verified + AppLinkStateVerificationStarted ApplicationLinkState = 1 + // A link has errored during the verification process + AppLinkStateVerificationError ApplicationLinkState = 2 + // A link has being verified successfully + AppLinkStateVerificationSuccess ApplicationLinkState = 3 + // A link has timed out while waiting for the verification + AppLinkStateVerificationTimedOut ApplicationLinkState = 4 +) + +var ApplicationLinkState_name = map[int32]string{ + 0: "APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED", + 1: "APPLICATION_LINK_STATE_VERIFICATION_STARTED", + 2: "APPLICATION_LINK_STATE_VERIFICATION_ERROR", + 3: "APPLICATION_LINK_STATE_VERIFICATION_SUCCESS", + 4: "APPLICATION_LINK_STATE_TIMED_OUT", +} + +var ApplicationLinkState_value = map[string]int32{ + "APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED": 0, + "APPLICATION_LINK_STATE_VERIFICATION_STARTED": 1, + "APPLICATION_LINK_STATE_VERIFICATION_ERROR": 2, + "APPLICATION_LINK_STATE_VERIFICATION_SUCCESS": 3, + "APPLICATION_LINK_STATE_TIMED_OUT": 4, +} + +func (x ApplicationLinkState) String() string { + return proto.EnumName(ApplicationLinkState_name, int32(x)) +} + +func (ApplicationLinkState) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{0} +} + +// ApplicationLink contains the data of a link to a centralized application +type ApplicationLink struct { + // Data contains the details of this specific link + Data Data `protobuf:"bytes,1,opt,name=data,proto3" json:"data" yaml:"data"` + // State of the link + State ApplicationLinkState `protobuf:"varint,2,opt,name=state,proto3,enum=desmos.profiles.v1beta1.ApplicationLinkState" json:"state,omitempty" yaml:"state"` + // OracleRequest represents the request that has been made to the oracle + OracleRequest OracleRequest `protobuf:"bytes,3,opt,name=oracle_request,json=oracleRequest,proto3" json:"oracle_request" yaml:"oracle_request"` + // Data coming from the result of the verification. + // Only available when the state is STATE_SUCCESS + Result *Result `protobuf:"bytes,4,opt,name=result,proto3" json:"result,omitempty" yaml:"result"` + // CreationTime represents the time in which the link was created + CreationTime time.Time `protobuf:"bytes,5,opt,name=creation_time,json=creationTime,proto3,stdtime" json:"creation_time" yaml:"creation_time"` +} + +func (m *ApplicationLink) Reset() { *m = ApplicationLink{} } +func (m *ApplicationLink) String() string { return proto.CompactTextString(m) } +func (*ApplicationLink) ProtoMessage() {} +func (*ApplicationLink) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{0} +} +func (m *ApplicationLink) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ApplicationLink) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ApplicationLink.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ApplicationLink) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationLink.Merge(m, src) +} +func (m *ApplicationLink) XXX_Size() int { + return m.Size() +} +func (m *ApplicationLink) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationLink.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationLink proto.InternalMessageInfo + +func (m *ApplicationLink) GetData() Data { + if m != nil { + return m.Data + } + return Data{} +} + +func (m *ApplicationLink) GetState() ApplicationLinkState { + if m != nil { + return m.State + } + return ApplicationLinkStateInitialized +} + +func (m *ApplicationLink) GetOracleRequest() OracleRequest { + if m != nil { + return m.OracleRequest + } + return OracleRequest{} +} + +func (m *ApplicationLink) GetResult() *Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *ApplicationLink) GetCreationTime() time.Time { + if m != nil { + return m.CreationTime + } + return time.Time{} +} + +// Data contains the data associated to a specific user of a +// generic centralized application +type Data struct { + // The application name (eg. Twitter, GitHub, etc) + Application string `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty" yaml:"application"` + // Username on the application (eg. Twitter tag, GitHub profile, etc) + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty" yaml:"username"` +} + +func (m *Data) Reset() { *m = Data{} } +func (m *Data) String() string { return proto.CompactTextString(m) } +func (*Data) ProtoMessage() {} +func (*Data) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{1} +} +func (m *Data) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Data) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Data.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Data) XXX_Merge(src proto.Message) { + xxx_messageInfo_Data.Merge(m, src) +} +func (m *Data) XXX_Size() int { + return m.Size() +} +func (m *Data) XXX_DiscardUnknown() { + xxx_messageInfo_Data.DiscardUnknown(m) +} + +var xxx_messageInfo_Data proto.InternalMessageInfo + +func (m *Data) GetApplication() string { + if m != nil { + return m.Application + } + return "" +} + +func (m *Data) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +// OracleRequest represents a generic oracle request used to +// verify the ownership of a centralized application account +type OracleRequest struct { + // ID is the ID of the request + ID int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty" yaml:"id"` + // OracleScriptID is ID of an oracle script + OracleScriptID int64 `protobuf:"varint,2,opt,name=oracle_script_id,json=oracleScriptId,proto3" json:"oracle_script_id,omitempty" yaml:"oracle_script_id"` + // CallData contains the data used to perform the oracle request + CallData OracleRequest_CallData `protobuf:"bytes,3,opt,name=call_data,json=callData,proto3" json:"call_data" yaml:"call_data"` + // ClientID represents the ID of the client that has called the oracle script + ClientID string `protobuf:"bytes,4,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty" yaml:"client_id"` +} + +func (m *OracleRequest) Reset() { *m = OracleRequest{} } +func (m *OracleRequest) String() string { return proto.CompactTextString(m) } +func (*OracleRequest) ProtoMessage() {} +func (*OracleRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{2} +} +func (m *OracleRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OracleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OracleRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *OracleRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_OracleRequest.Merge(m, src) +} +func (m *OracleRequest) XXX_Size() int { + return m.Size() +} +func (m *OracleRequest) XXX_DiscardUnknown() { + xxx_messageInfo_OracleRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_OracleRequest proto.InternalMessageInfo + +func (m *OracleRequest) GetID() int64 { + if m != nil { + return m.ID + } + return 0 +} + +func (m *OracleRequest) GetOracleScriptID() int64 { + if m != nil { + return m.OracleScriptID + } + return 0 +} + +func (m *OracleRequest) GetCallData() OracleRequest_CallData { + if m != nil { + return m.CallData + } + return OracleRequest_CallData{} +} + +func (m *OracleRequest) GetClientID() string { + if m != nil { + return m.ClientID + } + return "" +} + +// CallData contains the data sent to a single oracle request in order to +// verify the ownership of a centralized application by a Desmos profile +type OracleRequest_CallData struct { + // The application for which the ownership should be verified + Application string `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty" yaml:"application"` + // The hex encoded call data that should be used to verify the application + // account ownership + CallData string `protobuf:"bytes,2,opt,name=call_data,json=callData,proto3" json:"call_data,omitempty" yaml:"call_data"` +} + +func (m *OracleRequest_CallData) Reset() { *m = OracleRequest_CallData{} } +func (m *OracleRequest_CallData) String() string { return proto.CompactTextString(m) } +func (*OracleRequest_CallData) ProtoMessage() {} +func (*OracleRequest_CallData) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{2, 0} +} +func (m *OracleRequest_CallData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OracleRequest_CallData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OracleRequest_CallData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *OracleRequest_CallData) XXX_Merge(src proto.Message) { + xxx_messageInfo_OracleRequest_CallData.Merge(m, src) +} +func (m *OracleRequest_CallData) XXX_Size() int { + return m.Size() +} +func (m *OracleRequest_CallData) XXX_DiscardUnknown() { + xxx_messageInfo_OracleRequest_CallData.DiscardUnknown(m) +} + +var xxx_messageInfo_OracleRequest_CallData proto.InternalMessageInfo + +func (m *OracleRequest_CallData) GetApplication() string { + if m != nil { + return m.Application + } + return "" +} + +func (m *OracleRequest_CallData) GetCallData() string { + if m != nil { + return m.CallData + } + return "" +} + +// Result represents a verification result +type Result struct { + // sum is the oneof that specifies whether this represents a success or + // failure result + // + // Types that are valid to be assigned to Sum: + // *Result_Success_ + // *Result_Failed_ + Sum isResult_Sum `protobuf_oneof:"sum"` +} + +func (m *Result) Reset() { *m = Result{} } +func (m *Result) String() string { return proto.CompactTextString(m) } +func (*Result) ProtoMessage() {} +func (*Result) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{3} +} +func (m *Result) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Result) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Result.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Result) XXX_Merge(src proto.Message) { + xxx_messageInfo_Result.Merge(m, src) +} +func (m *Result) XXX_Size() int { + return m.Size() +} +func (m *Result) XXX_DiscardUnknown() { + xxx_messageInfo_Result.DiscardUnknown(m) +} + +var xxx_messageInfo_Result proto.InternalMessageInfo + +type isResult_Sum interface { + isResult_Sum() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type Result_Success_ struct { + Success *Result_Success `protobuf:"bytes,1,opt,name=success,proto3,oneof" json:"success,omitempty"` +} +type Result_Failed_ struct { + Failed *Result_Failed `protobuf:"bytes,2,opt,name=failed,proto3,oneof" json:"failed,omitempty"` +} + +func (*Result_Success_) isResult_Sum() {} +func (*Result_Failed_) isResult_Sum() {} + +func (m *Result) GetSum() isResult_Sum { + if m != nil { + return m.Sum + } + return nil +} + +func (m *Result) GetSuccess() *Result_Success { + if x, ok := m.GetSum().(*Result_Success_); ok { + return x.Success + } + return nil +} + +func (m *Result) GetFailed() *Result_Failed { + if x, ok := m.GetSum().(*Result_Failed_); ok { + return x.Failed + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*Result) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*Result_Success_)(nil), + (*Result_Failed_)(nil), + } +} + +// Success is the result of an application link that has been successfully +// verified +type Result_Success struct { + // Value that has be signed by the profile + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty" yaml:"value"` + // Signature that has been produced by signing the value + Signature string `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty" yaml:"signature"` +} + +func (m *Result_Success) Reset() { *m = Result_Success{} } +func (m *Result_Success) String() string { return proto.CompactTextString(m) } +func (*Result_Success) ProtoMessage() {} +func (*Result_Success) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{3, 0} +} +func (m *Result_Success) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Result_Success) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Result_Success.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Result_Success) XXX_Merge(src proto.Message) { + xxx_messageInfo_Result_Success.Merge(m, src) +} +func (m *Result_Success) XXX_Size() int { + return m.Size() +} +func (m *Result_Success) XXX_DiscardUnknown() { + xxx_messageInfo_Result_Success.DiscardUnknown(m) +} + +var xxx_messageInfo_Result_Success proto.InternalMessageInfo + +func (m *Result_Success) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Result_Success) GetSignature() string { + if m != nil { + return m.Signature + } + return "" +} + +// Failed is the result of an application link that has not been verified +// successfully +type Result_Failed struct { + // Error that is associated with the failure + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty" yaml:"error"` +} + +func (m *Result_Failed) Reset() { *m = Result_Failed{} } +func (m *Result_Failed) String() string { return proto.CompactTextString(m) } +func (*Result_Failed) ProtoMessage() {} +func (*Result_Failed) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{3, 1} +} +func (m *Result_Failed) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Result_Failed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Result_Failed.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Result_Failed) XXX_Merge(src proto.Message) { + xxx_messageInfo_Result_Failed.Merge(m, src) +} +func (m *Result_Failed) XXX_Size() int { + return m.Size() +} +func (m *Result_Failed) XXX_DiscardUnknown() { + xxx_messageInfo_Result_Failed.DiscardUnknown(m) +} + +var xxx_messageInfo_Result_Failed proto.InternalMessageInfo + +func (m *Result_Failed) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +// ClientRequest contains the data of a client oracle request +type ClientRequest struct { + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + Application string `protobuf:"bytes,2,opt,name=application,proto3" json:"application,omitempty"` + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (m *ClientRequest) Reset() { *m = ClientRequest{} } +func (m *ClientRequest) String() string { return proto.CompactTextString(m) } +func (*ClientRequest) ProtoMessage() {} +func (*ClientRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_33caa1214beac081, []int{4} +} +func (m *ClientRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClientRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClientRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClientRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClientRequest.Merge(m, src) +} +func (m *ClientRequest) XXX_Size() int { + return m.Size() +} +func (m *ClientRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ClientRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ClientRequest proto.InternalMessageInfo + +func (m *ClientRequest) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *ClientRequest) GetApplication() string { + if m != nil { + return m.Application + } + return "" +} + +func (m *ClientRequest) GetUsername() string { + if m != nil { + return m.Username + } + return "" +} + +func init() { + proto.RegisterEnum("desmos.profiles.v1beta1.ApplicationLinkState", ApplicationLinkState_name, ApplicationLinkState_value) + proto.RegisterType((*ApplicationLink)(nil), "desmos.profiles.v1beta1.ApplicationLink") + proto.RegisterType((*Data)(nil), "desmos.profiles.v1beta1.Data") + proto.RegisterType((*OracleRequest)(nil), "desmos.profiles.v1beta1.OracleRequest") + proto.RegisterType((*OracleRequest_CallData)(nil), "desmos.profiles.v1beta1.OracleRequest.CallData") + proto.RegisterType((*Result)(nil), "desmos.profiles.v1beta1.Result") + proto.RegisterType((*Result_Success)(nil), "desmos.profiles.v1beta1.Result.Success") + proto.RegisterType((*Result_Failed)(nil), "desmos.profiles.v1beta1.Result.Failed") + proto.RegisterType((*ClientRequest)(nil), "desmos.profiles.v1beta1.ClientRequest") +} + +func init() { + proto.RegisterFile("desmos/profiles/v1beta1/models_app_links.proto", fileDescriptor_33caa1214beac081) +} + +var fileDescriptor_33caa1214beac081 = []byte{ + // 969 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x96, 0xcf, 0x8f, 0xdb, 0x44, + 0x14, 0xc7, 0xf3, 0x6b, 0xb7, 0x9b, 0x69, 0xb3, 0x0d, 0xb3, 0x0b, 0x8d, 0x2c, 0x6d, 0x6c, 0x5c, + 0x54, 0x0a, 0x68, 0x6d, 0xed, 0x22, 0x21, 0x54, 0x09, 0x89, 0x38, 0xf1, 0x6a, 0x5d, 0x96, 0xcd, + 0x6a, 0xe2, 0x6d, 0xa5, 0x5e, 0xac, 0x89, 0x3d, 0x09, 0xd6, 0x3a, 0x71, 0xb0, 0xc7, 0x85, 0x22, + 0x71, 0x47, 0x7b, 0xea, 0x3f, 0xb0, 0x12, 0x12, 0x7f, 0x05, 0x27, 0xc4, 0xad, 0xc7, 0x4a, 0x5c, + 0x38, 0x19, 0x94, 0xbd, 0x70, 0xce, 0x5f, 0x80, 0x3c, 0x33, 0xce, 0x26, 0xb4, 0x69, 0x57, 0xe2, + 0x66, 0xcf, 0xfb, 0xbe, 0xcf, 0x7b, 0x9e, 0xef, 0x9b, 0x49, 0x80, 0xe6, 0x91, 0x78, 0x14, 0xc6, + 0xfa, 0x24, 0x0a, 0x07, 0x7e, 0x40, 0x62, 0xfd, 0xe9, 0x5e, 0x9f, 0x50, 0xbc, 0xa7, 0x8f, 0x42, + 0x8f, 0x04, 0xb1, 0x83, 0x27, 0x13, 0x27, 0xf0, 0xc7, 0x67, 0xb1, 0x36, 0x89, 0x42, 0x1a, 0xc2, + 0x3b, 0x5c, 0xaf, 0xe5, 0x7a, 0x4d, 0xe8, 0xa5, 0xed, 0x61, 0x38, 0x0c, 0x99, 0x46, 0xcf, 0x9e, + 0xb8, 0x5c, 0x92, 0x87, 0x61, 0x38, 0x0c, 0x88, 0xce, 0xde, 0xfa, 0xc9, 0x40, 0xa7, 0xfe, 0x88, + 0xc4, 0x14, 0x8f, 0x26, 0x5c, 0xa0, 0xfe, 0x51, 0x06, 0xb7, 0x5b, 0x93, 0x49, 0xe0, 0xbb, 0x98, + 0xfa, 0xe1, 0xf8, 0xc8, 0x1f, 0x9f, 0xc1, 0x03, 0x50, 0xf1, 0x30, 0xc5, 0x8d, 0xa2, 0x52, 0xbc, + 0x7f, 0x73, 0x7f, 0x47, 0x5b, 0x51, 0x52, 0xeb, 0x60, 0x8a, 0x8d, 0xad, 0x17, 0xa9, 0x5c, 0x98, + 0xa5, 0xf2, 0xcd, 0x67, 0x78, 0x14, 0x3c, 0x50, 0xb3, 0x44, 0x15, 0xb1, 0x7c, 0x78, 0x0a, 0xd6, + 0x62, 0x8a, 0x29, 0x69, 0x94, 0x94, 0xe2, 0xfd, 0xcd, 0xfd, 0xdd, 0x95, 0xa0, 0xff, 0x34, 0xd0, + 0xcb, 0x92, 0x8c, 0xfa, 0x2c, 0x95, 0x6f, 0x71, 0x28, 0xa3, 0xa8, 0x88, 0xd3, 0x60, 0x00, 0x36, + 0xc3, 0x08, 0xbb, 0x01, 0x71, 0x22, 0xf2, 0x6d, 0x42, 0x62, 0xda, 0x28, 0xb3, 0x46, 0xef, 0xad, + 0xe4, 0x77, 0x99, 0x1c, 0x71, 0xb5, 0xb1, 0x23, 0x3a, 0x7e, 0x97, 0xc3, 0x97, 0x59, 0x2a, 0xaa, + 0x85, 0x8b, 0x6a, 0xf8, 0x10, 0xac, 0x47, 0x24, 0x4e, 0x02, 0xda, 0xa8, 0xb0, 0x2a, 0xf2, 0xca, + 0x2a, 0x88, 0xc9, 0x8c, 0x77, 0x66, 0xa9, 0x5c, 0xe3, 0x68, 0x9e, 0xa8, 0x22, 0x41, 0x80, 0x18, + 0xd4, 0xdc, 0x88, 0xb0, 0xef, 0x74, 0x32, 0x23, 0x1a, 0x6b, 0x0c, 0x29, 0x69, 0xdc, 0x25, 0x2d, + 0x77, 0x49, 0xb3, 0x73, 0x97, 0x0c, 0x45, 0x34, 0xbb, 0xcd, 0x89, 0x4b, 0xe9, 0xea, 0xf3, 0xbf, + 0xe4, 0x22, 0xba, 0x95, 0xaf, 0x65, 0x49, 0x0f, 0x2a, 0xff, 0xfc, 0x2c, 0x17, 0xd5, 0xef, 0x40, + 0x25, 0x33, 0x07, 0x7e, 0x0e, 0x6e, 0xe2, 0xab, 0xbd, 0x65, 0x86, 0x56, 0x8d, 0xf7, 0x66, 0xa9, + 0x0c, 0x39, 0x6e, 0x21, 0xa8, 0xa2, 0x45, 0x29, 0xd4, 0xc1, 0x46, 0x12, 0x93, 0x68, 0x8c, 0x47, + 0xdc, 0xbe, 0xaa, 0xb1, 0x35, 0x4b, 0xe5, 0xdb, 0x3c, 0x2d, 0x8f, 0xa8, 0x68, 0x2e, 0x12, 0x85, + 0x7f, 0x2d, 0x83, 0xda, 0xd2, 0x6e, 0xc3, 0xbb, 0xa0, 0xe4, 0x7b, 0xac, 0x72, 0xd9, 0xd8, 0x9a, + 0xa6, 0x72, 0xc9, 0xea, 0xcc, 0x52, 0xb9, 0xca, 0x41, 0xbe, 0xa7, 0xa2, 0x92, 0xef, 0xc1, 0xc7, + 0xa0, 0x2e, 0x6c, 0x88, 0xdd, 0xc8, 0x9f, 0x50, 0xc7, 0xf7, 0x58, 0xd5, 0xb2, 0xb1, 0x3b, 0x4d, + 0xe5, 0x4d, 0x4e, 0xec, 0xb1, 0x10, 0x4b, 0xbf, 0xb3, 0x64, 0xdd, 0x3c, 0x47, 0x45, 0x62, 0x32, + 0x84, 0xd4, 0x83, 0x03, 0x50, 0x75, 0x71, 0x10, 0x38, 0x6c, 0x9e, 0xf9, 0x98, 0xe8, 0xd7, 0x1b, + 0x13, 0xad, 0x8d, 0x83, 0x80, 0x4d, 0x78, 0x43, 0x58, 0x50, 0x17, 0x16, 0xe4, 0x3c, 0x15, 0x6d, + 0xb8, 0x42, 0x03, 0xbf, 0x00, 0x55, 0x37, 0xf0, 0xc9, 0x98, 0x75, 0x5e, 0x61, 0xfb, 0xa5, 0x4c, + 0x53, 0x79, 0xa3, 0xcd, 0x16, 0x59, 0xcf, 0x79, 0x7a, 0x2e, 0xcb, 0xd2, 0x79, 0xd4, 0x93, 0x7e, + 0x04, 0x1b, 0x79, 0xb9, 0xff, 0xe1, 0xd9, 0xde, 0xe2, 0xc7, 0x72, 0xd3, 0xb6, 0xdf, 0xdc, 0x37, + 0x77, 0x4d, 0x78, 0xf7, 0x7b, 0x09, 0xac, 0xf3, 0x19, 0x86, 0x6d, 0x70, 0x23, 0x4e, 0x5c, 0x97, + 0xc4, 0xb1, 0xb8, 0x04, 0x3e, 0x7c, 0xcb, 0xd4, 0x6b, 0x3d, 0x2e, 0x3f, 0x2c, 0xa0, 0x3c, 0x13, + 0x7e, 0x09, 0xd6, 0x07, 0xd8, 0x0f, 0x08, 0xb7, 0xf2, 0x4d, 0xe7, 0x53, 0x30, 0x0e, 0x98, 0xfa, + 0xb0, 0x80, 0x44, 0x9e, 0x74, 0x06, 0x6e, 0x08, 0x2e, 0xbc, 0x07, 0xd6, 0x9e, 0xe2, 0x20, 0x21, + 0x62, 0x3f, 0x16, 0x2e, 0x07, 0xb6, 0xac, 0x22, 0x1e, 0x86, 0xfb, 0xa0, 0x1a, 0xfb, 0xc3, 0x31, + 0xa6, 0x49, 0x44, 0x5e, 0xdd, 0x83, 0x79, 0x48, 0x45, 0x57, 0x32, 0xfe, 0xf9, 0xd2, 0x67, 0x60, + 0x9d, 0x37, 0x90, 0xd5, 0x22, 0x51, 0x14, 0x46, 0xaf, 0xd6, 0x62, 0xcb, 0x2a, 0xe2, 0xe1, 0xc5, + 0xcd, 0x33, 0xd6, 0x40, 0x39, 0x4e, 0x46, 0x2a, 0x06, 0x35, 0x6e, 0x79, 0x3e, 0xfe, 0x10, 0x54, + 0xb2, 0x23, 0xc2, 0x51, 0x88, 0x3d, 0x43, 0x65, 0xd9, 0x61, 0xd6, 0xe5, 0xb2, 0x93, 0xd2, 0xc2, + 0xe9, 0x2b, 0xb3, 0xf0, 0xfc, 0xfd, 0xe3, 0xdf, 0xca, 0x60, 0xfb, 0x75, 0x17, 0x26, 0x7c, 0x0c, + 0xb4, 0xd6, 0xc9, 0xc9, 0x91, 0xd5, 0x6e, 0xd9, 0x56, 0xf7, 0xd8, 0x39, 0xb2, 0x8e, 0xbf, 0x72, + 0x7a, 0x76, 0xcb, 0x36, 0x1d, 0xeb, 0xd8, 0xb2, 0xad, 0xd6, 0x91, 0xf5, 0xc4, 0xec, 0x38, 0xa7, + 0xc7, 0xbd, 0x13, 0xb3, 0x6d, 0x1d, 0x58, 0x66, 0xa7, 0x5e, 0x90, 0xee, 0x9e, 0x5f, 0x28, 0xf2, + 0xeb, 0x68, 0xd6, 0xd8, 0xa7, 0x3e, 0x0e, 0xfc, 0x1f, 0x88, 0x07, 0x6d, 0xf0, 0xc9, 0x0a, 0xf0, + 0x23, 0x13, 0x59, 0x07, 0xf9, 0x7a, 0xcf, 0x6e, 0x21, 0xdb, 0xec, 0xd4, 0x8b, 0x73, 0xea, 0x9c, + 0xf6, 0x88, 0x44, 0xfe, 0x40, 0x94, 0xe8, 0x51, 0x1c, 0x51, 0xe2, 0xc1, 0x13, 0xf0, 0xd1, 0x75, + 0xa8, 0x26, 0x42, 0x5d, 0x54, 0x2f, 0x49, 0xef, 0x9f, 0x5f, 0x28, 0x3b, 0xab, 0x98, 0x66, 0xe6, + 0xc7, 0xb5, 0xfb, 0x3c, 0x6d, 0xb7, 0xcd, 0x5e, 0xaf, 0x5e, 0x7e, 0x4b, 0x9f, 0x62, 0xf2, 0x1e, + 0x02, 0x65, 0x05, 0xd5, 0xb6, 0xbe, 0x36, 0x3b, 0x4e, 0xf7, 0xd4, 0xae, 0x57, 0xa4, 0x0f, 0xce, + 0x2f, 0x14, 0x65, 0x15, 0x2a, 0xbb, 0x99, 0xbd, 0x6e, 0x42, 0xa5, 0xca, 0x4f, 0xbf, 0x34, 0x0b, + 0xc6, 0xe1, 0x8b, 0x69, 0xb3, 0xf8, 0x72, 0xda, 0x2c, 0xfe, 0x3d, 0x6d, 0x16, 0x9f, 0x5f, 0x36, + 0x0b, 0x2f, 0x2f, 0x9b, 0x85, 0x3f, 0x2f, 0x9b, 0x85, 0x27, 0xda, 0xd0, 0xa7, 0xdf, 0x24, 0x7d, + 0xcd, 0x0d, 0x47, 0x3a, 0x3f, 0x2c, 0xbb, 0x01, 0xee, 0xc7, 0xe2, 0x59, 0xff, 0xfe, 0xea, 0x6f, + 0x02, 0x7d, 0x36, 0x21, 0x71, 0x7f, 0x9d, 0xfd, 0x62, 0x7c, 0xfa, 0x6f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x75, 0x6e, 0xf3, 0xee, 0x46, 0x08, 0x00, 0x00, +} + +func (this *ApplicationLink) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ApplicationLink) + if !ok { + that2, ok := that.(ApplicationLink) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Data.Equal(&that1.Data) { + return false + } + if this.State != that1.State { + return false + } + if !this.OracleRequest.Equal(&that1.OracleRequest) { + return false + } + if !this.Result.Equal(that1.Result) { + return false + } + if !this.CreationTime.Equal(that1.CreationTime) { + return false + } + return true +} +func (this *Data) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Data) + if !ok { + that2, ok := that.(Data) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Application != that1.Application { + return false + } + if this.Username != that1.Username { + return false + } + return true +} +func (this *OracleRequest) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OracleRequest) + if !ok { + that2, ok := that.(OracleRequest) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ID != that1.ID { + return false + } + if this.OracleScriptID != that1.OracleScriptID { + return false + } + if !this.CallData.Equal(&that1.CallData) { + return false + } + if this.ClientID != that1.ClientID { + return false + } + return true +} +func (this *OracleRequest_CallData) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*OracleRequest_CallData) + if !ok { + that2, ok := that.(OracleRequest_CallData) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Application != that1.Application { + return false + } + if this.CallData != that1.CallData { + return false + } + return true +} +func (this *Result) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Result) + if !ok { + that2, ok := that.(Result) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if that1.Sum == nil { + if this.Sum != nil { + return false + } + } else if this.Sum == nil { + return false + } else if !this.Sum.Equal(that1.Sum) { + return false + } + return true +} +func (this *Result_Success_) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Result_Success_) + if !ok { + that2, ok := that.(Result_Success_) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Success.Equal(that1.Success) { + return false + } + return true +} +func (this *Result_Failed_) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Result_Failed_) + if !ok { + that2, ok := that.(Result_Failed_) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Failed.Equal(that1.Failed) { + return false + } + return true +} +func (this *Result_Success) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Result_Success) + if !ok { + that2, ok := that.(Result_Success) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Value != that1.Value { + return false + } + if this.Signature != that1.Signature { + return false + } + return true +} +func (this *Result_Failed) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*Result_Failed) + if !ok { + that2, ok := that.(Result_Failed) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Error != that1.Error { + return false + } + return true +} +func (m *ApplicationLink) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ApplicationLink) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ApplicationLink) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreationTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreationTime):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintModelsAppLinks(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x2a + if m.Result != nil { + { + size, err := m.Result.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.OracleRequest.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.State != 0 { + i = encodeVarintModelsAppLinks(dAtA, i, uint64(m.State)) + i-- + dAtA[i] = 0x10 + } + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Data) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Data) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Data) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Username) > 0 { + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0x12 + } + if len(m.Application) > 0 { + i -= len(m.Application) + copy(dAtA[i:], m.Application) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Application))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *OracleRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OracleRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OracleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClientID) > 0 { + i -= len(m.ClientID) + copy(dAtA[i:], m.ClientID) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.ClientID))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CallData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.OracleScriptID != 0 { + i = encodeVarintModelsAppLinks(dAtA, i, uint64(m.OracleScriptID)) + i-- + dAtA[i] = 0x10 + } + if m.ID != 0 { + i = encodeVarintModelsAppLinks(dAtA, i, uint64(m.ID)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *OracleRequest_CallData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OracleRequest_CallData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OracleRequest_CallData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CallData) > 0 { + i -= len(m.CallData) + copy(dAtA[i:], m.CallData) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.CallData))) + i-- + dAtA[i] = 0x12 + } + if len(m.Application) > 0 { + i -= len(m.Application) + copy(dAtA[i:], m.Application) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Application))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Result) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Result) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Result) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sum != nil { + { + size := m.Sum.Size() + i -= size + if _, err := m.Sum.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *Result_Success_) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Result_Success_) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.Success != nil { + { + size, err := m.Success.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *Result_Failed_) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Result_Failed_) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.Failed != nil { + { + size, err := m.Failed.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintModelsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} +func (m *Result_Success) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Result_Success) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Result_Success) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signature) > 0 { + i -= len(m.Signature) + copy(dAtA[i:], m.Signature) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Signature))) + i-- + dAtA[i] = 0x12 + } + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Result_Failed) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Result_Failed) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Result_Failed) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Error) > 0 { + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Error))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ClientRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClientRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClientRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Username) > 0 { + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0x1a + } + if len(m.Application) > 0 { + i -= len(m.Application) + copy(dAtA[i:], m.Application) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.Application))) + i-- + dAtA[i] = 0x12 + } + if len(m.User) > 0 { + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintModelsAppLinks(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintModelsAppLinks(dAtA []byte, offset int, v uint64) int { + offset -= sovModelsAppLinks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ApplicationLink) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Data.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + if m.State != 0 { + n += 1 + sovModelsAppLinks(uint64(m.State)) + } + l = m.OracleRequest.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + if m.Result != nil { + l = m.Result.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreationTime) + n += 1 + l + sovModelsAppLinks(uint64(l)) + return n +} + +func (m *Data) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Application) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = len(m.Username) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func (m *OracleRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ID != 0 { + n += 1 + sovModelsAppLinks(uint64(m.ID)) + } + if m.OracleScriptID != 0 { + n += 1 + sovModelsAppLinks(uint64(m.OracleScriptID)) + } + l = m.CallData.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + l = len(m.ClientID) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func (m *OracleRequest_CallData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Application) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = len(m.CallData) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func (m *Result) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Sum != nil { + n += m.Sum.Size() + } + return n +} + +func (m *Result_Success_) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Success != nil { + l = m.Success.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} +func (m *Result_Failed_) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Failed != nil { + l = m.Failed.Size() + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} +func (m *Result_Success) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Value) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = len(m.Signature) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func (m *Result_Failed) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Error) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func (m *ClientRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = len(m.Application) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + l = len(m.Username) + if l > 0 { + n += 1 + l + sovModelsAppLinks(uint64(l)) + } + return n +} + +func sovModelsAppLinks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozModelsAppLinks(x uint64) (n int) { + return sovModelsAppLinks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ApplicationLink) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ApplicationLink: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ApplicationLink: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Data.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + m.State = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.State |= ApplicationLinkState(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleRequest", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.OracleRequest.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Result == nil { + m.Result = &Result{} + } + if err := m.Result.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreationTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Data) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Data: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Data: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Application", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Application = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OracleRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OracleRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OracleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ID |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleScriptID", wireType) + } + m.OracleScriptID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OracleScriptID |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CallData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OracleRequest_CallData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CallData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CallData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Application", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Application = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallData", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallData = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Result) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Result: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Result: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &Result_Success{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Sum = &Result_Success_{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Failed", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &Result_Failed{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Sum = &Result_Failed_{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Result_Success) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Success: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Success: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signature", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signature = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Result_Failed) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Failed: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Failed: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Error = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClientRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClientRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClientRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Application", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Application = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthModelsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthModelsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipModelsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthModelsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipModelsAppLinks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowModelsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthModelsAppLinks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupModelsAppLinks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthModelsAppLinks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthModelsAppLinks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowModelsAppLinks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupModelsAppLinks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/profiles/types/models_packets.go b/x/profiles/types/models_packets.go index ced9b014d0..759833ef7e 100644 --- a/x/profiles/types/models_packets.go +++ b/x/profiles/types/models_packets.go @@ -62,5 +62,5 @@ func (p LinkChainAccountPacketData) Validate() error { // GetBytes is a helper for serialising func (p LinkChainAccountPacketData) GetBytes() ([]byte, error) { var modulePacket LinkChainAccountPacketData - return sdk.SortJSON(ProtoCdc.MustMarshalJSON(&modulePacket)) + return sdk.SortJSON(ModuleCdc.MustMarshalJSON(&modulePacket)) } diff --git a/x/profiles/types/msg_server.pb.go b/x/profiles/types/msg_server.pb.go index 5e6d82ca18..8bd9d12cb1 100644 --- a/x/profiles/types/msg_server.pb.go +++ b/x/profiles/types/msg_server.pb.go @@ -33,40 +33,42 @@ func init() { } var fileDescriptor_e042115035680605 = []byte{ - // 514 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x8b, 0x13, 0x31, - 0x14, 0xc7, 0xb7, 0x08, 0x82, 0x29, 0x82, 0x8c, 0x82, 0x38, 0x87, 0xb9, 0x89, 0xba, 0xd4, 0x8c, - 0xdd, 0x05, 0x3d, 0xef, 0x76, 0x0f, 0x1e, 0x5c, 0x90, 0xba, 0xbd, 0x78, 0xb0, 0x64, 0xd2, 0xd7, - 0x74, 0x68, 0x9a, 0x8c, 0x49, 0xa6, 0x58, 0x10, 0xbc, 0xf8, 0x01, 0xfc, 0x58, 0x1e, 0xf7, 0xe8, - 0x51, 0xda, 0x2f, 0x22, 0xed, 0x4c, 0xe3, 0xec, 0xa4, 0x93, 0x9d, 0xbd, 0x25, 0xcd, 0xef, 0xff, - 0x7e, 0xaf, 0x49, 0xfb, 0xd0, 0xcb, 0x09, 0xe8, 0x85, 0xd4, 0x71, 0xa6, 0xe4, 0x34, 0xe5, 0xa0, - 0xe3, 0x65, 0x3f, 0x01, 0x43, 0xfa, 0xf1, 0x42, 0xb3, 0xb1, 0x06, 0xb5, 0x04, 0x85, 0x33, 0x25, - 0x8d, 0x0c, 0x9e, 0x16, 0x24, 0xde, 0x93, 0xb8, 0x24, 0xc3, 0x27, 0x4c, 0x32, 0xb9, 0x63, 0xe2, - 0xed, 0xaa, 0xc0, 0xc3, 0x67, 0x4c, 0x4a, 0xc6, 0x21, 0xde, 0xed, 0x92, 0x7c, 0x1a, 0x13, 0xb1, - 0xda, 0x1f, 0x51, 0xb9, 0xad, 0x34, 0x2e, 0x32, 0xc5, 0xa6, 0x3c, 0xea, 0x35, 0xb6, 0x23, 0x27, - 0xc0, 0x77, 0x91, 0xed, 0xe7, 0x25, 0x7d, 0x72, 0x0b, 0xad, 0x80, 0x13, 0x93, 0x4a, 0xa1, 0x67, - 0x69, 0xa6, 0x5b, 0x66, 0x26, 0x86, 0xb0, 0xb1, 0x82, 0xaf, 0x39, 0x68, 0xb3, 0xcf, 0x1c, 0x7b, - 0x2e, 0xa9, 0xde, 0xd3, 0x1b, 0x2f, 0x7b, 0xa8, 0x23, 0x7f, 0xe2, 0x50, 0x3f, 0xd8, 0x9b, 0xa0, - 0x33, 0x92, 0x8a, 0x31, 0x4f, 0xc5, 0xbc, 0xe4, 0x4f, 0x7e, 0x76, 0xd1, 0xbd, 0x4b, 0xcd, 0x02, - 0x86, 0xba, 0x9f, 0xc8, 0x12, 0x3e, 0x16, 0xb1, 0xe0, 0x05, 0x6e, 0x78, 0x52, 0x7c, 0xa9, 0x59, - 0x05, 0x0c, 0xe3, 0x96, 0xe0, 0x10, 0x74, 0x26, 0x85, 0x86, 0x60, 0x81, 0x1e, 0x5e, 0x00, 0x07, - 0x63, 0x55, 0xaf, 0x7c, 0x15, 0x6e, 0xa0, 0x61, 0xbf, 0x35, 0x6a, 0x75, 0x3f, 0xd0, 0xe3, 0x61, - 0x71, 0x43, 0x17, 0x57, 0x84, 0x5d, 0x29, 0x22, 0xf4, 0x14, 0x54, 0xe0, 0x6d, 0xfb, 0x40, 0x20, - 0x7c, 0x77, 0xc7, 0x80, 0x6d, 0xe0, 0x3b, 0x0a, 0x06, 0x44, 0x50, 0xe0, 0x37, 0xfc, 0xd8, 0x57, - 0xce, 0xe5, 0xc3, 0xb7, 0x77, 0xe3, 0xab, 0xf6, 0x33, 0x4a, 0x21, 0x33, 0xed, 0xed, 0x2e, 0xef, - 0xb7, 0xbb, 0x7c, 0xd5, 0x3e, 0x84, 0x69, 0xae, 0xa1, 0xbd, 0xdd, 0xe5, 0xfd, 0x76, 0x97, 0xb7, - 0xf6, 0x15, 0x0a, 0x06, 0x0a, 0x88, 0x81, 0x61, 0xe5, 0x9f, 0x75, 0xcb, 0xcd, 0x3b, 0x7c, 0x78, - 0xda, 0xc8, 0xbb, 0x70, 0x55, 0x5d, 0xfc, 0x1c, 0xdb, 0xab, 0x5d, 0xde, 0xa3, 0x76, 0x61, 0xab, - 0xfe, 0x82, 0x1e, 0x9c, 0x73, 0x49, 0xe7, 0x23, 0x0d, 0x2a, 0x78, 0xee, 0x33, 0x5a, 0x2c, 0x3c, - 0x6e, 0xc4, 0x2c, 0x63, 0xeb, 0x4f, 0x50, 0x77, 0x24, 0x12, 0x6b, 0xf0, 0x0e, 0x8a, 0x0a, 0x18, - 0xf6, 0x1a, 0xc1, 0x0a, 0x65, 0x2d, 0x1a, 0x3d, 0xfa, 0x90, 0x8a, 0xf9, 0x60, 0x3b, 0xaf, 0xce, - 0x28, 0x95, 0xb9, 0x30, 0x41, 0xcf, 0xa7, 0xaa, 0xd3, 0x9e, 0x59, 0x51, 0x47, 0xab, 0xaf, 0x36, - 0x12, 0xbc, 0xae, 0xc5, 0xfe, 0x6f, 0x58, 0xe7, 0x3d, 0xaf, 0xe6, 0xc2, 0x7b, 0xf5, 0xf9, 0xfb, - 0xdf, 0xeb, 0xa8, 0x73, 0xbd, 0x8e, 0x3a, 0x7f, 0xd7, 0x51, 0xe7, 0xd7, 0x26, 0x3a, 0xba, 0xde, - 0x44, 0x47, 0x7f, 0x36, 0xd1, 0xd1, 0x67, 0xcc, 0x52, 0x33, 0xcb, 0x13, 0x4c, 0xe5, 0x22, 0x2e, - 0x0a, 0xbf, 0xe6, 0x24, 0xd1, 0xe5, 0x3a, 0xfe, 0xf6, 0x7f, 0xd2, 0x9b, 0x55, 0x06, 0x3a, 0xb9, - 0xbf, 0x9b, 0xeb, 0xa7, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb8, 0xae, 0xa8, 0xbe, 0x07, - 0x00, 0x00, + // 559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xc1, 0x8e, 0x12, 0x31, + 0x18, 0xc7, 0x21, 0x26, 0x26, 0xce, 0x6a, 0xd4, 0xd1, 0xc4, 0x38, 0x87, 0xb9, 0x19, 0x75, 0x65, + 0x67, 0x64, 0x37, 0xea, 0x99, 0x65, 0x0f, 0x1e, 0xdc, 0xc4, 0xe0, 0x72, 0xf1, 0x20, 0xe9, 0x94, + 0x8f, 0x32, 0xa1, 0xb4, 0xb5, 0x2d, 0x44, 0x12, 0x13, 0x5f, 0xc1, 0xc7, 0xf2, 0xb8, 0x47, 0x8f, + 0x06, 0x5e, 0xc1, 0x07, 0x30, 0xc3, 0x40, 0xed, 0x52, 0x28, 0xc3, 0x6d, 0x86, 0xf9, 0xfd, 0xbf, + 0xdf, 0xf7, 0xb5, 0x43, 0x27, 0x78, 0xd1, 0x07, 0x35, 0xe6, 0x2a, 0x15, 0x92, 0x0f, 0x72, 0x0a, + 0x2a, 0x9d, 0x36, 0x33, 0xd0, 0xa8, 0x99, 0x8e, 0x15, 0xe9, 0x29, 0x90, 0x53, 0x90, 0x89, 0x90, + 0x5c, 0xf3, 0xf0, 0x49, 0x49, 0x26, 0x6b, 0x32, 0x59, 0x91, 0xd1, 0x63, 0xc2, 0x09, 0x5f, 0x32, + 0x69, 0x71, 0x55, 0xe2, 0xd1, 0x53, 0xc2, 0x39, 0xa1, 0x90, 0x2e, 0xef, 0xb2, 0xc9, 0x20, 0x45, + 0x6c, 0xb6, 0x7e, 0x84, 0x79, 0x51, 0xa9, 0x57, 0x66, 0xca, 0x9b, 0xd5, 0xa3, 0xc6, 0xce, 0x76, + 0x78, 0x1f, 0xe8, 0x32, 0x52, 0xfc, 0xbe, 0xa2, 0x4f, 0xf7, 0xd0, 0x12, 0x28, 0xd2, 0x39, 0x67, + 0x6a, 0x98, 0x0b, 0x55, 0x31, 0xd3, 0xd7, 0x88, 0xf4, 0x24, 0x7c, 0x9d, 0x80, 0xd2, 0xeb, 0xcc, + 0xb1, 0x67, 0x91, 0x36, 0x7b, 0x7a, 0xed, 0x65, 0xb7, 0x75, 0xe4, 0x4f, 0x6c, 0xeb, 0x27, 0xf1, + 0x26, 0xf0, 0x10, 0xe5, 0xac, 0x47, 0x73, 0x36, 0xda, 0xbf, 0xaa, 0x05, 0x8f, 0x84, 0xb0, 0xe9, + 0xd3, 0xbf, 0x77, 0x83, 0x5b, 0x97, 0x8a, 0x84, 0x24, 0x38, 0xfa, 0x84, 0xa6, 0xf0, 0xb1, 0x0c, + 0x85, 0xcf, 0x93, 0x1d, 0x2f, 0x40, 0x72, 0xa9, 0x88, 0x05, 0x46, 0x69, 0x45, 0xb0, 0x03, 0x4a, + 0x70, 0xa6, 0x20, 0x1c, 0x07, 0xf7, 0x2e, 0x80, 0x82, 0x36, 0xaa, 0x97, 0xbe, 0x0a, 0x37, 0xd0, + 0xa8, 0x59, 0x19, 0x35, 0xba, 0x1f, 0xc1, 0xa3, 0x4e, 0xb9, 0x9e, 0x17, 0x57, 0x88, 0x5c, 0x49, + 0xc4, 0xd4, 0x00, 0x64, 0xe8, 0x6d, 0x7b, 0x4b, 0x20, 0x7a, 0x77, 0x60, 0xc0, 0x34, 0xf0, 0x3d, + 0x08, 0xdb, 0x88, 0x61, 0xa0, 0x37, 0xfc, 0x89, 0xaf, 0x9c, 0xcb, 0x47, 0x6f, 0x0f, 0xe3, 0x6d, + 0x7b, 0x0b, 0x63, 0x10, 0xba, 0xba, 0xdd, 0xe5, 0xfd, 0x76, 0x97, 0xb7, 0xed, 0x1d, 0x18, 0x4c, + 0x14, 0x54, 0xb7, 0xbb, 0xbc, 0xdf, 0xee, 0xf2, 0xc6, 0x3e, 0x0b, 0xc2, 0xb6, 0x04, 0xa4, 0xa1, + 0x63, 0xfd, 0x0f, 0xf7, 0xac, 0xbc, 0xc3, 0x47, 0x67, 0x3b, 0x79, 0x17, 0xb6, 0xd5, 0xe5, 0xeb, + 0x58, 0x5d, 0xed, 0xf2, 0x1e, 0xb5, 0x0b, 0x1b, 0xf5, 0x97, 0xe0, 0xce, 0x39, 0xe5, 0x78, 0xd4, + 0x55, 0x20, 0xc3, 0x67, 0x3e, 0xa3, 0xc1, 0xa2, 0xe3, 0x9d, 0x98, 0x61, 0x4c, 0xfd, 0x7e, 0x70, + 0xd4, 0x65, 0x99, 0x31, 0x78, 0x0f, 0x0a, 0x0b, 0x8c, 0x1a, 0x3b, 0x41, 0x8b, 0x32, 0x16, 0x15, + 0x3c, 0xf8, 0x90, 0xb3, 0x51, 0xbb, 0x38, 0xdd, 0x5a, 0x18, 0xf3, 0x09, 0xd3, 0x61, 0xc3, 0xa7, + 0xda, 0xa4, 0x3d, 0x67, 0xc5, 0x26, 0x6a, 0xef, 0x5a, 0x97, 0xd1, 0x4d, 0x6d, 0xe2, 0x9f, 0x70, + 0x93, 0xf7, 0xec, 0x9a, 0x0b, 0x5b, 0xf3, 0xde, 0x2f, 0xda, 0x6a, 0x09, 0x41, 0x73, 0xbc, 0xdc, + 0xd4, 0xf0, 0xd5, 0xbe, 0x71, 0x2d, 0xd8, 0x23, 0x75, 0x61, 0x6b, 0xde, 0x87, 0x65, 0x4b, 0xb6, + 0xf6, 0x64, 0xff, 0xb8, 0xb6, 0xf8, 0xcd, 0x41, 0xf8, 0x5a, 0x7d, 0xfe, 0xfe, 0xd7, 0x3c, 0xae, + 0x5f, 0xcf, 0xe3, 0xfa, 0x9f, 0x79, 0x5c, 0xff, 0xb9, 0x88, 0x6b, 0xd7, 0x8b, 0xb8, 0xf6, 0x7b, + 0x11, 0xd7, 0x3e, 0x27, 0x24, 0xd7, 0xc3, 0x49, 0x96, 0x60, 0x3e, 0x4e, 0xcb, 0xd2, 0x27, 0x14, + 0x65, 0x6a, 0x75, 0x9d, 0x7e, 0xfb, 0xff, 0x5d, 0xd3, 0x33, 0x01, 0x2a, 0xbb, 0xbd, 0xfc, 0x8e, + 0x9d, 0xfd, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xa4, 0x77, 0x3b, 0xdc, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -111,6 +113,11 @@ type MsgClient interface { // UnlinkChainAccount defines a method to unlink an external chain account // from a profile UnlinkChainAccount(ctx context.Context, in *MsgUnlinkChainAccount, opts ...grpc.CallOption) (*UnlinkChainAccountResponse, error) + // LinkApplication defines a method to create a centralized application + // link + LinkApplication(ctx context.Context, in *MsgLinkApplication, opts ...grpc.CallOption) (*MsgLinkApplicationResponse, error) + // UnlinkApplication defines a method to remove a centralized application + UnlinkApplication(ctx context.Context, in *MsgUnlinkApplication, opts ...grpc.CallOption) (*MsgUnlinkApplicationResponse, error) } type msgClient struct { @@ -229,6 +236,24 @@ func (c *msgClient) UnlinkChainAccount(ctx context.Context, in *MsgUnlinkChainAc return out, nil } +func (c *msgClient) LinkApplication(ctx context.Context, in *MsgLinkApplication, opts ...grpc.CallOption) (*MsgLinkApplicationResponse, error) { + out := new(MsgLinkApplicationResponse) + err := c.cc.Invoke(ctx, "/desmos.profiles.v1beta1.Msg/LinkApplication", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UnlinkApplication(ctx context.Context, in *MsgUnlinkApplication, opts ...grpc.CallOption) (*MsgUnlinkApplicationResponse, error) { + out := new(MsgUnlinkApplicationResponse) + err := c.cc.Invoke(ctx, "/desmos.profiles.v1beta1.Msg/UnlinkApplication", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // SaveProfile defines the method to save a profile @@ -261,6 +286,11 @@ type MsgServer interface { // UnlinkChainAccount defines a method to unlink an external chain account // from a profile UnlinkChainAccount(context.Context, *MsgUnlinkChainAccount) (*UnlinkChainAccountResponse, error) + // LinkApplication defines a method to create a centralized application + // link + LinkApplication(context.Context, *MsgLinkApplication) (*MsgLinkApplicationResponse, error) + // UnlinkApplication defines a method to remove a centralized application + UnlinkApplication(context.Context, *MsgUnlinkApplication) (*MsgUnlinkApplicationResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -303,6 +333,12 @@ func (*UnimplementedMsgServer) LinkChainAccount(ctx context.Context, req *MsgLin func (*UnimplementedMsgServer) UnlinkChainAccount(ctx context.Context, req *MsgUnlinkChainAccount) (*UnlinkChainAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UnlinkChainAccount not implemented") } +func (*UnimplementedMsgServer) LinkApplication(ctx context.Context, req *MsgLinkApplication) (*MsgLinkApplicationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LinkApplication not implemented") +} +func (*UnimplementedMsgServer) UnlinkApplication(ctx context.Context, req *MsgUnlinkApplication) (*MsgUnlinkApplicationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UnlinkApplication not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -524,6 +560,42 @@ func _Msg_UnlinkChainAccount_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Msg_LinkApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgLinkApplication) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).LinkApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/desmos.profiles.v1beta1.Msg/LinkApplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).LinkApplication(ctx, req.(*MsgLinkApplication)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UnlinkApplication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUnlinkApplication) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UnlinkApplication(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/desmos.profiles.v1beta1.Msg/UnlinkApplication", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UnlinkApplication(ctx, req.(*MsgUnlinkApplication)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "desmos.profiles.v1beta1.Msg", HandlerType: (*MsgServer)(nil), @@ -576,6 +648,14 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "UnlinkChainAccount", Handler: _Msg_UnlinkChainAccount_Handler, }, + { + MethodName: "LinkApplication", + Handler: _Msg_LinkApplication_Handler, + }, + { + MethodName: "UnlinkApplication", + Handler: _Msg_UnlinkApplication_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "desmos/profiles/v1beta1/msg_server.proto", diff --git a/x/profiles/types/msgs_app_links.go b/x/profiles/types/msgs_app_links.go new file mode 100644 index 0000000000..c7bb7de75b --- /dev/null +++ b/x/profiles/types/msgs_app_links.go @@ -0,0 +1,125 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + clienttypes "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" +) + +// NewMsgLinkApplication creates a new MsgLinkApplication instance +// nolint:interfacer +func NewMsgLinkApplication( + linkData Data, callData OracleRequest_CallData, sender sdk.AccAddress, + sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, +) *MsgLinkApplication { + return &MsgLinkApplication{ + Sender: sender.String(), + LinkData: linkData, + CallData: callData, + SourcePort: sourcePort, + SourceChannel: sourceChannel, + TimeoutHeight: timeoutHeight, + TimeoutTimestamp: timeoutTimestamp, + } +} + +// Route implements sdk.Msg +func (MsgLinkApplication) Route() string { + return RouterKey +} + +// Type implements sdk.Msg +func (MsgLinkApplication) Type() string { + return ActionLinkApplication +} + +// ValidateBasic performs a basic check of the MsgLinkApplication fields. +// NOTE: timeout height or timestamp values can be 0 to disable the timeout. +func (msg MsgLinkApplication) ValidateBasic() error { + if err := host.PortIdentifierValidator(msg.SourcePort); err != nil { + return sdkerrors.Wrap(err, "invalid source port ID") + } + if err := host.ChannelIdentifierValidator(msg.SourceChannel); err != nil { + return sdkerrors.Wrap(err, "invalid source channel ID") + } + + // NOTE: sender format must be validated as it is required by the GetSigners function. + _, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) + } + + return nil +} + +// GetSignBytes implements sdk.Msg. +func (msg MsgLinkApplication) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) +} + +// GetSigners implements sdk.Msg +func (msg MsgLinkApplication) GetSigners() []sdk.AccAddress { + valAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{valAddr} +} + +// ------------------------------------------------------------------------------------------------------------------- + +// NewMsgUnlinkApplication creates a new MsgUnlinkApplication instance +// nolint:interfacer +func NewMsgUnlinkApplication(application, username string, signer sdk.AccAddress) *MsgUnlinkApplication { + return &MsgUnlinkApplication{ + Application: application, + Username: username, + Signer: signer.String(), + } +} + +// Route implements sdk.Msg +func (MsgUnlinkApplication) Route() string { + return RouterKey +} + +// Type implements sdk.Msg +func (MsgUnlinkApplication) Type() string { + return ActionUnlinkApplication +} + +// ValidateBasic performs a basic check of the MsgUnlinkApplication fields. +// NOTE: timeout height or timestamp values can be 0 to disable the timeout. +func (msg MsgUnlinkApplication) ValidateBasic() error { + if len(strings.TrimSpace(msg.Application)) == 0 { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "application cannot be empty or blank") + } + if len(strings.TrimSpace(msg.Username)) == 0 { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "username cannot be empty or blank") + } + + // NOTE: sender format must be validated as it is required by the GetSigners function. + _, err := sdk.AccAddressFromBech32(msg.Signer) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "string could not be parsed as address: %v", err) + } + + return nil +} + +// GetSignBytes implements sdk.Msg. +func (msg MsgUnlinkApplication) GetSignBytes() []byte { + return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) +} + +// GetSigners implements sdk.Msg +func (msg MsgUnlinkApplication) GetSigners() []sdk.AccAddress { + valAddr, err := sdk.AccAddressFromBech32(msg.Signer) + if err != nil { + panic(err) + } + return []sdk.AccAddress{valAddr} +} diff --git a/x/profiles/types/msgs_app_links.pb.go b/x/profiles/types/msgs_app_links.pb.go new file mode 100644 index 0000000000..1f0910f56d --- /dev/null +++ b/x/profiles/types/msgs_app_links.pb.go @@ -0,0 +1,1102 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: desmos/profiles/v1beta1/msgs_app_links.proto + +package types + +import ( + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgLinkApplication defines a msg to connect a profile with a +// centralized application account (eg. Twitter, GitHub, etc). +type MsgLinkApplication struct { + // The sender of the connection request + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` + // LinkData contains the data related to the application to which connect + LinkData Data `protobuf:"bytes,2,opt,name=link_data,json=linkData,proto3" json:"link_data" yaml:"link_data"` + // CallData contains the data used to verify the link + CallData OracleRequest_CallData `protobuf:"bytes,3,opt,name=call_data,json=callData,proto3" json:"call_data" yaml:"call_data"` + // The port on which the packet will be sent + SourcePort string `protobuf:"bytes,4,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty" yaml:"source_port"` + // The channel by which the packet will be sent + SourceChannel string `protobuf:"bytes,5,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty" yaml:"source_channel"` + // Timeout height relative to the current block height. + // The timeout is disabled when set to 0. + TimeoutHeight types.Height `protobuf:"bytes,6,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height" yaml:"timeout_height"` + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. + // The timeout is disabled when set to 0. + TimeoutTimestamp uint64 `protobuf:"varint,7,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty" yaml:"timeout_timestamp"` +} + +func (m *MsgLinkApplication) Reset() { *m = MsgLinkApplication{} } +func (m *MsgLinkApplication) String() string { return proto.CompactTextString(m) } +func (*MsgLinkApplication) ProtoMessage() {} +func (*MsgLinkApplication) Descriptor() ([]byte, []int) { + return fileDescriptor_6e498d4bf623671e, []int{0} +} +func (m *MsgLinkApplication) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLinkApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLinkApplication.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLinkApplication) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLinkApplication.Merge(m, src) +} +func (m *MsgLinkApplication) XXX_Size() int { + return m.Size() +} +func (m *MsgLinkApplication) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLinkApplication.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLinkApplication proto.InternalMessageInfo + +// MsgLinkApplicationResponse defines the Msg/LinkApplication +// response type. +type MsgLinkApplicationResponse struct { +} + +func (m *MsgLinkApplicationResponse) Reset() { *m = MsgLinkApplicationResponse{} } +func (m *MsgLinkApplicationResponse) String() string { return proto.CompactTextString(m) } +func (*MsgLinkApplicationResponse) ProtoMessage() {} +func (*MsgLinkApplicationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e498d4bf623671e, []int{1} +} +func (m *MsgLinkApplicationResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLinkApplicationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLinkApplicationResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLinkApplicationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLinkApplicationResponse.Merge(m, src) +} +func (m *MsgLinkApplicationResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgLinkApplicationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLinkApplicationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLinkApplicationResponse proto.InternalMessageInfo + +// MsgUnlinkApplication defines a msg to delete an application link from a user +// profile +type MsgUnlinkApplication struct { + // Application represents the name of the application to unlink + Application string `protobuf:"bytes,1,opt,name=application,proto3" json:"application,omitempty" yaml:"application"` + // Username represents the username inside the application to unlink + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty" yaml:"username"` + // Signer represents the Desmos account to which the application should be + // unlinked + Signer string `protobuf:"bytes,3,opt,name=signer,proto3" json:"signer,omitempty" yaml:"signer"` +} + +func (m *MsgUnlinkApplication) Reset() { *m = MsgUnlinkApplication{} } +func (m *MsgUnlinkApplication) String() string { return proto.CompactTextString(m) } +func (*MsgUnlinkApplication) ProtoMessage() {} +func (*MsgUnlinkApplication) Descriptor() ([]byte, []int) { + return fileDescriptor_6e498d4bf623671e, []int{2} +} +func (m *MsgUnlinkApplication) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUnlinkApplication) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUnlinkApplication.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUnlinkApplication) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUnlinkApplication.Merge(m, src) +} +func (m *MsgUnlinkApplication) XXX_Size() int { + return m.Size() +} +func (m *MsgUnlinkApplication) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUnlinkApplication.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUnlinkApplication proto.InternalMessageInfo + +// MsgUnlinkApplicationResponse defines the Msg/UnlinkApplication response +// type. +type MsgUnlinkApplicationResponse struct { +} + +func (m *MsgUnlinkApplicationResponse) Reset() { *m = MsgUnlinkApplicationResponse{} } +func (m *MsgUnlinkApplicationResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUnlinkApplicationResponse) ProtoMessage() {} +func (*MsgUnlinkApplicationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e498d4bf623671e, []int{3} +} +func (m *MsgUnlinkApplicationResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUnlinkApplicationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUnlinkApplicationResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUnlinkApplicationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUnlinkApplicationResponse.Merge(m, src) +} +func (m *MsgUnlinkApplicationResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUnlinkApplicationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUnlinkApplicationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUnlinkApplicationResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgLinkApplication)(nil), "desmos.profiles.v1beta1.MsgLinkApplication") + proto.RegisterType((*MsgLinkApplicationResponse)(nil), "desmos.profiles.v1beta1.MsgLinkApplicationResponse") + proto.RegisterType((*MsgUnlinkApplication)(nil), "desmos.profiles.v1beta1.MsgUnlinkApplication") + proto.RegisterType((*MsgUnlinkApplicationResponse)(nil), "desmos.profiles.v1beta1.MsgUnlinkApplicationResponse") +} + +func init() { + proto.RegisterFile("desmos/profiles/v1beta1/msgs_app_links.proto", fileDescriptor_6e498d4bf623671e) +} + +var fileDescriptor_6e498d4bf623671e = []byte{ + // 577 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcf, 0x6e, 0xd3, 0x30, + 0x1c, 0x4e, 0x60, 0x8c, 0xd6, 0xd3, 0xc6, 0x16, 0x06, 0x84, 0x6a, 0x4b, 0x2a, 0x9f, 0x8a, 0x04, + 0x8e, 0x0a, 0x07, 0xd0, 0x4e, 0x90, 0x71, 0x18, 0x12, 0x13, 0x28, 0x1a, 0x17, 0x2e, 0xc5, 0x49, + 0xbd, 0xd4, 0x9a, 0x13, 0x87, 0xd8, 0xad, 0xd8, 0x1b, 0x70, 0xe4, 0x11, 0xf6, 0x06, 0xdc, 0x78, + 0x86, 0x1d, 0x77, 0xe4, 0x14, 0xa1, 0xf6, 0xc2, 0x39, 0x4f, 0x80, 0xe2, 0xb8, 0xff, 0xd8, 0x7a, + 0xca, 0xcf, 0xdf, 0xef, 0xfb, 0x7d, 0xf6, 0x17, 0x7f, 0x06, 0x4f, 0xfb, 0x44, 0x24, 0x5c, 0x78, + 0x59, 0xce, 0x4f, 0x29, 0x23, 0xc2, 0x1b, 0x75, 0x43, 0x22, 0x71, 0xd7, 0x4b, 0x44, 0x2c, 0x7a, + 0x38, 0xcb, 0x7a, 0x8c, 0xa6, 0x67, 0x02, 0x65, 0x39, 0x97, 0xdc, 0x7a, 0x54, 0xb3, 0xd1, 0x94, + 0x8d, 0x34, 0xbb, 0x85, 0x56, 0xca, 0xf0, 0x3e, 0x61, 0xd7, 0x84, 0x5a, 0xbb, 0x31, 0x8f, 0xb9, + 0x2a, 0xbd, 0xaa, 0xd2, 0xa8, 0x4b, 0xc3, 0xc8, 0x8b, 0x78, 0x4e, 0xbc, 0x88, 0x51, 0x92, 0x4a, + 0x6f, 0xd4, 0xd5, 0x55, 0x4d, 0x80, 0x3f, 0xd7, 0x80, 0x75, 0x2c, 0xe2, 0xf7, 0x34, 0x3d, 0x7b, + 0x93, 0x65, 0x8c, 0x46, 0x58, 0x52, 0x9e, 0x5a, 0x4f, 0xc0, 0xba, 0x20, 0x69, 0x9f, 0xe4, 0xb6, + 0xd9, 0x36, 0x3b, 0x4d, 0x7f, 0xa7, 0x2c, 0xdc, 0xcd, 0x73, 0x9c, 0xb0, 0x03, 0x58, 0xe3, 0x30, + 0xd0, 0x04, 0xeb, 0x04, 0x34, 0xab, 0x73, 0xf4, 0xfa, 0x58, 0x62, 0xfb, 0x56, 0xdb, 0xec, 0x6c, + 0x3c, 0xdf, 0x47, 0x2b, 0x5c, 0xa1, 0xb7, 0x58, 0x62, 0xdf, 0xbe, 0x2c, 0x5c, 0xa3, 0x2c, 0xdc, + 0xed, 0x5a, 0x70, 0x36, 0x0d, 0x83, 0x46, 0x55, 0x57, 0x1c, 0xeb, 0x14, 0x34, 0x23, 0xcc, 0x58, + 0xad, 0x7a, 0x5b, 0xa9, 0x7a, 0x2b, 0x55, 0x3f, 0xe4, 0x38, 0x62, 0x24, 0x20, 0x5f, 0x87, 0x44, + 0x48, 0x74, 0x88, 0x19, 0xbb, 0x69, 0x9f, 0x99, 0x1e, 0x0c, 0x1a, 0x91, 0xe6, 0x58, 0x2f, 0xc1, + 0x86, 0xe0, 0xc3, 0x3c, 0x22, 0xbd, 0x8c, 0xe7, 0xd2, 0x5e, 0x53, 0x6e, 0x1f, 0x96, 0x85, 0x6b, + 0x69, 0xb7, 0xf3, 0x26, 0x0c, 0x40, 0xbd, 0xfa, 0xc8, 0x73, 0x69, 0xbd, 0x06, 0x5b, 0xba, 0x17, + 0x0d, 0x70, 0x9a, 0x12, 0x66, 0xdf, 0x51, 0xb3, 0x8f, 0xcb, 0xc2, 0x7d, 0xb0, 0x34, 0xab, 0xfb, + 0x30, 0xd8, 0xac, 0x81, 0xc3, 0x7a, 0x6d, 0x7d, 0x01, 0x5b, 0x92, 0x26, 0x84, 0x0f, 0x65, 0x6f, + 0x40, 0x68, 0x3c, 0x90, 0xf6, 0xba, 0xf2, 0xd9, 0x42, 0x34, 0x8c, 0x50, 0x75, 0x69, 0x48, 0x5f, + 0xd5, 0xa8, 0x8b, 0x8e, 0x14, 0xc3, 0xdf, 0xd7, 0x96, 0xf4, 0x0e, 0xcb, 0xf3, 0x30, 0xd8, 0xd4, + 0x40, 0xcd, 0xb6, 0xde, 0x81, 0x9d, 0x29, 0xa3, 0xfa, 0x0a, 0x89, 0x93, 0xcc, 0xbe, 0xdb, 0x36, + 0x3b, 0x6b, 0xfe, 0x5e, 0x59, 0xb8, 0xf6, 0xb2, 0xc8, 0x8c, 0x02, 0x83, 0x6d, 0x8d, 0x9d, 0x4c, + 0xa1, 0x83, 0xc6, 0xf7, 0x0b, 0xd7, 0xf8, 0x7b, 0xe1, 0x1a, 0x70, 0x0f, 0xb4, 0xae, 0x07, 0x26, + 0x20, 0x22, 0xe3, 0xa9, 0x20, 0xf0, 0x97, 0x09, 0x76, 0x8f, 0x45, 0xfc, 0x29, 0x65, 0xff, 0x25, + 0xea, 0x15, 0xd8, 0xc0, 0xf3, 0xa5, 0x8e, 0xd5, 0xc2, 0x8f, 0x5e, 0x68, 0xc2, 0x60, 0x91, 0x6a, + 0x79, 0xa0, 0x31, 0x14, 0x24, 0x4f, 0x71, 0x42, 0x54, 0xbe, 0x9a, 0xfe, 0xfd, 0xb2, 0x70, 0xef, + 0xd5, 0x63, 0xd3, 0x0e, 0x0c, 0x66, 0x24, 0x15, 0x5e, 0x1a, 0xa7, 0x24, 0x57, 0xc1, 0x59, 0x0e, + 0xaf, 0xc2, 0xab, 0xf0, 0xaa, 0x62, 0xc1, 0x96, 0x03, 0xf6, 0x6e, 0x3a, 0xf7, 0xd4, 0x98, 0x7f, + 0x74, 0x39, 0x76, 0xcc, 0xab, 0xb1, 0x63, 0xfe, 0x19, 0x3b, 0xe6, 0x8f, 0x89, 0x63, 0x5c, 0x4d, + 0x1c, 0xe3, 0xf7, 0xc4, 0x31, 0x3e, 0xa3, 0x98, 0xca, 0xc1, 0x30, 0x44, 0x11, 0x4f, 0xbc, 0x3a, + 0xa1, 0xcf, 0x18, 0x0e, 0x85, 0xae, 0xbd, 0x6f, 0xf3, 0x27, 0x2c, 0xcf, 0x33, 0x22, 0xc2, 0x75, + 0xf5, 0xf2, 0x5e, 0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xe7, 0x74, 0x8a, 0x29, 0x04, 0x00, + 0x00, +} + +func (m *MsgLinkApplication) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLinkApplication) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLinkApplication) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.TimeoutTimestamp != 0 { + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(m.TimeoutTimestamp)) + i-- + dAtA[i] = 0x38 + } + { + size, err := m.TimeoutHeight.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.SourceChannel) > 0 { + i -= len(m.SourceChannel) + copy(dAtA[i:], m.SourceChannel) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.SourceChannel))) + i-- + dAtA[i] = 0x2a + } + if len(m.SourcePort) > 0 { + i -= len(m.SourcePort) + copy(dAtA[i:], m.SourcePort) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.SourcePort))) + i-- + dAtA[i] = 0x22 + } + { + size, err := m.CallData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.LinkData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgLinkApplicationResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLinkApplicationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLinkApplicationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUnlinkApplication) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUnlinkApplication) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUnlinkApplication) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0x1a + } + if len(m.Username) > 0 { + i -= len(m.Username) + copy(dAtA[i:], m.Username) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.Username))) + i-- + dAtA[i] = 0x12 + } + if len(m.Application) > 0 { + i -= len(m.Application) + copy(dAtA[i:], m.Application) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.Application))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUnlinkApplicationResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUnlinkApplicationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUnlinkApplicationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintMsgsAppLinks(dAtA []byte, offset int, v uint64) int { + offset -= sovMsgsAppLinks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgLinkApplication) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + l = m.LinkData.Size() + n += 1 + l + sovMsgsAppLinks(uint64(l)) + l = m.CallData.Size() + n += 1 + l + sovMsgsAppLinks(uint64(l)) + l = len(m.SourcePort) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + l = len(m.SourceChannel) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + l = m.TimeoutHeight.Size() + n += 1 + l + sovMsgsAppLinks(uint64(l)) + if m.TimeoutTimestamp != 0 { + n += 1 + sovMsgsAppLinks(uint64(m.TimeoutTimestamp)) + } + return n +} + +func (m *MsgLinkApplicationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUnlinkApplication) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Application) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + l = len(m.Username) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } + return n +} + +func (m *MsgUnlinkApplicationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovMsgsAppLinks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozMsgsAppLinks(x uint64) (n int) { + return sovMsgsAppLinks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgLinkApplication) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLinkApplication: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLinkApplication: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LinkData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LinkData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CallData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourcePort = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceChannel = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TimeoutHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTimestamp", wireType) + } + m.TimeoutTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipMsgsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgLinkApplicationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLinkApplicationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLinkApplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipMsgsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUnlinkApplication) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUnlinkApplication: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUnlinkApplication: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Application", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Application = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMsgsAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMsgsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUnlinkApplicationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUnlinkApplicationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUnlinkApplicationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipMsgsAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMsgsAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipMsgsAppLinks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMsgsAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthMsgsAppLinks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupMsgsAppLinks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthMsgsAppLinks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthMsgsAppLinks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMsgsAppLinks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupMsgsAppLinks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/profiles/types/packet.go b/x/profiles/types/packet.go new file mode 100644 index 0000000000..51254dd9d5 --- /dev/null +++ b/x/profiles/types/packet.go @@ -0,0 +1,16 @@ +package types + +import "time" + +var ( + // DefaultRelativePacketTimeoutHeight is the default packet timeout height (in blocks) relative + // to the current block height of the counterparty chain provided by the client state. The + // timeout is disabled when set to 0. + DefaultRelativePacketTimeoutHeight = "0-1000" + + // DefaultRelativePacketTimeoutTimestamp is the default packet timeout timestamp (in nanoseconds) + // relative to the current block timestamp of the counterparty chain provided by the client + // state. The timeout is disabled when set to 0. The default is currently set to a 10 minute + // timeout. + DefaultRelativePacketTimeoutTimestamp = uint64((time.Duration(10) * time.Minute).Nanoseconds()) +) diff --git a/x/profiles/types/query.pb.go b/x/profiles/types/query.pb.go index 899feb5de4..9ba1a50b46 100644 --- a/x/profiles/types/query.pb.go +++ b/x/profiles/types/query.pb.go @@ -35,42 +35,45 @@ func init() { } var fileDescriptor_5e0074f57a59f38d = []byte{ - // 549 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x3d, 0x6f, 0xd3, 0x4e, - 0x1c, 0xc7, 0xe3, 0xbf, 0xf4, 0x2f, 0xc8, 0x12, 0x03, 0x27, 0x24, 0x44, 0x84, 0x8c, 0x80, 0xa1, - 0xd0, 0x34, 0xbe, 0x26, 0x41, 0x14, 0x31, 0x86, 0x0e, 0x08, 0x31, 0x94, 0xaa, 0x2c, 0x2c, 0xd6, - 0x39, 0xb9, 0x38, 0x56, 0x9c, 0x3b, 0xf7, 0x7e, 0x67, 0x44, 0x14, 0x65, 0x61, 0x66, 0x40, 0x62, - 0x61, 0x61, 0x63, 0xe1, 0x5d, 0x30, 0x32, 0x56, 0xea, 0xc2, 0x88, 0x12, 0x5e, 0x08, 0xf2, 0x3d, - 0x98, 0x46, 0xc8, 0x8e, 0xb3, 0xf9, 0xce, 0x9f, 0xef, 0xfd, 0x3e, 0xf7, 0xe8, 0xde, 0x1f, 0x52, - 0x98, 0x72, 0xc0, 0xa9, 0xe0, 0xa3, 0x38, 0xa1, 0x80, 0xdf, 0x76, 0x42, 0x2a, 0x49, 0x07, 0x9f, - 0x65, 0x54, 0xcc, 0xfc, 0x54, 0x70, 0xc9, 0xd1, 0x4d, 0x0d, 0xf9, 0x16, 0xf2, 0x0d, 0xd4, 0xbc, - 0x11, 0xf1, 0x88, 0x2b, 0x06, 0xe7, 0x5f, 0x1a, 0x6f, 0xde, 0x8e, 0x38, 0x8f, 0x12, 0x8a, 0x49, - 0x1a, 0x63, 0xc2, 0x18, 0x97, 0x44, 0xc6, 0x9c, 0x81, 0xf9, 0x7b, 0xcb, 0xfc, 0x55, 0xad, 0x30, - 0x1b, 0x61, 0xc2, 0x4c, 0x9d, 0x66, 0xab, 0x52, 0x26, 0x30, 0xdd, 0x06, 0xee, 0x54, 0xc3, 0x82, - 0x26, 0xba, 0xec, 0x38, 0x4e, 0xa1, 0x5e, 0x64, 0x28, 0x49, 0x14, 0x08, 0x7a, 0x96, 0x51, 0x90, - 0x36, 0xb2, 0xb7, 0x41, 0x89, 0x08, 0x32, 0xb5, 0x2c, 0xae, 0x66, 0x07, 0x63, 0x12, 0xb3, 0x20, - 0x89, 0xd9, 0xa4, 0x58, 0x8a, 0x01, 0xcf, 0x03, 0x81, 0x5e, 0x41, 0xdd, 0xb0, 0x75, 0x75, 0x0b, - 0x87, 0x04, 0xa8, 0xce, 0x17, 0xa3, 0xa5, 0x24, 0x8a, 0x99, 0x9a, 0x9b, 0x66, 0xbb, 0x5f, 0xae, - 0xba, 0xff, 0xbf, 0xca, 0x11, 0xf4, 0xd9, 0x71, 0xaf, 0x1c, 0xeb, 0xea, 0x68, 0xdf, 0x2f, 0xd9, - 0x35, 0x5f, 0xb1, 0x06, 0x3b, 0xd1, 0xd3, 0x6d, 0xb6, 0x6b, 0xd2, 0x90, 0x72, 0x06, 0xf4, 0xde, - 0xc1, 0xfb, 0x8b, 0xdf, 0x9f, 0xfe, 0xdb, 0x43, 0x0f, 0x4a, 0xe7, 0x5c, 0x74, 0xcc, 0x33, 0xa0, - 0x62, 0x81, 0xbe, 0x39, 0xee, 0xb5, 0xa3, 0x53, 0x12, 0x9d, 0x0a, 0xc2, 0x60, 0x44, 0x05, 0xa0, - 0x6e, 0x75, 0xc9, 0x35, 0xd8, 0x6a, 0xf6, 0xb6, 0xca, 0x18, 0x59, 0xac, 0x64, 0x1f, 0xa2, 0xdd, - 0x52, 0x59, 0xb5, 0xf3, 0xb2, 0x30, 0xfb, 0xe0, 0xb8, 0x3b, 0xc7, 0x6a, 0x67, 0x51, 0x6b, 0xc3, - 0xba, 0x28, 0xca, 0xda, 0xed, 0xd7, 0x83, 0x8d, 0xd6, 0xae, 0xd2, 0xba, 0x8b, 0xee, 0x94, 0xaf, - 0xa1, 0x76, 0xf8, 0xee, 0xb8, 0xd7, 0x5f, 0x03, 0x15, 0x27, 0x97, 0x8f, 0x34, 0x7a, 0x5c, 0x5d, - 0xec, 0x9f, 0x80, 0x95, 0x3c, 0xdc, 0x3a, 0x67, 0x7c, 0x9f, 0x2a, 0xdf, 0x47, 0xa8, 0x6b, 0x7d, - 0xd7, 0xae, 0x58, 0x21, 0xbd, 0xde, 0x6b, 0x76, 0xff, 0xab, 0xe3, 0xba, 0xf9, 0xc8, 0xfd, 0x84, - 0x0f, 0x26, 0x80, 0xf0, 0x66, 0x07, 0x4d, 0x5a, 0xe9, 0x83, 0xfa, 0x01, 0x63, 0xdb, 0x53, 0xb6, - 0x6d, 0xd4, 0xaa, 0xb6, 0x0d, 0x55, 0xca, 0x6a, 0x5e, 0x38, 0x2e, 0x32, 0x47, 0xbd, 0x3f, 0x7b, - 0x96, 0xdf, 0xd7, 0x97, 0x31, 0x9b, 0xa0, 0xc3, 0x5a, 0x97, 0xe3, 0x52, 0xc2, 0x6a, 0x3f, 0xd9, - 0x3e, 0x68, 0xf4, 0x5f, 0x28, 0xfd, 0x23, 0xd4, 0x2f, 0x3d, 0x1c, 0xea, 0x39, 0x69, 0xab, 0xe7, - 0x04, 0xcf, 0xf5, 0xdb, 0xc2, 0xc8, 0x94, 0x2e, 0xf0, 0x5c, 0x12, 0x11, 0x51, 0x19, 0x90, 0xe1, - 0x50, 0x50, 0x80, 0x45, 0xff, 0xf9, 0x8f, 0xa5, 0xe7, 0x9c, 0x2f, 0x3d, 0xe7, 0xd7, 0xd2, 0x73, - 0x3e, 0xae, 0xbc, 0xc6, 0xf9, 0xca, 0x6b, 0xfc, 0x5c, 0x79, 0x8d, 0x37, 0x7e, 0x14, 0xcb, 0x71, - 0x16, 0xfa, 0x03, 0x3e, 0x35, 0x75, 0xda, 0x09, 0x09, 0xc1, 0xd6, 0x7c, 0xf7, 0xb7, 0xaa, 0x9c, - 0xa5, 0x14, 0xc2, 0x1d, 0xf5, 0xe0, 0xf4, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xd7, 0xa3, - 0x2f, 0x36, 0x06, 0x00, 0x00, + // 602 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x3f, 0x6f, 0x13, 0x3f, + 0x18, 0xc7, 0x73, 0x3f, 0xe9, 0x57, 0xc4, 0x49, 0x0c, 0x58, 0x95, 0x50, 0x23, 0x74, 0x08, 0x18, + 0x4a, 0x9b, 0xe6, 0xdc, 0x24, 0x88, 0x42, 0x37, 0x42, 0x07, 0x84, 0x18, 0x4a, 0x55, 0x16, 0x96, + 0xc8, 0x97, 0x38, 0x17, 0x2b, 0x17, 0xdb, 0xb5, 0x7d, 0x88, 0x28, 0xca, 0xc2, 0xcc, 0x80, 0xc4, + 0xc2, 0x0b, 0x60, 0xe1, 0x5d, 0x30, 0x32, 0x56, 0xea, 0xc2, 0x58, 0x25, 0xbc, 0x10, 0x74, 0xfe, + 0x13, 0x1a, 0xd0, 0x5d, 0x2e, 0x6c, 0x67, 0xdf, 0xf7, 0xfb, 0x3c, 0x9f, 0xe7, 0xf1, 0x63, 0xfb, + 0xf7, 0x7b, 0x58, 0x8e, 0x98, 0x84, 0x5c, 0xb0, 0x3e, 0x49, 0xb0, 0x84, 0x6f, 0x1b, 0x11, 0x56, + 0xa8, 0x01, 0xcf, 0x52, 0x2c, 0xc6, 0x21, 0x17, 0x4c, 0x31, 0x70, 0xcb, 0x88, 0x42, 0x27, 0x0a, + 0xad, 0xa8, 0xba, 0x19, 0xb3, 0x98, 0x69, 0x0d, 0xcc, 0xbe, 0x8c, 0xbc, 0x7a, 0x3b, 0x66, 0x2c, + 0x4e, 0x30, 0x44, 0x9c, 0x40, 0x44, 0x29, 0x53, 0x48, 0x11, 0x46, 0xa5, 0xfd, 0xbb, 0x65, 0xff, + 0xea, 0x55, 0x94, 0xf6, 0x21, 0xa2, 0x36, 0x4f, 0xb5, 0x56, 0x08, 0xd3, 0xb1, 0xdb, 0x56, 0xdc, + 0x28, 0x16, 0x0b, 0x9c, 0x98, 0xb4, 0x03, 0xc2, 0x65, 0x39, 0x4b, 0x4f, 0xa1, 0xb8, 0x23, 0xf0, + 0x59, 0x8a, 0xa5, 0x72, 0x96, 0xdd, 0x15, 0x48, 0x48, 0xa0, 0x91, 0xd3, 0xc2, 0x62, 0x6d, 0x77, + 0x80, 0x08, 0xed, 0x24, 0x84, 0x0e, 0x9d, 0xa1, 0x5e, 0x6c, 0x40, 0x9c, 0x2f, 0xc9, 0xb7, 0xba, + 0x2c, 0x93, 0x77, 0x4c, 0xc3, 0xcd, 0xc2, 0x61, 0x9a, 0x15, 0x8c, 0x90, 0xc4, 0xc6, 0xbd, 0x88, + 0xc5, 0x51, 0x4c, 0xa8, 0x6e, 0x85, 0xd1, 0x36, 0x2f, 0xaf, 0xfb, 0xff, 0xbf, 0xca, 0x24, 0xe0, + 0xb3, 0xe7, 0x5f, 0x3b, 0x36, 0xb9, 0xc1, 0x5e, 0x98, 0x73, 0xc8, 0xa1, 0xd6, 0x5a, 0xd9, 0x89, + 0xe9, 0x4e, 0xb5, 0x5e, 0x52, 0x2d, 0x39, 0xa3, 0x12, 0xdf, 0xdb, 0x7f, 0x7f, 0xf1, 0xf3, 0xd3, + 0x7f, 0xbb, 0xe0, 0x41, 0x6e, 0x8b, 0x16, 0x1b, 0x93, 0x54, 0x62, 0x31, 0x05, 0x5f, 0x3d, 0xff, + 0xc6, 0xd1, 0x29, 0x8a, 0x4f, 0x05, 0xa2, 0xb2, 0x8f, 0x85, 0x04, 0xcd, 0xe2, 0x94, 0x4b, 0x62, + 0x87, 0xd9, 0x5a, 0xcb, 0x63, 0x61, 0xa1, 0x86, 0xdd, 0x01, 0xdb, 0xb9, 0xb0, 0x7a, 0x50, 0xd4, + 0x82, 0xec, 0x83, 0xe7, 0x6f, 0x1c, 0xeb, 0x41, 0x00, 0xb5, 0x15, 0x7d, 0xd1, 0x2a, 0x47, 0xb7, + 0x57, 0x4e, 0x6c, 0xb1, 0xb6, 0x35, 0xd6, 0x5d, 0x70, 0x27, 0xbf, 0x87, 0x86, 0xe1, 0x9b, 0xe7, + 0xdf, 0x7c, 0x2d, 0xb1, 0x38, 0xb9, 0x7a, 0x03, 0xc0, 0xa3, 0xe2, 0x64, 0x7f, 0x19, 0x1c, 0xe4, + 0xc1, 0xda, 0x3e, 0xcb, 0x7b, 0xa8, 0x79, 0x1f, 0x82, 0xa6, 0xe3, 0x5d, 0xba, 0x91, 0x0b, 0xe8, + 0xe5, 0x5d, 0x7b, 0xfa, 0x5f, 0x3c, 0xdf, 0xcf, 0x22, 0xb7, 0x13, 0xd6, 0x1d, 0x4a, 0x00, 0x57, + 0x33, 0x18, 0xa5, 0x83, 0xde, 0x2f, 0x6f, 0xb0, 0xb4, 0x2d, 0x4d, 0x5b, 0x07, 0xb5, 0x62, 0xda, + 0x48, 0xbb, 0x1c, 0xe6, 0x85, 0xe7, 0x03, 0x3b, 0xea, 0xed, 0xf1, 0xb3, 0xec, 0x7a, 0xbf, 0x24, + 0x74, 0x08, 0x0e, 0x4a, 0x5d, 0x8e, 0x2b, 0x0e, 0x87, 0xfd, 0x78, 0x7d, 0xa3, 0xc5, 0x7f, 0xa1, + 0xf1, 0x8f, 0x40, 0x3b, 0x77, 0x38, 0xf4, 0xeb, 0x53, 0xd7, 0xcf, 0x09, 0x9c, 0x98, 0xa7, 0x88, + 0xa2, 0x11, 0x9e, 0xc2, 0x89, 0x42, 0x22, 0xc6, 0xaa, 0x83, 0x7a, 0x3d, 0x81, 0xa5, 0x9c, 0x66, + 0xf3, 0xb3, 0x99, 0x75, 0xe8, 0x29, 0xe7, 0x09, 0xe9, 0xea, 0x26, 0x64, 0xb9, 0x24, 0x78, 0xb2, + 0xba, 0xab, 0x7f, 0x7a, 0x5c, 0x65, 0x87, 0xff, 0x62, 0xb5, 0xb5, 0x35, 0x74, 0x6d, 0x35, 0xb0, + 0x93, 0x5b, 0x1b, 0xe2, 0xdc, 0x55, 0xa6, 0x0f, 0xa6, 0xfd, 0xfc, 0xfb, 0x2c, 0xf0, 0xce, 0x67, + 0x81, 0x77, 0x39, 0x0b, 0xbc, 0x8f, 0xf3, 0xa0, 0x72, 0x3e, 0x0f, 0x2a, 0x3f, 0xe6, 0x41, 0xe5, + 0x4d, 0x18, 0x13, 0x35, 0x48, 0xa3, 0xb0, 0xcb, 0x46, 0x36, 0x5c, 0x3d, 0x41, 0x91, 0x74, 0xa1, + 0xdf, 0xfd, 0x0e, 0xae, 0xc6, 0x1c, 0xcb, 0x68, 0x43, 0xbf, 0x99, 0xad, 0x5f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xbb, 0x73, 0xe3, 0x8a, 0x28, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -102,6 +105,8 @@ type QueryClient interface { // ProfileByChainLink queries the profile for the user having the given // address and chain name ProfileByChainLink(ctx context.Context, in *QueryProfileByChainLinkRequest, opts ...grpc.CallOption) (*QueryProfileByChainLinkResponse, error) + // UserApplicationLinks queries application links for the given user + UserApplicationLinks(ctx context.Context, in *QueryUserApplicationLinksRequest, opts ...grpc.CallOption) (*QueryUserApplicationLinksResponse, error) } type queryClient struct { @@ -166,6 +171,15 @@ func (c *queryClient) ProfileByChainLink(ctx context.Context, in *QueryProfileBy return out, nil } +func (c *queryClient) UserApplicationLinks(ctx context.Context, in *QueryUserApplicationLinksRequest, opts ...grpc.CallOption) (*QueryUserApplicationLinksResponse, error) { + out := new(QueryUserApplicationLinksResponse) + err := c.cc.Invoke(ctx, "/desmos.profiles.v1beta1.Query/UserApplicationLinks", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Profile queries the profile of a specific user given their DTag or address. @@ -185,6 +199,8 @@ type QueryServer interface { // ProfileByChainLink queries the profile for the user having the given // address and chain name ProfileByChainLink(context.Context, *QueryProfileByChainLinkRequest) (*QueryProfileByChainLinkResponse, error) + // UserApplicationLinks queries application links for the given user + UserApplicationLinks(context.Context, *QueryUserApplicationLinksRequest) (*QueryUserApplicationLinksResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -209,6 +225,9 @@ func (*UnimplementedQueryServer) UserBlocks(ctx context.Context, req *QueryUserB func (*UnimplementedQueryServer) ProfileByChainLink(ctx context.Context, req *QueryProfileByChainLinkRequest) (*QueryProfileByChainLinkResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ProfileByChainLink not implemented") } +func (*UnimplementedQueryServer) UserApplicationLinks(ctx context.Context, req *QueryUserApplicationLinksRequest) (*QueryUserApplicationLinksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserApplicationLinks not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -322,6 +341,24 @@ func _Query_ProfileByChainLink_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Query_UserApplicationLinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUserApplicationLinksRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UserApplicationLinks(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/desmos.profiles.v1beta1.Query/UserApplicationLinks", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserApplicationLinks(ctx, req.(*QueryUserApplicationLinksRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "desmos.profiles.v1beta1.Query", HandlerType: (*QueryServer)(nil), @@ -350,6 +387,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "ProfileByChainLink", Handler: _Query_ProfileByChainLink_Handler, }, + { + MethodName: "UserApplicationLinks", + Handler: _Query_UserApplicationLinks_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "desmos/profiles/v1beta1/query.proto", diff --git a/x/profiles/types/query.pb.gw.go b/x/profiles/types/query.pb.gw.go index 71eb2d3355..b5980ec766 100644 --- a/x/profiles/types/query.pb.gw.go +++ b/x/profiles/types/query.pb.gw.go @@ -341,6 +341,78 @@ func local_request_Query_ProfileByChainLink_0(ctx context.Context, marshaler run } +var ( + filter_Query_UserApplicationLinks_0 = &utilities.DoubleArray{Encoding: map[string]int{"user": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_UserApplicationLinks_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserApplicationLinksRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user") + } + + protoReq.User, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserApplicationLinks_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserApplicationLinks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UserApplicationLinks_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserApplicationLinksRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["user"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user") + } + + protoReq.User, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserApplicationLinks_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UserApplicationLinks(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -467,6 +539,26 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_UserApplicationLinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UserApplicationLinks_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserApplicationLinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -628,6 +720,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_UserApplicationLinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_UserApplicationLinks_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserApplicationLinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -643,6 +755,8 @@ var ( pattern_Query_UserBlocks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"desmos", "relationships", "v1beta1", "blocks", "user"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Query_ProfileByChainLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "profiles", "v1beta1", "chain-links", "chain_name", "target_address"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_Query_UserApplicationLinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"desmos", "profiles", "v1beta1", "app-links", "user"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -657,4 +771,6 @@ var ( forward_Query_UserBlocks_0 = runtime.ForwardResponseMessage forward_Query_ProfileByChainLink_0 = runtime.ForwardResponseMessage + + forward_Query_UserApplicationLinks_0 = runtime.ForwardResponseMessage ) diff --git a/x/profiles/types/query_app_links.pb.go b/x/profiles/types/query_app_links.pb.go new file mode 100644 index 0000000000..8331d1c229 --- /dev/null +++ b/x/profiles/types/query_app_links.pb.go @@ -0,0 +1,641 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: desmos/profiles/v1beta1/query_app_links.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/codec/types" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/regen-network/cosmos-proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryUserApplicationLinksRequest represent the request used when querying the +// application links of a specific user +type QueryUserApplicationLinksRequest struct { + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // Pagination defines an optional pagination for the request + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryUserApplicationLinksRequest) Reset() { *m = QueryUserApplicationLinksRequest{} } +func (m *QueryUserApplicationLinksRequest) String() string { return proto.CompactTextString(m) } +func (*QueryUserApplicationLinksRequest) ProtoMessage() {} +func (*QueryUserApplicationLinksRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_18d2a2b45fd238cb, []int{0} +} +func (m *QueryUserApplicationLinksRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUserApplicationLinksRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUserApplicationLinksRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryUserApplicationLinksRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUserApplicationLinksRequest.Merge(m, src) +} +func (m *QueryUserApplicationLinksRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryUserApplicationLinksRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUserApplicationLinksRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUserApplicationLinksRequest proto.InternalMessageInfo + +func (m *QueryUserApplicationLinksRequest) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *QueryUserApplicationLinksRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// QueryUserApplicationLinksResponse represents the response to the query used +// to get the application links for a specific user +type QueryUserApplicationLinksResponse struct { + Links []ApplicationLink `protobuf:"bytes,1,rep,name=links,proto3" json:"links"` + // Pagination defines the pagination response + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryUserApplicationLinksResponse) Reset() { *m = QueryUserApplicationLinksResponse{} } +func (m *QueryUserApplicationLinksResponse) String() string { return proto.CompactTextString(m) } +func (*QueryUserApplicationLinksResponse) ProtoMessage() {} +func (*QueryUserApplicationLinksResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_18d2a2b45fd238cb, []int{1} +} +func (m *QueryUserApplicationLinksResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUserApplicationLinksResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUserApplicationLinksResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryUserApplicationLinksResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUserApplicationLinksResponse.Merge(m, src) +} +func (m *QueryUserApplicationLinksResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryUserApplicationLinksResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUserApplicationLinksResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUserApplicationLinksResponse proto.InternalMessageInfo + +func (m *QueryUserApplicationLinksResponse) GetLinks() []ApplicationLink { + if m != nil { + return m.Links + } + return nil +} + +func (m *QueryUserApplicationLinksResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func init() { + proto.RegisterType((*QueryUserApplicationLinksRequest)(nil), "desmos.profiles.v1beta1.QueryUserApplicationLinksRequest") + proto.RegisterType((*QueryUserApplicationLinksResponse)(nil), "desmos.profiles.v1beta1.QueryUserApplicationLinksResponse") +} + +func init() { + proto.RegisterFile("desmos/profiles/v1beta1/query_app_links.proto", fileDescriptor_18d2a2b45fd238cb) +} + +var fileDescriptor_18d2a2b45fd238cb = []byte{ + // 368 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x91, 0xc1, 0x4e, 0xfa, 0x40, + 0x10, 0xc6, 0xbb, 0xff, 0x3f, 0x9a, 0x58, 0x6e, 0x8d, 0x89, 0xd0, 0x98, 0x5a, 0x39, 0x68, 0x63, + 0xc2, 0x6e, 0xc0, 0x27, 0x90, 0x18, 0xf5, 0xe0, 0x41, 0x9b, 0x78, 0xf1, 0x42, 0xb6, 0xb0, 0xd4, + 0xc6, 0xd2, 0x59, 0xba, 0x5b, 0x23, 0x17, 0x9f, 0xc1, 0x67, 0xf1, 0x29, 0x38, 0x72, 0xf4, 0x64, + 0x0c, 0xbc, 0x88, 0xe9, 0xee, 0x22, 0x84, 0x88, 0xde, 0x66, 0xf2, 0x7d, 0xfb, 0xcd, 0x6f, 0x76, + 0xec, 0x66, 0x9f, 0x89, 0x21, 0x08, 0xc2, 0x73, 0x18, 0x24, 0x29, 0x13, 0xe4, 0xa9, 0x15, 0x31, + 0x49, 0x5b, 0x64, 0x54, 0xb0, 0x7c, 0xdc, 0xa5, 0x9c, 0x77, 0xd3, 0x24, 0x7b, 0x14, 0x98, 0xe7, + 0x20, 0xc1, 0xd9, 0xd3, 0x76, 0xbc, 0xb0, 0x63, 0x63, 0x77, 0x77, 0x63, 0x88, 0x41, 0x79, 0x48, + 0x59, 0x69, 0xbb, 0xbb, 0x1f, 0x03, 0xc4, 0x29, 0x23, 0x94, 0x27, 0x84, 0x66, 0x19, 0x48, 0x2a, + 0x13, 0xc8, 0x4c, 0x98, 0x5b, 0x37, 0xaa, 0xea, 0xa2, 0x62, 0x40, 0x68, 0x36, 0x36, 0x12, 0xde, + 0x84, 0x35, 0x84, 0x3e, 0x4b, 0xc5, 0x3a, 0x97, 0x5b, 0xef, 0x41, 0xe9, 0xef, 0x6a, 0x02, 0xdd, + 0x18, 0xe9, 0x44, 0x77, 0x24, 0xa2, 0x82, 0xe9, 0xad, 0xbe, 0xc3, 0x38, 0x8d, 0x93, 0x4c, 0x21, + 0x69, 0x6f, 0xe3, 0xc5, 0xf6, 0x6f, 0x4b, 0xc7, 0x9d, 0x60, 0xf9, 0x19, 0xe7, 0x69, 0xd2, 0x53, + 0xea, 0x75, 0x39, 0x29, 0x64, 0xa3, 0x82, 0x09, 0xe9, 0x38, 0x76, 0xa5, 0x10, 0x2c, 0xaf, 0x21, + 0x1f, 0x05, 0x3b, 0xa1, 0xaa, 0x9d, 0x0b, 0xdb, 0x5e, 0x66, 0xd5, 0xfe, 0xf9, 0x28, 0xa8, 0xb6, + 0x8f, 0xb0, 0xc1, 0x28, 0x07, 0x63, 0x35, 0x78, 0xf1, 0x5b, 0xf8, 0x86, 0xc6, 0xcc, 0xe4, 0x85, + 0x2b, 0x2f, 0x1b, 0x6f, 0xc8, 0x3e, 0xfc, 0x05, 0x40, 0x70, 0xc8, 0x04, 0x73, 0xce, 0xed, 0x2d, + 0xb5, 0x7b, 0x0d, 0xf9, 0xff, 0x83, 0x6a, 0x3b, 0xc0, 0x1b, 0x8e, 0x82, 0xd7, 0x12, 0x3a, 0x95, + 0xc9, 0xc7, 0x81, 0x15, 0xea, 0xc7, 0xce, 0xe5, 0x0f, 0xcc, 0xc7, 0x7f, 0x32, 0x6b, 0x84, 0x55, + 0xe8, 0xce, 0xd5, 0x64, 0xe6, 0xa1, 0xe9, 0xcc, 0x43, 0x9f, 0x33, 0x0f, 0xbd, 0xce, 0x3d, 0x6b, + 0x3a, 0xf7, 0xac, 0xf7, 0xb9, 0x67, 0xdd, 0xe3, 0x38, 0x91, 0x0f, 0x45, 0x84, 0x7b, 0x30, 0x24, + 0x9a, 0xb1, 0x99, 0xd2, 0x48, 0x98, 0x9a, 0x3c, 0x2f, 0xcf, 0x2b, 0xc7, 0x9c, 0x89, 0x68, 0x5b, + 0x5d, 0xe1, 0xf4, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x04, 0x99, 0x2a, 0xde, 0x95, 0x02, 0x00, 0x00, +} + +func (m *QueryUserApplicationLinksRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryUserApplicationLinksRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUserApplicationLinksRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQueryAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.User) > 0 { + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintQueryAppLinks(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryUserApplicationLinksResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryUserApplicationLinksResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUserApplicationLinksResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQueryAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Links) > 0 { + for iNdEx := len(m.Links) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Links[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQueryAppLinks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQueryAppLinks(dAtA []byte, offset int, v uint64) int { + offset -= sovQueryAppLinks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryUserApplicationLinksRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovQueryAppLinks(uint64(l)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQueryAppLinks(uint64(l)) + } + return n +} + +func (m *QueryUserApplicationLinksResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Links) > 0 { + for _, e := range m.Links { + l = e.Size() + n += 1 + l + sovQueryAppLinks(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQueryAppLinks(uint64(l)) + } + return n +} + +func sovQueryAppLinks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQueryAppLinks(x uint64) (n int) { + return sovQueryAppLinks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryUserApplicationLinksRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryUserApplicationLinksRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUserApplicationLinksRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQueryAppLinks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQueryAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQueryAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQueryAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQueryAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQueryAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryUserApplicationLinksResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryUserApplicationLinksResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUserApplicationLinksResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Links", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQueryAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQueryAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Links = append(m.Links, ApplicationLink{}) + if err := m.Links[len(m.Links)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQueryAppLinks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQueryAppLinks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQueryAppLinks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQueryAppLinks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQueryAppLinks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQueryAppLinks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQueryAppLinks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQueryAppLinks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQueryAppLinks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQueryAppLinks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQueryAppLinks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQueryAppLinks = fmt.Errorf("proto: unexpected end of group") +) From 2e38a670dc38fd0a6b05a2546874ed3a1456eb20 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Fri, 18 Jun 2021 09:22:14 +0200 Subject: [PATCH 03/14] Merged master Signed-off-by: Riccardo Montagnin --- proto/desmos/profiles/v1beta1/genesis.proto | 6 +- .../profiles/v1beta1/models_chain_links.proto | 2 +- .../profiles/v1beta1/query_chain_links.proto | 4 +- x/profiles/keeper/genesis.go | 2 +- x/profiles/simulation/genesis.go | 1 + x/profiles/types/genesis.pb.go | 134 +++++++++++++----- x/profiles/types/query.pb.go | 110 +++++++------- x/profiles/types/query.pb.gw.go | 72 +++++----- x/staging/posts/keeper/grpc_query_test.go | 1 + 9 files changed, 196 insertions(+), 136 deletions(-) diff --git a/proto/desmos/profiles/v1beta1/genesis.proto b/proto/desmos/profiles/v1beta1/genesis.proto index 25547b933e..22e7c78c87 100644 --- a/proto/desmos/profiles/v1beta1/genesis.proto +++ b/proto/desmos/profiles/v1beta1/genesis.proto @@ -40,9 +40,11 @@ message GenesisState { (gogoproto.customname) = "IBCPortID" ]; - repeated desmos.profiles.v1beta1.ChainLink chain_links = 6 [ (gogoproto.nullable) = false ]; + repeated desmos.profiles.v1beta1.ChainLink chain_links = 6 + [ (gogoproto.nullable) = false ]; - repeated ApplicationLinkEntry application_links = 7 [ (gogoproto.nullable) = false ]; + repeated ApplicationLinkEntry application_links = 7 + [ (gogoproto.nullable) = false ]; } // AppLinkEntry represents an application link entry inside the genesis state diff --git a/proto/desmos/profiles/v1beta1/models_chain_links.proto b/proto/desmos/profiles/v1beta1/models_chain_links.proto index 85cd3e2e60..b05c5ad2f7 100644 --- a/proto/desmos/profiles/v1beta1/models_chain_links.proto +++ b/proto/desmos/profiles/v1beta1/models_chain_links.proto @@ -15,7 +15,7 @@ message ChainLink { option (gogoproto.goproto_stringer) = true; // User defines the destination profile address to link - string user = 1 [ (gogoproto.moretags) = "yaml:\"user\"" ]; + string user = 1 [ (gogoproto.moretags) = "yaml:\"user\"" ]; // Address contains the data of the external chain address to be connected // with the Desmos profile diff --git a/proto/desmos/profiles/v1beta1/query_chain_links.proto b/proto/desmos/profiles/v1beta1/query_chain_links.proto index 9ea58fbcdc..b0b4a802df 100644 --- a/proto/desmos/profiles/v1beta1/query_chain_links.proto +++ b/proto/desmos/profiles/v1beta1/query_chain_links.proto @@ -24,6 +24,6 @@ message QueryUserChainLinksRequest { message QueryUserChainLinksResponse { repeated ChainLink links = 1 [ (gogoproto.nullable) = false ]; - // Pagination defines the pagination response - cosmos.base.query.v1beta1.PageResponse pagination = 2; + // Pagination defines the pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; } diff --git a/x/profiles/keeper/genesis.go b/x/profiles/keeper/genesis.go index 7bde3ce516..6724191c79 100644 --- a/x/profiles/keeper/genesis.go +++ b/x/profiles/keeper/genesis.go @@ -16,8 +16,8 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { k.GetAllUsersBlocks(ctx), k.GetParams(ctx), k.GetPort(ctx), - k.GetApplicationLinksEntries(ctx), k.GetAllChainLinks(ctx), + k.GetApplicationLinksEntries(ctx), ) } diff --git a/x/profiles/simulation/genesis.go b/x/profiles/simulation/genesis.go index 2be1ef01e6..55df035b0b 100644 --- a/x/profiles/simulation/genesis.go +++ b/x/profiles/simulation/genesis.go @@ -26,6 +26,7 @@ func RandomizedGenState(simsState *module.SimulationState) { ), types.IBCPortID, nil, + nil, ) bz, err := simsState.Cdc.MarshalJSON(profileGenesis) diff --git a/x/profiles/types/genesis.pb.go b/x/profiles/types/genesis.pb.go index 524be4dfc7..f2d645b074 100644 --- a/x/profiles/types/genesis.pb.go +++ b/x/profiles/types/genesis.pb.go @@ -30,7 +30,8 @@ type GenesisState struct { Blocks []UserBlock `protobuf:"bytes,3,rep,name=blocks,proto3" json:"blocks" yaml:"users_blocks"` Params Params `protobuf:"bytes,4,opt,name=params,proto3" json:"params" yaml:"params"` IBCPortID string `protobuf:"bytes,5,opt,name=ibc_port_id,json=ibcPortId,proto3" json:"ibc_port_id,omitempty" yaml:"ibc_port_id"` - ApplicationLinks []ApplicationLinkEntry `protobuf:"bytes,6,rep,name=application_links,json=applicationLinks,proto3" json:"application_links"` + ChainLinks []ChainLink `protobuf:"bytes,6,rep,name=chain_links,json=chainLinks,proto3" json:"chain_links"` + ApplicationLinks []ApplicationLinkEntry `protobuf:"bytes,7,rep,name=application_links,json=applicationLinks,proto3" json:"application_links"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -101,6 +102,13 @@ func (m *GenesisState) GetIBCPortID() string { return "" } +func (m *GenesisState) GetChainLinks() []ChainLink { + if m != nil { + return m.ChainLinks + } + return nil +} + func (m *GenesisState) GetApplicationLinks() []ApplicationLinkEntry { if m != nil { return m.ApplicationLinks @@ -171,40 +179,42 @@ func init() { } var fileDescriptor_24f308c1ccf2d582 = []byte{ - // 524 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xcf, 0x6e, 0xd3, 0x30, - 0x00, 0xc6, 0x9b, 0xad, 0x54, 0xaa, 0xcb, 0x24, 0x30, 0x05, 0xa2, 0x22, 0x92, 0x2a, 0x68, 0x52, - 0x25, 0xb6, 0x44, 0x2b, 0x37, 0x24, 0x0e, 0x64, 0x43, 0x30, 0x09, 0xa1, 0x29, 0x0c, 0x21, 0x71, - 0x29, 0x4e, 0xeb, 0x65, 0x56, 0xd3, 0xd8, 0xd8, 0x2e, 0xa2, 0x6f, 0xc1, 0x2b, 0xf0, 0x36, 0x3b, - 0xee, 0xc8, 0x29, 0x42, 0xe9, 0x1b, 0x94, 0x17, 0x40, 0xb1, 0x3d, 0xd6, 0x4e, 0x8d, 0xba, 0x9b, - 0x55, 0xff, 0xbe, 0x3f, 0xfd, 0x14, 0x83, 0xdd, 0x11, 0x16, 0x13, 0x2a, 0x02, 0xc6, 0xe9, 0x19, - 0x49, 0xb1, 0x08, 0xbe, 0x1f, 0xc4, 0x58, 0xa2, 0x83, 0x20, 0xc1, 0x19, 0x16, 0x44, 0xf8, 0x8c, - 0x53, 0x49, 0xe1, 0x63, 0x8d, 0xf9, 0x57, 0x98, 0x6f, 0xb0, 0x4e, 0x3b, 0xa1, 0x09, 0x55, 0x4c, - 0x50, 0x9e, 0x34, 0xde, 0x79, 0x5e, 0xe5, 0x3a, 0xa1, 0x23, 0x9c, 0x8a, 0x01, 0x43, 0x1c, 0x4d, - 0x8c, 0x77, 0x67, 0x6f, 0x13, 0xac, 0x7f, 0x37, 0x74, 0x7f, 0x03, 0xcd, 0x71, 0x8a, 0x24, 0xa1, - 0x99, 0x38, 0x27, 0x4c, 0xdc, 0x52, 0x33, 0x92, 0x28, 0x19, 0x70, 0xfc, 0x6d, 0x8a, 0x85, 0xbc, - 0xd2, 0xf8, 0x1b, 0x34, 0x88, 0xb1, 0x41, 0x4a, 0xb2, 0xb1, 0xe1, 0xbd, 0xbf, 0x75, 0x70, 0xf7, - 0xad, 0xde, 0xec, 0xa3, 0x44, 0x12, 0xc3, 0x5f, 0x16, 0x78, 0xa4, 0x8c, 0x25, 0x47, 0x99, 0x38, - 0xc3, 0xfc, 0x7f, 0x82, 0x6d, 0x75, 0xb7, 0x7b, 0xad, 0xfe, 0x9e, 0x5f, 0x31, 0xaa, 0x7f, 0x74, - 0x8a, 0x92, 0x53, 0xa3, 0x8a, 0xb4, 0x28, 0x7c, 0x75, 0x91, 0xbb, 0xb5, 0x22, 0x77, 0xdb, 0x6b, - 0x2e, 0xc5, 0x22, 0x77, 0x9f, 0xce, 0xd0, 0x24, 0x7d, 0xe9, 0xad, 0x4f, 0xf4, 0xa2, 0x76, 0x79, - 0x71, 0x53, 0x06, 0x29, 0xd8, 0x59, 0xd9, 0xcb, 0xde, 0x52, 0xcd, 0x76, 0x2b, 0x9b, 0x45, 0x4b, - 0x74, 0xe8, 0x95, 0x95, 0x16, 0xb9, 0xdb, 0xd1, 0xd1, 0x53, 0x81, 0xf9, 0x8d, 0xfd, 0xbd, 0x68, - 0xd5, 0x1f, 0x7e, 0x06, 0x8d, 0x38, 0xa5, 0xc3, 0xb1, 0xb0, 0xb7, 0x55, 0x92, 0x57, 0x99, 0xf4, - 0x49, 0x60, 0x1e, 0x96, 0x68, 0xf8, 0xc4, 0xc4, 0x3c, 0x58, 0x8e, 0xd1, 0x2e, 0x5e, 0x64, 0xec, - 0xe0, 0x07, 0xd0, 0xd0, 0x1f, 0x95, 0x5d, 0xef, 0x5a, 0xbd, 0x56, 0xdf, 0xad, 0x34, 0x3e, 0x51, - 0x58, 0xf8, 0xd0, 0xb8, 0xee, 0x68, 0x57, 0x2d, 0xf6, 0x22, 0xe3, 0x02, 0x0f, 0x41, 0x8b, 0xc4, - 0xc3, 0x01, 0xa3, 0x5c, 0x0e, 0xc8, 0xc8, 0xbe, 0xd3, 0xb5, 0x7a, 0xcd, 0xf0, 0x59, 0x91, 0xbb, - 0xcd, 0xe3, 0xf0, 0xf0, 0x84, 0x72, 0x79, 0x7c, 0xb4, 0xc8, 0x5d, 0xa8, 0xc5, 0x4b, 0xa4, 0x17, - 0x35, 0x49, 0x3c, 0x54, 0xc0, 0x08, 0x7e, 0x05, 0xf7, 0x11, 0x63, 0x29, 0x19, 0xaa, 0x05, 0xf4, - 0xe7, 0x62, 0x37, 0xd4, 0x1f, 0xdf, 0xaf, 0xec, 0xf7, 0xfa, 0x5a, 0xf1, 0x9e, 0x64, 0xe3, 0x37, - 0x99, 0xe4, 0xb3, 0xb0, 0x5e, 0xb6, 0x8d, 0xee, 0xa1, 0xd5, 0x3b, 0xe1, 0x65, 0xa0, 0xbd, 0x8e, - 0x87, 0x10, 0xd4, 0xcb, 0x9d, 0x6c, 0xab, 0xec, 0x1d, 0xa9, 0x33, 0x0c, 0x41, 0xbd, 0x6c, 0x60, - 0x6f, 0xa9, 0x81, 0x7a, 0xb7, 0x2d, 0x60, 0xb2, 0x95, 0x36, 0x7c, 0x77, 0x51, 0x38, 0xd6, 0x65, - 0xe1, 0x58, 0x7f, 0x0a, 0xc7, 0xfa, 0x39, 0x77, 0x6a, 0x97, 0x73, 0xa7, 0xf6, 0x7b, 0xee, 0xd4, - 0xbe, 0xf8, 0x09, 0x91, 0xe7, 0xd3, 0xd8, 0x1f, 0xd2, 0x49, 0xa0, 0x9d, 0xf7, 0x53, 0x14, 0x0b, - 0x73, 0x0e, 0x7e, 0x5c, 0x3f, 0x24, 0x39, 0x63, 0x58, 0xc4, 0x0d, 0xf5, 0x6c, 0x5e, 0xfc, 0x0b, - 0x00, 0x00, 0xff, 0xff, 0x48, 0x0f, 0xc8, 0xc1, 0x81, 0x04, 0x00, 0x00, + // 557 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xc1, 0x6e, 0xd3, 0x3e, + 0x1c, 0xc7, 0x9b, 0xad, 0xeb, 0x5f, 0x73, 0xff, 0x93, 0xc0, 0x14, 0x88, 0x8a, 0x48, 0xaa, 0xa0, + 0x49, 0x95, 0xd8, 0x12, 0x56, 0x6e, 0x48, 0x1c, 0x48, 0x87, 0xa0, 0x12, 0x42, 0x53, 0x18, 0x42, + 0xe2, 0x52, 0x9c, 0xd4, 0x4b, 0xad, 0xa6, 0x71, 0xb0, 0x5d, 0x44, 0xdf, 0x82, 0x57, 0xe0, 0x45, + 0x38, 0xef, 0xb8, 0x23, 0xa7, 0x08, 0xb5, 0x6f, 0xd0, 0x27, 0x40, 0xb1, 0x5d, 0xd6, 0x4e, 0x8d, + 0xba, 0x9b, 0x15, 0x7f, 0xbe, 0x9f, 0xdf, 0x2f, 0x3f, 0xdb, 0xe0, 0x70, 0x80, 0xf9, 0x98, 0x72, + 0x2f, 0x63, 0xf4, 0x82, 0x24, 0x98, 0x7b, 0xdf, 0x4e, 0x42, 0x2c, 0xd0, 0x89, 0x17, 0xe3, 0x14, + 0x73, 0xc2, 0xdd, 0x8c, 0x51, 0x41, 0xe1, 0x43, 0x85, 0xb9, 0x4b, 0xcc, 0xd5, 0x58, 0xb3, 0x11, + 0xd3, 0x98, 0x4a, 0xc6, 0x2b, 0x56, 0x0a, 0x6f, 0x3e, 0x2d, 0xb3, 0x8e, 0xe9, 0x00, 0x27, 0xbc, + 0x9f, 0x21, 0x86, 0xc6, 0xda, 0xdd, 0x3c, 0xda, 0x06, 0xab, 0xef, 0x9a, 0xee, 0x6c, 0xa1, 0x19, + 0x4e, 0x90, 0x20, 0x34, 0xe5, 0x43, 0x92, 0xf1, 0x5b, 0x66, 0x06, 0x02, 0xc5, 0x7d, 0x86, 0xbf, + 0x4e, 0x30, 0x17, 0xcb, 0xcc, 0xb3, 0x2d, 0x99, 0x68, 0x88, 0x48, 0xda, 0x4f, 0x48, 0x3a, 0x5a, + 0x26, 0xdc, 0x2d, 0x09, 0x94, 0x65, 0xab, 0xbc, 0xf3, 0x6b, 0x0f, 0xfc, 0xff, 0x46, 0x4d, 0xf9, + 0x83, 0x40, 0x02, 0xc3, 0x9f, 0x06, 0x78, 0x20, 0x5b, 0x11, 0x0c, 0xa5, 0xfc, 0x02, 0xb3, 0x7f, + 0x3d, 0x99, 0x46, 0x6b, 0xb7, 0x5d, 0xef, 0x1c, 0xb9, 0x25, 0xc7, 0xe0, 0x9e, 0x9e, 0xa3, 0xf8, + 0x5c, 0xa7, 0x02, 0x15, 0xf2, 0x5f, 0x5e, 0xe6, 0x76, 0x65, 0x96, 0xdb, 0x8d, 0x0d, 0x9b, 0x7c, + 0x91, 0xdb, 0x8f, 0xa7, 0x68, 0x9c, 0xbc, 0x70, 0x36, 0x57, 0x74, 0x82, 0x46, 0xb1, 0x71, 0x33, + 0x06, 0x29, 0x38, 0x58, 0x9b, 0xb0, 0xb9, 0x23, 0x3b, 0x3b, 0x2c, 0xed, 0x2c, 0x58, 0xa1, 0x7d, + 0xa7, 0x68, 0x69, 0x91, 0xdb, 0x4d, 0x55, 0x7a, 0xc2, 0x31, 0xbb, 0x71, 0x62, 0x4e, 0xb0, 0xee, + 0x87, 0x9f, 0x40, 0x2d, 0x4c, 0x68, 0x34, 0xe2, 0xe6, 0xae, 0xac, 0xe4, 0x94, 0x56, 0xfa, 0xc8, + 0x31, 0xf3, 0x0b, 0xd4, 0x7f, 0xa4, 0xcb, 0xdc, 0x5b, 0x2d, 0xa3, 0x2c, 0x4e, 0xa0, 0x75, 0xf0, + 0x3d, 0xa8, 0xa9, 0x6b, 0x68, 0x56, 0x5b, 0x46, 0xbb, 0xde, 0xb1, 0x4b, 0xc5, 0x67, 0x12, 0xf3, + 0xef, 0x6b, 0xeb, 0x81, 0xb2, 0xaa, 0xb0, 0x13, 0x68, 0x0b, 0xec, 0x82, 0x3a, 0x09, 0xa3, 0x7e, + 0x46, 0x99, 0xe8, 0x93, 0x81, 0xb9, 0xd7, 0x32, 0xda, 0xfb, 0xfe, 0x93, 0x59, 0x6e, 0xef, 0xf7, + 0xfc, 0xee, 0x19, 0x65, 0xa2, 0x77, 0xba, 0xc8, 0x6d, 0xa8, 0xc2, 0x2b, 0xa4, 0x13, 0xec, 0x93, + 0x30, 0x92, 0xc0, 0x00, 0xf6, 0x40, 0x7d, 0xe5, 0x62, 0x99, 0xb5, 0x2d, 0xbf, 0xdc, 0x2d, 0xd8, + 0x77, 0x24, 0x1d, 0xf9, 0xd5, 0xa2, 0xb9, 0x00, 0x44, 0xcb, 0x0f, 0x1c, 0x7e, 0x01, 0x77, 0x51, + 0x96, 0x25, 0x24, 0x92, 0xc3, 0xd4, 0xc2, 0xff, 0xa4, 0xf0, 0xb8, 0x54, 0xf8, 0xea, 0x3a, 0x51, + 0x58, 0x5e, 0xa7, 0x82, 0x4d, 0xb5, 0xfb, 0x0e, 0x5a, 0xdf, 0xe3, 0x4e, 0x0a, 0x1a, 0x9b, 0x78, + 0x08, 0x41, 0xb5, 0x18, 0xb9, 0x69, 0x14, 0x23, 0x08, 0xe4, 0x1a, 0xfa, 0xa0, 0x5a, 0x74, 0x60, + 0xee, 0xc8, 0x59, 0xb7, 0x6f, 0xdb, 0x80, 0xae, 0x2d, 0xb3, 0xfe, 0xdb, 0xcb, 0x99, 0x65, 0x5c, + 0xcd, 0x2c, 0xe3, 0xcf, 0xcc, 0x32, 0x7e, 0xcc, 0xad, 0xca, 0xd5, 0xdc, 0xaa, 0xfc, 0x9e, 0x5b, + 0x95, 0xcf, 0x6e, 0x4c, 0xc4, 0x70, 0x12, 0xba, 0x11, 0x1d, 0x7b, 0xca, 0x7c, 0x9c, 0xa0, 0x90, + 0xeb, 0xb5, 0xf7, 0xfd, 0xfa, 0x4d, 0x8a, 0x69, 0x86, 0x79, 0x58, 0x93, 0x2f, 0xf0, 0xf9, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x52, 0x31, 0xd3, 0xfe, 0x04, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -238,6 +248,20 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenesis(dAtA, i, uint64(size)) } i-- + dAtA[i] = 0x3a + } + } + if len(m.ChainLinks) > 0 { + for iNdEx := len(m.ChainLinks) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ChainLinks[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x32 } } @@ -384,6 +408,12 @@ func (m *GenesisState) Size() (n int) { if l > 0 { n += 1 + l + sovGenesis(uint64(l)) } + if len(m.ChainLinks) > 0 { + for _, e := range m.ChainLinks { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } if len(m.ApplicationLinks) > 0 { for _, e := range m.ApplicationLinks { l = e.Size() @@ -611,6 +641,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { m.IBCPortID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainLinks", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainLinks = append(m.ChainLinks, ChainLink{}) + if err := m.ChainLinks[len(m.ChainLinks)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ApplicationLinks", wireType) } diff --git a/x/profiles/types/query.pb.go b/x/profiles/types/query.pb.go index 9ba1a50b46..3c3e01dd9c 100644 --- a/x/profiles/types/query.pb.go +++ b/x/profiles/types/query.pb.go @@ -35,45 +35,43 @@ func init() { } var fileDescriptor_5e0074f57a59f38d = []byte{ - // 602 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x3f, 0x6f, 0x13, 0x3f, - 0x18, 0xc7, 0x73, 0x3f, 0xe9, 0x57, 0xc4, 0x49, 0x0c, 0x58, 0x95, 0x50, 0x23, 0x74, 0x08, 0x18, - 0x4a, 0x9b, 0xe6, 0xdc, 0x24, 0x88, 0x42, 0x37, 0x42, 0x07, 0x84, 0x18, 0x4a, 0x55, 0x16, 0x96, - 0xc8, 0x97, 0x38, 0x17, 0x2b, 0x17, 0xdb, 0xb5, 0x7d, 0x88, 0x28, 0xca, 0xc2, 0xcc, 0x80, 0xc4, - 0xc2, 0x0b, 0x60, 0xe1, 0x5d, 0x30, 0x32, 0x56, 0xea, 0xc2, 0x58, 0x25, 0xbc, 0x10, 0x74, 0xfe, - 0x13, 0x1a, 0xd0, 0x5d, 0x2e, 0x6c, 0x67, 0xdf, 0xf7, 0xfb, 0x3c, 0x9f, 0xe7, 0xf1, 0x63, 0xfb, - 0xf7, 0x7b, 0x58, 0x8e, 0x98, 0x84, 0x5c, 0xb0, 0x3e, 0x49, 0xb0, 0x84, 0x6f, 0x1b, 0x11, 0x56, - 0xa8, 0x01, 0xcf, 0x52, 0x2c, 0xc6, 0x21, 0x17, 0x4c, 0x31, 0x70, 0xcb, 0x88, 0x42, 0x27, 0x0a, - 0xad, 0xa8, 0xba, 0x19, 0xb3, 0x98, 0x69, 0x0d, 0xcc, 0xbe, 0x8c, 0xbc, 0x7a, 0x3b, 0x66, 0x2c, - 0x4e, 0x30, 0x44, 0x9c, 0x40, 0x44, 0x29, 0x53, 0x48, 0x11, 0x46, 0xa5, 0xfd, 0xbb, 0x65, 0xff, - 0xea, 0x55, 0x94, 0xf6, 0x21, 0xa2, 0x36, 0x4f, 0xb5, 0x56, 0x08, 0xd3, 0xb1, 0xdb, 0x56, 0xdc, - 0x28, 0x16, 0x0b, 0x9c, 0x98, 0xb4, 0x03, 0xc2, 0x65, 0x39, 0x4b, 0x4f, 0xa1, 0xb8, 0x23, 0xf0, - 0x59, 0x8a, 0xa5, 0x72, 0x96, 0xdd, 0x15, 0x48, 0x48, 0xa0, 0x91, 0xd3, 0xc2, 0x62, 0x6d, 0x77, - 0x80, 0x08, 0xed, 0x24, 0x84, 0x0e, 0x9d, 0xa1, 0x5e, 0x6c, 0x40, 0x9c, 0x2f, 0xc9, 0xb7, 0xba, - 0x2c, 0x93, 0x77, 0x4c, 0xc3, 0xcd, 0xc2, 0x61, 0x9a, 0x15, 0x8c, 0x90, 0xc4, 0xc6, 0xbd, 0x88, - 0xc5, 0x51, 0x4c, 0xa8, 0x6e, 0x85, 0xd1, 0x36, 0x2f, 0xaf, 0xfb, 0xff, 0xbf, 0xca, 0x24, 0xe0, - 0xb3, 0xe7, 0x5f, 0x3b, 0x36, 0xb9, 0xc1, 0x5e, 0x98, 0x73, 0xc8, 0xa1, 0xd6, 0x5a, 0xd9, 0x89, - 0xe9, 0x4e, 0xb5, 0x5e, 0x52, 0x2d, 0x39, 0xa3, 0x12, 0xdf, 0xdb, 0x7f, 0x7f, 0xf1, 0xf3, 0xd3, - 0x7f, 0xbb, 0xe0, 0x41, 0x6e, 0x8b, 0x16, 0x1b, 0x93, 0x54, 0x62, 0x31, 0x05, 0x5f, 0x3d, 0xff, - 0xc6, 0xd1, 0x29, 0x8a, 0x4f, 0x05, 0xa2, 0xb2, 0x8f, 0x85, 0x04, 0xcd, 0xe2, 0x94, 0x4b, 0x62, - 0x87, 0xd9, 0x5a, 0xcb, 0x63, 0x61, 0xa1, 0x86, 0xdd, 0x01, 0xdb, 0xb9, 0xb0, 0x7a, 0x50, 0xd4, - 0x82, 0xec, 0x83, 0xe7, 0x6f, 0x1c, 0xeb, 0x41, 0x00, 0xb5, 0x15, 0x7d, 0xd1, 0x2a, 0x47, 0xb7, - 0x57, 0x4e, 0x6c, 0xb1, 0xb6, 0x35, 0xd6, 0x5d, 0x70, 0x27, 0xbf, 0x87, 0x86, 0xe1, 0x9b, 0xe7, - 0xdf, 0x7c, 0x2d, 0xb1, 0x38, 0xb9, 0x7a, 0x03, 0xc0, 0xa3, 0xe2, 0x64, 0x7f, 0x19, 0x1c, 0xe4, - 0xc1, 0xda, 0x3e, 0xcb, 0x7b, 0xa8, 0x79, 0x1f, 0x82, 0xa6, 0xe3, 0x5d, 0xba, 0x91, 0x0b, 0xe8, - 0xe5, 0x5d, 0x7b, 0xfa, 0x5f, 0x3c, 0xdf, 0xcf, 0x22, 0xb7, 0x13, 0xd6, 0x1d, 0x4a, 0x00, 0x57, - 0x33, 0x18, 0xa5, 0x83, 0xde, 0x2f, 0x6f, 0xb0, 0xb4, 0x2d, 0x4d, 0x5b, 0x07, 0xb5, 0x62, 0xda, - 0x48, 0xbb, 0x1c, 0xe6, 0x85, 0xe7, 0x03, 0x3b, 0xea, 0xed, 0xf1, 0xb3, 0xec, 0x7a, 0xbf, 0x24, - 0x74, 0x08, 0x0e, 0x4a, 0x5d, 0x8e, 0x2b, 0x0e, 0x87, 0xfd, 0x78, 0x7d, 0xa3, 0xc5, 0x7f, 0xa1, - 0xf1, 0x8f, 0x40, 0x3b, 0x77, 0x38, 0xf4, 0xeb, 0x53, 0xd7, 0xcf, 0x09, 0x9c, 0x98, 0xa7, 0x88, - 0xa2, 0x11, 0x9e, 0xc2, 0x89, 0x42, 0x22, 0xc6, 0xaa, 0x83, 0x7a, 0x3d, 0x81, 0xa5, 0x9c, 0x66, - 0xf3, 0xb3, 0x99, 0x75, 0xe8, 0x29, 0xe7, 0x09, 0xe9, 0xea, 0x26, 0x64, 0xb9, 0x24, 0x78, 0xb2, - 0xba, 0xab, 0x7f, 0x7a, 0x5c, 0x65, 0x87, 0xff, 0x62, 0xb5, 0xb5, 0x35, 0x74, 0x6d, 0x35, 0xb0, - 0x93, 0x5b, 0x1b, 0xe2, 0xdc, 0x55, 0xa6, 0x0f, 0xa6, 0xfd, 0xfc, 0xfb, 0x2c, 0xf0, 0xce, 0x67, - 0x81, 0x77, 0x39, 0x0b, 0xbc, 0x8f, 0xf3, 0xa0, 0x72, 0x3e, 0x0f, 0x2a, 0x3f, 0xe6, 0x41, 0xe5, - 0x4d, 0x18, 0x13, 0x35, 0x48, 0xa3, 0xb0, 0xcb, 0x46, 0x36, 0x5c, 0x3d, 0x41, 0x91, 0x74, 0xa1, - 0xdf, 0xfd, 0x0e, 0xae, 0xc6, 0x1c, 0xcb, 0x68, 0x43, 0xbf, 0x99, 0xad, 0x5f, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xbb, 0x73, 0xe3, 0x8a, 0x28, 0x07, 0x00, 0x00, + // 572 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0x3f, 0x6f, 0xd3, 0x40, + 0x18, 0x87, 0x73, 0x48, 0x14, 0x71, 0x12, 0x48, 0x9c, 0x2a, 0xa1, 0x46, 0xc8, 0x08, 0x18, 0x4a, + 0x9b, 0xda, 0xd7, 0x24, 0x15, 0x88, 0x6e, 0x14, 0x06, 0x06, 0x86, 0x52, 0x95, 0x85, 0x25, 0x3a, + 0xbb, 0x17, 0xc7, 0xaa, 0xe3, 0xbb, 0xde, 0x9d, 0x11, 0x15, 0x62, 0x61, 0x66, 0x40, 0x62, 0xe1, + 0x03, 0xb0, 0xb0, 0xf1, 0x05, 0x90, 0x3a, 0x32, 0x56, 0x62, 0x61, 0x44, 0x09, 0x1f, 0x04, 0xf9, + 0xfe, 0xa4, 0x98, 0xca, 0x76, 0xd2, 0x2d, 0x76, 0x9e, 0xdf, 0xfb, 0x3e, 0xf7, 0xfa, 0xee, 0xe0, + 0xbd, 0x03, 0x2a, 0xc7, 0x4c, 0x62, 0x2e, 0xd8, 0x30, 0x49, 0xa9, 0xc4, 0xaf, 0xbb, 0x21, 0x55, + 0xa4, 0x8b, 0x8f, 0x72, 0x2a, 0x8e, 0x03, 0x2e, 0x98, 0x62, 0xe8, 0xa6, 0x81, 0x02, 0x07, 0x05, + 0x16, 0x6a, 0x2f, 0xc7, 0x2c, 0x66, 0x9a, 0xc1, 0xc5, 0x2f, 0x83, 0xb7, 0x6f, 0xc5, 0x8c, 0xc5, + 0x29, 0xc5, 0x84, 0x27, 0x98, 0x64, 0x19, 0x53, 0x44, 0x25, 0x2c, 0x93, 0xf6, 0xdf, 0x15, 0xfb, + 0xaf, 0x7e, 0x0a, 0xf3, 0x21, 0x26, 0x99, 0xed, 0xd3, 0xee, 0xd4, 0xca, 0x0c, 0xec, 0x6b, 0x0b, + 0x77, 0xeb, 0x61, 0x41, 0x53, 0xd3, 0x76, 0x94, 0x70, 0x39, 0x5f, 0xe4, 0x40, 0x91, 0x78, 0x20, + 0xe8, 0x51, 0x4e, 0xa5, 0x72, 0x91, 0xf5, 0x06, 0x25, 0x22, 0xc8, 0xd8, 0xb1, 0xb8, 0x9e, 0x8d, + 0x46, 0x24, 0xc9, 0x06, 0x69, 0x92, 0x1d, 0xba, 0x80, 0x5f, 0x1f, 0x20, 0x9c, 0x97, 0xf0, 0x95, + 0x88, 0x15, 0xf8, 0xc0, 0x0c, 0xdc, 0x3c, 0x38, 0x4d, 0xf3, 0x84, 0x43, 0x22, 0xa9, 0x49, 0xcf, + 0x6a, 0x71, 0x12, 0x27, 0x99, 0x1e, 0x85, 0x61, 0x7b, 0xdf, 0xaf, 0xc2, 0xcb, 0x2f, 0x0a, 0x04, + 0x7d, 0x06, 0xf0, 0xca, 0xae, 0xe9, 0x8d, 0x36, 0x82, 0x8a, 0x8f, 0x1c, 0x68, 0xd6, 0x62, 0x7b, + 0x66, 0x3a, 0x6d, 0x7f, 0x4e, 0x5a, 0x72, 0x96, 0x49, 0x7a, 0x77, 0xf3, 0xfd, 0xcf, 0x3f, 0x9f, + 0x2e, 0xad, 0xa3, 0xfb, 0x95, 0x23, 0x9a, 0xbd, 0x78, 0x9b, 0x4b, 0x2a, 0xde, 0xa1, 0xaf, 0x00, + 0x5e, 0x7b, 0xba, 0x4f, 0xe2, 0x7d, 0x41, 0x32, 0x39, 0xa4, 0x42, 0xa2, 0x5e, 0x7d, 0xcb, 0x12, + 0xec, 0x34, 0xfb, 0x0b, 0x65, 0xac, 0x2c, 0xd6, 0xb2, 0x6b, 0x68, 0xb5, 0x52, 0x56, 0x6f, 0x14, + 0x35, 0x33, 0xfb, 0x00, 0xe0, 0xd2, 0xae, 0xde, 0x08, 0xa8, 0xd3, 0x30, 0x17, 0x4d, 0x39, 0xbb, + 0x8d, 0xf9, 0x60, 0xab, 0xb5, 0xaa, 0xb5, 0xee, 0xa0, 0xdb, 0xd5, 0x33, 0x34, 0x0e, 0x27, 0x00, + 0xde, 0x78, 0x29, 0xa9, 0xd8, 0xfb, 0xf7, 0x04, 0xa0, 0x07, 0xf5, 0xcd, 0xce, 0x05, 0x9c, 0xe4, + 0xc3, 0x85, 0x73, 0xd6, 0x77, 0x5b, 0xfb, 0x6e, 0xa1, 0x9e, 0xf3, 0x2d, 0x9d, 0xc8, 0x99, 0x74, + 0xf9, 0xad, 0xfd, 0xfa, 0x5f, 0x00, 0x84, 0x45, 0xe5, 0x9d, 0x94, 0x45, 0x87, 0x12, 0xe1, 0x66, + 0x07, 0x43, 0x3a, 0xe9, 0xcd, 0xf9, 0x03, 0xd6, 0xb6, 0xaf, 0x6d, 0x7d, 0xd4, 0xa9, 0xb7, 0x0d, + 0x75, 0xca, 0x69, 0x7e, 0x03, 0xf0, 0x7a, 0x51, 0xeb, 0x49, 0x71, 0xb2, 0x9f, 0x17, 0x27, 0x15, + 0xf5, 0x9b, 0x3b, 0x9f, 0xd1, 0x4e, 0x77, 0x6b, 0xb1, 0x50, 0x95, 0xf2, 0xb9, 0x0d, 0xa1, 0x6f, + 0x1c, 0x5f, 0x5f, 0x21, 0x4e, 0xf9, 0x04, 0xc0, 0xe5, 0xa2, 0xde, 0x63, 0xce, 0xd3, 0x24, 0xd2, + 0x2b, 0x34, 0xe2, 0x8f, 0x9a, 0x1d, 0xfe, 0xcf, 0x38, 0xfd, 0xed, 0x8b, 0x44, 0xed, 0x22, 0xba, + 0x7a, 0x11, 0x1d, 0xb4, 0x56, 0xb9, 0x08, 0xc2, 0x79, 0x69, 0x09, 0x3b, 0xcf, 0x7e, 0x4c, 0x3c, + 0x70, 0x3a, 0xf1, 0xc0, 0xef, 0x89, 0x07, 0x3e, 0x4e, 0xbd, 0xd6, 0xe9, 0xd4, 0x6b, 0xfd, 0x9a, + 0x7a, 0xad, 0x57, 0x41, 0x9c, 0xa8, 0x51, 0x1e, 0x06, 0x11, 0x1b, 0xdb, 0x72, 0x7e, 0x4a, 0x42, + 0xe9, 0x4a, 0xbf, 0x39, 0x2b, 0xae, 0x8e, 0x39, 0x95, 0xe1, 0x92, 0xbe, 0x10, 0xfb, 0x7f, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x9b, 0x3f, 0xc6, 0xb3, 0x05, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -102,9 +100,8 @@ type QueryClient interface { UserRelationships(ctx context.Context, in *QueryUserRelationshipsRequest, opts ...grpc.CallOption) (*QueryUserRelationshipsResponse, error) // UserBlocks queries the user blocks for the user having the given address UserBlocks(ctx context.Context, in *QueryUserBlocksRequest, opts ...grpc.CallOption) (*QueryUserBlocksResponse, error) - // ProfileByChainLink queries the profile for the user having the given - // address and chain name - ProfileByChainLink(ctx context.Context, in *QueryProfileByChainLinkRequest, opts ...grpc.CallOption) (*QueryProfileByChainLinkResponse, error) + // UserChainLinks queries chain links for the given user + UserChainLinks(ctx context.Context, in *QueryUserChainLinksRequest, opts ...grpc.CallOption) (*QueryUserChainLinksResponse, error) // UserApplicationLinks queries application links for the given user UserApplicationLinks(ctx context.Context, in *QueryUserApplicationLinksRequest, opts ...grpc.CallOption) (*QueryUserApplicationLinksResponse, error) } @@ -162,9 +159,9 @@ func (c *queryClient) UserBlocks(ctx context.Context, in *QueryUserBlocksRequest return out, nil } -func (c *queryClient) ProfileByChainLink(ctx context.Context, in *QueryProfileByChainLinkRequest, opts ...grpc.CallOption) (*QueryProfileByChainLinkResponse, error) { - out := new(QueryProfileByChainLinkResponse) - err := c.cc.Invoke(ctx, "/desmos.profiles.v1beta1.Query/ProfileByChainLink", in, out, opts...) +func (c *queryClient) UserChainLinks(ctx context.Context, in *QueryUserChainLinksRequest, opts ...grpc.CallOption) (*QueryUserChainLinksResponse, error) { + out := new(QueryUserChainLinksResponse) + err := c.cc.Invoke(ctx, "/desmos.profiles.v1beta1.Query/UserChainLinks", in, out, opts...) if err != nil { return nil, err } @@ -196,9 +193,8 @@ type QueryServer interface { UserRelationships(context.Context, *QueryUserRelationshipsRequest) (*QueryUserRelationshipsResponse, error) // UserBlocks queries the user blocks for the user having the given address UserBlocks(context.Context, *QueryUserBlocksRequest) (*QueryUserBlocksResponse, error) - // ProfileByChainLink queries the profile for the user having the given - // address and chain name - ProfileByChainLink(context.Context, *QueryProfileByChainLinkRequest) (*QueryProfileByChainLinkResponse, error) + // UserChainLinks queries chain links for the given user + UserChainLinks(context.Context, *QueryUserChainLinksRequest) (*QueryUserChainLinksResponse, error) // UserApplicationLinks queries application links for the given user UserApplicationLinks(context.Context, *QueryUserApplicationLinksRequest) (*QueryUserApplicationLinksResponse, error) } @@ -222,8 +218,8 @@ func (*UnimplementedQueryServer) UserRelationships(ctx context.Context, req *Que func (*UnimplementedQueryServer) UserBlocks(ctx context.Context, req *QueryUserBlocksRequest) (*QueryUserBlocksResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UserBlocks not implemented") } -func (*UnimplementedQueryServer) ProfileByChainLink(ctx context.Context, req *QueryProfileByChainLinkRequest) (*QueryProfileByChainLinkResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProfileByChainLink not implemented") +func (*UnimplementedQueryServer) UserChainLinks(ctx context.Context, req *QueryUserChainLinksRequest) (*QueryUserChainLinksResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserChainLinks not implemented") } func (*UnimplementedQueryServer) UserApplicationLinks(ctx context.Context, req *QueryUserApplicationLinksRequest) (*QueryUserApplicationLinksResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UserApplicationLinks not implemented") @@ -323,20 +319,20 @@ func _Query_UserBlocks_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Query_ProfileByChainLink_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryProfileByChainLinkRequest) +func _Query_UserChainLinks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUserChainLinksRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).ProfileByChainLink(ctx, in) + return srv.(QueryServer).UserChainLinks(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/desmos.profiles.v1beta1.Query/ProfileByChainLink", + FullMethod: "/desmos.profiles.v1beta1.Query/UserChainLinks", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).ProfileByChainLink(ctx, req.(*QueryProfileByChainLinkRequest)) + return srv.(QueryServer).UserChainLinks(ctx, req.(*QueryUserChainLinksRequest)) } return interceptor(ctx, in, info, handler) } @@ -384,8 +380,8 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Handler: _Query_UserBlocks_Handler, }, { - MethodName: "ProfileByChainLink", - Handler: _Query_ProfileByChainLink_Handler, + MethodName: "UserChainLinks", + Handler: _Query_UserChainLinks_Handler, }, { MethodName: "UserApplicationLinks", diff --git a/x/profiles/types/query.pb.gw.go b/x/profiles/types/query.pb.gw.go index b5980ec766..7b160c03b8 100644 --- a/x/profiles/types/query.pb.gw.go +++ b/x/profiles/types/query.pb.gw.go @@ -265,8 +265,12 @@ func local_request_Query_UserBlocks_0(ctx context.Context, marshaler runtime.Mar } -func request_Query_ProfileByChainLink_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProfileByChainLinkRequest +var ( + filter_Query_UserChainLinks_0 = &utilities.DoubleArray{Encoding: map[string]int{"user": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_UserChainLinks_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserChainLinksRequest var metadata runtime.ServerMetadata var ( @@ -276,35 +280,31 @@ func request_Query_ProfileByChainLink_0(ctx context.Context, marshaler runtime.M _ = err ) - val, ok = pathParams["chain_name"] + val, ok = pathParams["user"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user") } - protoReq.ChainName, err = runtime.String(val) + protoReq.User, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user", err) } - val, ok = pathParams["target_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "target_address") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - protoReq.TargetAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "target_address", err) + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserChainLinks_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.ProfileByChainLink(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.UserChainLinks(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_Query_ProfileByChainLink_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryProfileByChainLinkRequest +func local_request_Query_UserChainLinks_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserChainLinksRequest var metadata runtime.ServerMetadata var ( @@ -314,29 +314,25 @@ func local_request_Query_ProfileByChainLink_0(ctx context.Context, marshaler run _ = err ) - val, ok = pathParams["chain_name"] + val, ok = pathParams["user"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_name") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "user") } - protoReq.ChainName, err = runtime.String(val) + protoReq.User, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_name", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "user", err) } - val, ok = pathParams["target_address"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "target_address") + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - - protoReq.TargetAddress, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "target_address", err) + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserChainLinks_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.ProfileByChainLink(ctx, &protoReq) + msg, err := server.UserChainLinks(ctx, &protoReq) return msg, metadata, err } @@ -519,7 +515,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_ProfileByChainLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_UserChainLinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -528,14 +524,14 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_Query_ProfileByChainLink_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_Query_UserChainLinks_0(rctx, inboundMarshaler, server, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProfileByChainLink_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UserChainLinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -700,7 +696,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_ProfileByChainLink_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Query_UserChainLinks_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -709,14 +705,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Query_ProfileByChainLink_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Query_UserChainLinks_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Query_ProfileByChainLink_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Query_UserChainLinks_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -754,7 +750,7 @@ var ( pattern_Query_UserBlocks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"desmos", "relationships", "v1beta1", "blocks", "user"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_Query_ProfileByChainLink_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"desmos", "profiles", "v1beta1", "chain-links", "chain_name", "target_address"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_UserChainLinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"desmos", "profiles", "v1beta1", "chain-links", "user"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Query_UserApplicationLinks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"desmos", "profiles", "v1beta1", "app-links", "user"}, "", runtime.AssumeColonVerbOpt(true))) ) @@ -770,7 +766,7 @@ var ( forward_Query_UserBlocks_0 = runtime.ForwardResponseMessage - forward_Query_ProfileByChainLink_0 = runtime.ForwardResponseMessage + forward_Query_UserChainLinks_0 = runtime.ForwardResponseMessage forward_Query_UserApplicationLinks_0 = runtime.ForwardResponseMessage ) diff --git a/x/staging/posts/keeper/grpc_query_test.go b/x/staging/posts/keeper/grpc_query_test.go index 3e4789120a..bfaab9aea9 100644 --- a/x/staging/posts/keeper/grpc_query_test.go +++ b/x/staging/posts/keeper/grpc_query_test.go @@ -3,6 +3,7 @@ package keeper_test import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" + "github.com/desmos-labs/desmos/x/staging/posts/types" ) From 64e17071fdc0380032fbe8dfccb45eb1f9db27b4 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Mon, 21 Jun 2021 11:06:45 +0200 Subject: [PATCH 04/14] Fixed tests Signed-off-by: Riccardo Montagnin --- go.sum | 308 +------------------- x/profiles/client/cli/query.go | 2 +- x/profiles/keeper/keeper_app_links.go | 93 +++--- x/profiles/keeper/keeper_ibc.go | 6 - x/profiles/types/keys.go | 10 +- x/staging/posts/keeper/keeper_polls_test.go | 1 + 6 files changed, 54 insertions(+), 366 deletions(-) diff --git a/go.sum b/go.sum index 081d04e75b..42fcf367eb 100644 --- a/go.sum +++ b/go.sum @@ -12,7 +12,6 @@ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiy dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -25,14 +24,12 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= -github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -54,12 +51,6 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/bandprotocol/chain v1.0.1-0.20210519090833-cb190e5f333a h1:5XmKrdpEsQo//JPgjicFNZ5iS81LA0O9t/5CSJFgzNM= -github.com/bandprotocol/chain v1.0.1-0.20210519090833-cb190e5f333a/go.mod h1:1fwexaHdT3YxD+aPcq0dWSswChjXUUevIf9rctYgJjA= -github.com/bandprotocol/go-owasm v0.0.0-20210311072328-a6859c27139c h1:G0NLmoFYgPJqH9M2HLkGHayY9euzrEdOOt30/Pqbfqo= -github.com/bandprotocol/go-owasm v0.0.0-20210311072328-a6859c27139c/go.mod h1:buKhSOd32eN0zPbZ/k+4sa6znl33cDg+8JnORQD3/c8= -github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= 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= @@ -67,25 +58,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blevesearch/bleve v1.0.9/go.mod h1:tb04/rbU29clbtNgorgFd8XdJea4x3ybYaOjWKr+UBU= -github.com/blevesearch/blevex v0.0.0-20190916190636-152f0fe5c040/go.mod h1:WH+MU2F4T0VmSdaPX+Wu5GYoZBrYWdOZWSjzvYcDmqQ= -github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= -github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= -github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= -github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= -github.com/blevesearch/zap/v11 v11.0.9/go.mod h1:47hzinvmY2EvvJruzsSCJpro7so8L1neseaGjrtXHOY= -github.com/blevesearch/zap/v12 v12.0.9/go.mod h1:paQuvxy7yXor+0Mx8p2KNmJgygQbQNN+W6HRfL5Hvwc= -github.com/blevesearch/zap/v13 v13.0.1/go.mod h1:XmyNLMvMf8Z5FjLANXwUeDW3e1+o77TTGUWrth7T9WI= -github.com/blevesearch/zap/v14 v14.0.0/go.mod h1:sUc/gPGJlFbSQ2ZUh/wGRYwkKx+Dg/5p+dd+eq6QMXk= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= -github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= @@ -98,7 +76,6 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= 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= @@ -136,36 +113,24 @@ github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6 github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= -github.com/couchbase/ghistogram v0.1.0/go.mod h1:s1Jhy76zqfEecpNWJfWUiKZookAFaiGOEoyzgHt9i7k= -github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= -github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20200515063516-9c493b11de3e h1:hGcgtbuXVwaFx6Hf3KzlrG2elBkijzFqQkWYluo/EZw= github.com/desmos-labs/Go-Emoji-Utils v1.1.1-0.20200515063516-9c493b11de3e/go.mod h1:5TMhouV+kDGQZZrBK+rzBP+Jmeyu0V7WvrBHqukiTv8= github.com/desmos-labs/cosmos-sdk v0.42.5-0.20210520121507-028ded8dbe62 h1:S3thkiFnm9/YUB/injCKQ1jjYKkavLix3mMm2n3n22A= github.com/desmos-labs/cosmos-sdk v0.42.5-0.20210520121507-028ded8dbe62/go.mod h1:3JyT+Ud7QRTO1/ikncNqVhaF526ZKNqh2HGMqXn+QHE= -github.com/dgraph-io/badger v1.6.1 h1:w9pSFNSdq/JPM1N12Fz/F/bzo993Is1W+Q7HjPzi7yg= -github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= -github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= github.com/dgraph-io/badger/v2 v2.2007.1/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= github.com/dgraph-io/badger/v2 v2.2007.2 h1:EjjK0KqwaFMlPin1ajhP943VPENHJdEz1KLIegjaI3k= github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= -github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.0.3 h1:jh22xisGBjrEVnRZ1DVTpBVQm0Xndu8sMl0CWDzSIBI= github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= @@ -179,7 +144,6 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ= github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= -github.com/eapache/channels v1.1.0/go.mod h1:jMm2qB5Ubtg9zLd+inMZd2/NUvXgzmWXsDaLyQIGfH0= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= @@ -195,7 +159,6 @@ github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqL github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -205,16 +168,10 @@ github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fxamacker/cbor/v2 v2.2.1-0.20200526031912-58b82b5bfc05/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= 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-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gorp/gorp v2.2.0+incompatible/go.mod h1:7IfkAQnO7jfT/9IQ3R9wL1dFhukN6aQxzKTHnkxzA/E= 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.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= @@ -223,10 +180,6 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -247,7 +200,6 @@ github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a 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= @@ -275,27 +227,22 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= 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.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw= -github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -327,8 +274,6 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -336,13 +281,10 @@ github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYtXdgmf1AVNs0= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= @@ -362,46 +304,13 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= -github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= @@ -418,131 +327,45 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d h1:Z+RDyXzjKE0i2sTjZ/b1uxiGtPhFy34Ou/Tk0qwN0kM= github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc= 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/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+NVZZA= -github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/kljensen/snowball v0.6.0/go.mod h1:27N7E8fVU5H68RlUmnWwZCfxgt4POBJfENGMvNRhldw= 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/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= 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.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kyokomi/emoji v2.2.4+incompatible/go.mod h1:mZ6aGCD7yk8j6QY6KICwnZ2pxoszVseX1DNoGtU2tBA= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/levigross/grequests v0.0.0-20190908174114-253788527a1a/go.mod h1:jVntzcUU+2BtVohZBQmSHWUmh8B55LCNfPhcNCIvvIg= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p v0.10.2/go.mod h1:BYckt6lmS/oA1SlRETSPWSUulCQKiZuTVsymVMc//HQ= -github.com/libp2p/go-libp2p-autonat v0.3.1/go.mod h1:0OzOi1/cVc7UcxfOddemYD5vzEqi4fwRbnZcJGLi68U= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-circuit v0.3.1/go.mod h1:8RMIlivu1+RxhebipJwFDA45DasLx+kkrp4IlJj53F4= -github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= -github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= -github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= -github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= -github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= -github.com/libp2p/go-libp2p-mplex v0.2.4/go.mod h1:mI7iOezdWFOisvUwaYd3IDrJ4oVmgoXK8H331ui39CE= -github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= -github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= -github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-pubsub v0.3.3/go.mod h1:DTMSVmZZfXodB/pvdTGrY2eHPZ9W2ev7hzTH83OKHrI= -github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= -github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= -github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= -github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= -github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= -github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= -github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= -github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= -github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= -github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.30/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -554,45 +377,10 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ 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/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= -github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.1.2/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -602,28 +390,22 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oasisprotocol/deoxysii v0.0.0-20200527154044-851aec403956/go.mod h1:cE5EgXTIhq5oAVdZ7LZd1FjTRLALPEzv93CWzBtDkyI= -github.com/oasisprotocol/ed25519 v0.0.0-20200528083105-55566edd6df0/go.mod h1:IZbb50w3AB72BVobEF6qG93NNSrTw/V2QlboxqSu3Xw= -github.com/oasisprotocol/oasis-core/go v0.0.0-20200730171716-3be2b460b3ac/go.mod h1:DD7nvKy+YbFcksSeu2P+LyrW6/6Xa2hgmPSdyJA4z+M= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= @@ -631,7 +413,6 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= @@ -653,10 +434,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM= github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= 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/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -668,15 +447,12 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= -github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= @@ -712,14 +488,12 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 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= @@ -736,8 +510,6 @@ github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZ github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= -github.com/segmentio/kafka-go v0.3.7/go.mod h1:8rEphJEczp+yDE/R5vwmaqZgF1wllrl4ioQcNKB8wVA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -746,12 +518,9 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= 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= @@ -763,7 +532,6 @@ github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= @@ -777,12 +545,9 @@ 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.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -799,8 +564,6 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= @@ -809,60 +572,32 @@ github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= -github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= -github.com/tendermint/go-amino v0.15.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= 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.33.6/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4= github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg= github.com/tendermint/tendermint v0.34.0/go.mod h1:Aj3PIipBFSNO21r+Lq3TtzQ+uKESxkbA3yo/INM4QwQ= -github.com/tendermint/tendermint v0.34.9/go.mod h1:kl4Z1JwGx1I+u1SXIzMDy7Z3T8LiMeCAOnzNn6AIMT4= github.com/tendermint/tendermint v0.34.10 h1:wBOc/It8sh/pVH9np2V5fBvRmIyFN/bUrGPx+eAHexs= github.com/tendermint/tendermint v0.34.10/go.mod h1:aeHL7alPh4uTBIJQ8mgFEE8VwJLXI1VD3rVOmH2Mcy0= -github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI= github.com/tendermint/tm-db v0.6.3/go.mod h1:lfA1dL9/Y/Y8wwyPp2NMLyn5P5Ptr/gvDFNWtrCWSf8= github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/thepudds/fzgo v0.2.2/go.mod h1:ZgigL1toyKrar3rWdXz7Fuv7bUpKZ4BAYN49TpEFMCI= -github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= -github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= 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.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec/go.mod h1:BZ1RAoRPbCxum9Grlv5aeksu2H8BiKehBYooU2LFiOQ= -gitlab.com/yawning/dynlib.git v0.0.0-20200603163025-35fe007b0761/go.mod h1:U41r+zgpFRTlkSzMhBjUqbupvVBafgokFFkKn0j+874= -gitlab.com/yawning/slice.git v0.0.0-20190714152416-bc4ae2510529/go.mod h1:sgaKGjNNjAAVrZvQQhE3oYIbnFZVaCBE2T7PmbpKJ4U= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -871,41 +606,26 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= 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.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/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-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -939,11 +659,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/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-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -951,7 +669,6 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/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-20190227160552-c95aed5357e7/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= @@ -960,16 +677,13 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/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-20200226121028-0de0cce0169b/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-20200421231249-e086a090c8fd/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-20200602114024-627f9648deb9/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-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -986,7 +700,6 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ 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-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-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -997,32 +710,22 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/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-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/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-20190405154228-4b34438f7a67/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-20190526052359-791d8a0f4d09/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-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/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-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1035,7 +738,6 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/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-20200722175500-76b94024e4b6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1061,7 +763,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb 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-20181130052023-1c3d964395ce/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= @@ -1078,14 +779,11 @@ golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/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-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/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-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1104,7 +802,6 @@ google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 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/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1128,7 +825,6 @@ google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a h1:tzkHckzMzgPr8SC google.golang.org/genproto v0.0.0-20210510173355-fb37daa5cd7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc/security/advancedtls v0.0.0-20200504170109-c8482678eb49/go.mod h1:MqvBVrZckRvDn3WrLNRHuHWrNGuZISOF4ohGDsL+tK4= 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= @@ -1157,8 +853,6 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10= gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= 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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= diff --git a/x/profiles/client/cli/query.go b/x/profiles/client/cli/query.go index 11bdaa9f4d..03160dacdd 100644 --- a/x/profiles/client/cli/query.go +++ b/x/profiles/client/cli/query.go @@ -26,7 +26,7 @@ func GetQueryCmd() *cobra.Command { GetCmdQueryUserBlocks(), GetCmdQueryParams(), GetCmdQueryUserChainLinks(), - GetCmdQueryAppLinks(), + GetCmdQueryUserApplicationsLinks(), ) return profileQueryCmd } diff --git a/x/profiles/keeper/keeper_app_links.go b/x/profiles/keeper/keeper_app_links.go index 4ab7f5d8d2..84820a6c69 100644 --- a/x/profiles/keeper/keeper_app_links.go +++ b/x/profiles/keeper/keeper_app_links.go @@ -7,15 +7,15 @@ import ( "github.com/desmos-labs/desmos/x/profiles/types" ) -// Connections are stored in two ways: -// 1. ApplicationLinkKey -> types.ApplicationLink -// 2. ClientID -> types.ClientRequest +// Connections are stored using three keys: +// 1. UserApplicationLinkKey (user + application + username) -> types.ApplicationLink +// 2. ApplicationLinkClientIDKey (client_id) -> UserApplicationLinkKey // -// This allows to get connections by client id quickly +// This allows to get connections by client id as well as by app + username quickly // SaveApplicationLink stores the given connection replacing any existing one for the same user and application -func (k Keeper) SaveApplicationLink(ctx sdk.Context, user string, link types.ApplicationLink) error { - _, found, err := k.GetProfile(ctx, user) +func (k Keeper) SaveApplicationLink(ctx sdk.Context, link types.ApplicationLink) error { + _, found, err := k.GetProfile(ctx, link.User) if err != nil { return err } @@ -24,27 +24,19 @@ func (k Keeper) SaveApplicationLink(ctx sdk.Context, user string, link types.App return sdkerrors.Wrapf(types.ErrProfileNotFound, "a profile is required to link an application") } - store := ctx.KVStore(k.storeKey) - - // Store the link - linkBz, err := k.cdc.MarshalBinaryBare(&link) - if err != nil { - return err - } - store.Set(types.ApplicationLinkKey(user, link.Data.Application, link.Data.Username), linkBz) + // Get the keys + userApplicationLinkKey := types.UserApplicationLinkKey(link.User, link.Data.Application, link.Data.Username) + applicationLinkClientIDKey := types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID) - // Store the client request - clientRequest := types.NewClientRequest(user, link.Data.Application, link.Data.Username) - requestBz, err := k.cdc.MarshalBinaryBare(&clientRequest) - if err != nil { - return err - } - store.Set(types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID), requestBz) + // Store the data + store := ctx.KVStore(k.storeKey) + store.Set(userApplicationLinkKey, types.MustMarshalApplicationLink(k.cdc, link)) + store.Set(applicationLinkClientIDKey, userApplicationLinkKey) ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypesApplicationLinkSaved, - sdk.NewAttribute(types.AttributeKeyUser, user), + sdk.NewAttribute(types.AttributeKeyUser, link.User), sdk.NewAttribute(types.AttributeKeyApplicationName, link.Data.Application), sdk.NewAttribute(types.AttributeKeyApplicationUsername, link.Data.Username), ), @@ -53,66 +45,71 @@ func (k Keeper) SaveApplicationLink(ctx sdk.Context, user string, link types.App return nil } -// GetApplicationLink returns the link for the given user, application and username. -// If the link is not found returns an error instead -func (k Keeper) GetApplicationLink(ctx sdk.Context, user, application, username string) (types.ApplicationLink, error) { +// GetApplicationLink returns the link for the given application and username. +// If the link is not found returns an error instead. +func (k Keeper) GetApplicationLink(ctx sdk.Context, user, application, username string) (types.ApplicationLink, bool, error) { store := ctx.KVStore(k.storeKey) - linkKey := types.ApplicationLinkKey(user, application, username) - if !store.Has(linkKey) { - return types.ApplicationLink{}, sdkerrors.Wrap(sdkerrors.ErrNotFound, "link not found") + // Check to see if the key exists + userApplicationLinkKey := types.UserApplicationLinkKey(user, application, username) + if !store.Has(userApplicationLinkKey) { + return types.ApplicationLink{}, false, nil } var link types.ApplicationLink - err := k.cdc.UnmarshalBinaryBare(store.Get(linkKey), &link) + err := k.cdc.UnmarshalBinaryBare(store.Get(userApplicationLinkKey), &link) if err != nil { - return types.ApplicationLink{}, err + return types.ApplicationLink{}, false, err } - return link, nil + return link, true, nil } // GetApplicationLinkByClientID returns the application link and user given a specific client id -func (k Keeper) GetApplicationLinkByClientID(ctx sdk.Context, clientID string) (string, types.ApplicationLink, error) { +func (k Keeper) GetApplicationLinkByClientID(ctx sdk.Context, clientID string) (types.ApplicationLink, error) { store := ctx.KVStore(k.storeKey) // Get the client request using the client id clientIDKey := types.ApplicationLinkClientIDKey(clientID) if !store.Has(clientIDKey) { - return "", types.ApplicationLink{}, + return types.ApplicationLink{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "link for client id %s not found", clientID) } - var clientRequest types.ClientRequest - err := k.cdc.UnmarshalBinaryBare(clientIDKey, &clientRequest) - if err != nil { - return "", types.ApplicationLink{}, err - } + // Get the link key + applicationLinkKey := store.Get(clientIDKey) - link, err := k.GetApplicationLink(ctx, clientRequest.User, clientRequest.Application, clientRequest.Username) + // Read the link + var link types.ApplicationLink + err := k.cdc.UnmarshalBinaryBare(store.Get(applicationLinkKey), &link) if err != nil { - return "", types.ApplicationLink{}, err + return types.ApplicationLink{}, sdkerrors.Wrap(err, "error while reading application link") } - return clientRequest.User, link, nil + return link, nil } // DeleteApplicationLink removes the application link associated to the given user, // for the given application and username func (k Keeper) DeleteApplicationLink(ctx sdk.Context, user string, application, username string) error { - store := ctx.KVStore(k.storeKey) - // Get the link to obtain the client id - link, err := k.GetApplicationLink(ctx, user, application, username) + link, found, err := k.GetApplicationLink(ctx, user, application, username) if err != nil { return err } - // Delete the client request - store.Delete(types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID)) + if !found { + return sdkerrors.Wrap(sdkerrors.ErrNotFound, "application link not found") + } + + if link.User != user { + return sdkerrors.Wrap(sdkerrors.ErrorInvalidSigner, "cannot delete the application link of another user") + } - // Delete the link object - store.Delete(types.ApplicationLinkKey(user, application, username)) + // Delete the data + store := ctx.KVStore(k.storeKey) + store.Delete(types.UserApplicationLinkKey(user, application, username)) + store.Delete(types.ApplicationLinkClientIDKey(link.OracleRequest.ClientID)) return nil } diff --git a/x/profiles/keeper/keeper_ibc.go b/x/profiles/keeper/keeper_ibc.go index ce16a58348..67d45cdc6a 100644 --- a/x/profiles/keeper/keeper_ibc.go +++ b/x/profiles/keeper/keeper_ibc.go @@ -6,7 +6,6 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types" host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" - "github.com/tendermint/tendermint/libs/log" "github.com/desmos-labs/desmos/x/profiles/types" ) @@ -14,11 +13,6 @@ import ( // DONTCOVER // No need to cover this simple methods -// Logger returns a module-specific logger. -func (k Keeper) Logger(ctx sdk.Context) log.Logger { - return ctx.Logger().With("module", "x/"+host.ModuleName+"-"+types.ModuleName) -} - // ChanCloseInit defines a wrapper function for the channel Keeper's function func (k Keeper) ChanCloseInit(ctx sdk.Context, portID, channelID string) error { capName := host.ChannelCapabilityPath(portID, channelID) diff --git a/x/profiles/types/keys.go b/x/profiles/types/keys.go index 66c80d93fa..ef55428fb5 100644 --- a/x/profiles/types/keys.go +++ b/x/profiles/types/keys.go @@ -99,15 +99,17 @@ func ChainLinksStoreKey(user, chainName, address string) []byte { // UserApplicationLinksPrefix returns the store prefix used to identify all the application links for the given user func UserApplicationLinksPrefix(user string) []byte { - return append(ApplicationLinkPrefix, []byte(user)...) + return append(UserApplicationLinkPrefix, []byte(user)...) } -// ApplicationLinkKey returns the key used to store the user that is linked to the given application and username -func ApplicationLinkKey(user, application, username string) []byte { +// UserApplicationLinkKey returns the key used to store the data about the application link +// of the given user for the specified application and username +func UserApplicationLinkKey(user, application, username string) []byte { return append(UserApplicationLinksPrefix(user), []byte(strings.ToLower(application)+strings.ToLower(username))...) } -// ApplicationLinkClientIDKey returns the key used to store the connection for the given client id +// ApplicationLinkClientIDKey returns the key used to store the reference to the application link +// associated with the specified client id func ApplicationLinkClientIDKey(clientID string) []byte { return append(ApplicationLinkClientIDPrefix, []byte(clientID)...) } diff --git a/x/staging/posts/keeper/keeper_polls_test.go b/x/staging/posts/keeper/keeper_polls_test.go index ef8755aab5..42ee0e4ae2 100644 --- a/x/staging/posts/keeper/keeper_polls_test.go +++ b/x/staging/posts/keeper/keeper_polls_test.go @@ -2,6 +2,7 @@ package keeper_test import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/desmos-labs/desmos/x/staging/posts/types" ) From e2c08a23d58291b04b29b225f0328e2875a9502b Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Mon, 21 Jun 2021 11:17:01 +0200 Subject: [PATCH 05/14] Added CHANGELOG entry Signed-off-by: Riccardo Montagnin --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd3d292b3e..cf0bb4dea6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Added the ability to paginate the user poll answers ([#478](https://github.com/desmos-labs/desmos/issues/478)) - Added the logging of some interesting operations ([#483](https://github.com/desmos-labs/desmos/issues/483)) - Make `x/profiles` DTag case-insensitive ([#492](https://github.com/desmos-labs/desmos/issues/492)) +- Added the possibility to verify a profile with an external application ([#472](https://github.com/desmos-labs/desmos/issues/472)) # Version 0.16.3 ## Changes From bf6f2d3c488ada05409352511bcd948fc00529cc Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Mon, 21 Jun 2021 13:09:29 +0200 Subject: [PATCH 06/14] Added the documentation and changed how the MsgLinkApplication is formed Signed-off-by: Riccardo Montagnin --- docs/assets/desmos-band-process.png | Bin 0 -> 33635 bytes docs/assets/desmos-band-setup.png | Bin 0 -> 18407 bytes .../msgs/profiles/link-application.md | 59 +++++++++ .../msgs/profiles/unlink-application.md | 39 ++++++ docs/developers/perform-transactions.md | 2 + docs/developers/types.md | 1 + .../types/profiles/application-link.md | 69 +++++++++++ proto/desmos/posts/v1beta1/genesis.proto | 3 +- .../profiles/v1beta1/msgs_app_links.proto | 11 +- x/profiles/client/cli/cli_app_links.go | 3 +- x/profiles/keeper/relay_app_links.go | 13 +- x/profiles/keeper/relay_app_links_test.go | 14 +-- x/profiles/types/msgs_app_links.go | 8 +- x/profiles/types/msgs_app_links.pb.go | 112 +++++++++--------- x/profiles/types/msgs_app_links_test.go | 33 ++---- 15 files changed, 262 insertions(+), 105 deletions(-) create mode 100644 docs/assets/desmos-band-process.png create mode 100644 docs/assets/desmos-band-setup.png create mode 100644 docs/developers/msgs/profiles/link-application.md create mode 100644 docs/developers/msgs/profiles/unlink-application.md create mode 100644 docs/developers/types/profiles/application-link.md diff --git a/docs/assets/desmos-band-process.png b/docs/assets/desmos-band-process.png new file mode 100644 index 0000000000000000000000000000000000000000..d079c63313597c70cacf078eef84c59a0d45f784 GIT binary patch literal 33635 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 Vr1y3&6KL>{o{o`rfu`fd{{?Zvp!xs+ literal 0 HcmV?d00001 diff --git a/docs/assets/desmos-band-setup.png b/docs/assets/desmos-band-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..fa006bdeba2b2e58f1f0f664cf668e4ec86762f5 GIT binary patch literal 18407 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 literal 0 HcmV?d00001 diff --git a/docs/developers/msgs/profiles/link-application.md b/docs/developers/msgs/profiles/link-application.md new file mode 100644 index 0000000000..f2985e73b9 --- /dev/null +++ b/docs/developers/msgs/profiles/link-application.md @@ -0,0 +1,59 @@ +# `MsgLinkApplication` +This message allows you start the process that will verify +an [application link](../../types/profiles/application-link.md) and add it to your Desmos profile. + +## Structure + +```json +{ + "@type": "/desmos.profiles.v1beta1.MsgLinkApplication", + "link_data": { + "application": "", + "username": "" + }, + "call_data": "", + "source_channel": "", + "source_port": "", + "sender": "" +} +``` + +### Attributes + +| Attribute | Type | Description | +| :-------: | :----: | :-------- | +| `link_data` | [Data](../../types/profiles/application-link.md#data) | Data of the link to be verified | +| `call_data`| `string` | Hex encoded data that will be sent to the data source to verify the link | +| `source_channel` | String | ID of the IBC channel to be used in order to send the packet | +| `source_port` | String | ID of the IBC port to be used in order to send the packet | +| `sender` | String | Desmos address of the profile to which the link will be associated | + +#### Note +You can also specify an optional timeout after which the request will be marked as invalid. This can be done using the +appropriate fields: + +- `height` (type [Height](https://docs.cosmos.network/v0.42/core/proto-docs.html#height)), or +- `timeout_timestamp` (nanoseconds). + +## Example + +````json +{ + "@type": "/desmos.profiles.v1beta1.MsgLinkApplication", + "link_data": { + "application": "github", + "username": "RiccardoM" + }, + "call_data": "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", + "source_channel": "channel-0", + "source_port": "profiles", + "sender": "desmos1qchdngxk8zkl4c4mheqdlpgcegkdrtucmwllpx" +} +```` + +## Message action +The action associated to this message is the following: + +``` +link_application +``` diff --git a/docs/developers/msgs/profiles/unlink-application.md b/docs/developers/msgs/profiles/unlink-application.md new file mode 100644 index 0000000000..d9fed0abe1 --- /dev/null +++ b/docs/developers/msgs/profiles/unlink-application.md @@ -0,0 +1,39 @@ +# `MsgUnlinkApplication` +This message allows you remove a previously linked application from your Desmos profile. + +## Structure + +```json +{ + "@type": "/desmos.profiles.v1beta1.MsgUnlinkApplication", + "application": "", + "username": "", + "signer": "" +} +``` + +### Attributes + +| Attribute | Type | Description | +| :-------: | :----: | :-------- | +| `application` | `string` | Name of the application to be unlinked | +| `username`| `string` | Name of the account inside the application that should be unlinked | +| `signer` | String | Desmos address of the profile that should remove the link | + +## Example + +````json +{ + "@type": "/desmos.profiles.v1beta1.MsgUnlinkApplication", + "application": "twitter", + "username": "RicMontagnin", + "signer": "desmos1qchdngxk8zkl4c4mheqdlpgcegkdrtucmwllpx" +} +```` + +## Message action +The action associated to this message is the following: + +``` +unlink_application +``` diff --git a/docs/developers/perform-transactions.md b/docs/developers/perform-transactions.md index 6f3307feea..8f31207495 100644 --- a/docs/developers/perform-transactions.md +++ b/docs/developers/perform-transactions.md @@ -26,6 +26,8 @@ transactions for the Desmos chain. * [`MsgDeleteRelationship`](msgs/profiles/delete-relationship.md): allows you to delete a relationship. * [`MsgBlockUser`](msgs/profiles/block-user.md): allows you to block a user. * [`MsgUnblockUser`](msgs/profiles/unblock-user.md): allows you to unblock a user. +* [`MsgLinkApplication`](msgs/profiles/link-application.md): allows you to link a centralized application to your Desmos profile. +* [`MsgUnlinkApplication`](msgs/profiles/unlink-application.md): allows you to unlink a previously linked application from your Desmos profile. ### Posts diff --git a/docs/developers/types.md b/docs/developers/types.md index 5af2bcad24..181851eac7 100644 --- a/docs/developers/types.md +++ b/docs/developers/types.md @@ -9,6 +9,7 @@ Following you can find all the custom types that are used to represent the data - [DTag transfer request](types/profiles/dtag-transfer-request.md) - [Relationship](types/profiles/relationship.md) - [User block](types/profiles/user-block.md) +- [Application link](types/profiles/application-link.md) ## Posts diff --git a/docs/developers/types/profiles/application-link.md b/docs/developers/types/profiles/application-link.md new file mode 100644 index 0000000000..a85e988b9b --- /dev/null +++ b/docs/developers/types/profiles/application-link.md @@ -0,0 +1,69 @@ +# Application link +An application link (abbr. _app link_) represents a link to an external (and possibly centralized) application. These links are created by the user and their validity is checked using a multi-step verification process described inside the [_"Themis"_ repository](https://github.com/desmos-labs/themis). + +## `User` +The `User` represents the address of the Desmos profile to which the link is associated. + +## `Data` +The `Data` object contains the details of the link. + +### `Application` +Name of the application to which the link refers to (eg. `twitter`, `github`, `reddit`, etc). + +### `Username` +Identifier of the application account which the link refers to (eg. Twitter username, GitHub profile, Reddit username, etc). + +## `State` +The `State` field represents the current state of the link. There can be five different states in which a link can be: + +- `APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED` if the link has just been created, and it still needs to be processed; +- `APPLICATION_LINK_STATE_VERIFICATION_STARTED` if the verification process has started; +- `APPLICATION_LINK_STATE_VERIFICATION_ERROR` if the verification process ended with an error; +- `APPLICATION_LINK_STATE_VERIFICATION_SUCCESS` if the verification process ended with success; +- `APPLICATION_LINK_STATE_TIMED_OUT` if the verification process expired due to a timeout. + +## `OracleRequest` +The `OracleRequest` field contains all the data that has been sent to the oracle script in order to verify the authenticity of the link. + +### `ID` +This is the unique id of the request that has been made to verify the link. + +### `OracleScriptID` +Unique id of the script that has been called to verify the authenticity of the link. + +### `CallData` +Contains the details of the data that will be used to call the oracle script. + +#### `Application` +Name of the application for which the link is valid (eg. `twitter`, `github`, `reddit`, etc). + +#### `CallData` +The `CallData` field represents the hex-encoded data that will be given to the data source in order to fetch and verify the validity of the link. + +### `ClientID` +ID of the client that has performed the request. + +## `Result` +The `Result` field contains the effective result of the verification process. This is set only if the link state is either `APPLICATION_LINK_STATE_VERIFICATION_SUCCESS` or `APPLICATION_LINK_STATE_VERIFICATION_ERROR`. + +The `Result` field can be of two types: +- `Result_Success` +- `Result_Error` + +### `Result_Success` +Represents a successful result. It contains two fields. + +#### `Value` +Plain text value that has been signed from the user with their Desmos private key to prove the ownership of the Desmos profile. + +#### `Signature` +Hex-encoded result of the plain text value signature. + +### `Result_Error` +Used to identify an error during the verification process. It contains only one field. + +#### `Error` +Represents the description of the error that has been emitted during the verification process. + +## `CreationTime` +Contains the time at which the link has been created. \ No newline at end of file diff --git a/proto/desmos/posts/v1beta1/genesis.proto b/proto/desmos/posts/v1beta1/genesis.proto index 858ee006f7..05a8a82eb4 100644 --- a/proto/desmos/posts/v1beta1/genesis.proto +++ b/proto/desmos/posts/v1beta1/genesis.proto @@ -14,8 +14,7 @@ option go_package = "github.com/desmos-labs/desmos/x/staging/posts/types"; message GenesisState { repeated desmos.posts.v1beta1.Post posts = 1 [ (gogoproto.nullable) = false ]; - repeated UserAnswer users_poll_answers = 2 - [ (gogoproto.nullable) = false ]; + repeated UserAnswer users_poll_answers = 2 [ (gogoproto.nullable) = false ]; repeated PostReactionsEntry posts_reactions = 3 [ (gogoproto.nullable) = false ]; repeated desmos.posts.v1beta1.RegisteredReaction registered_reactions = 4 diff --git a/proto/desmos/profiles/v1beta1/msgs_app_links.proto b/proto/desmos/profiles/v1beta1/msgs_app_links.proto index b7878bac6b..666b2286a9 100644 --- a/proto/desmos/profiles/v1beta1/msgs_app_links.proto +++ b/proto/desmos/profiles/v1beta1/msgs_app_links.proto @@ -23,23 +23,24 @@ message MsgLinkApplication { (gogoproto.moretags) = "yaml:\"link_data\"" ]; - // CallData contains the data used to verify the link - OracleRequest.CallData call_data = 3 [ - (gogoproto.nullable) = false, - (gogoproto.moretags) = "yaml:\"call_data\"" - ]; + // Hex encoded call data that will be sent to the data source in order to + // verify the link + string call_data = 3 [ (gogoproto.moretags) = "yaml:\"call_data\"" ]; // The port on which the packet will be sent string source_port = 4 [ (gogoproto.moretags) = "yaml:\"source_port\"" ]; + // The channel by which the packet will be sent string source_channel = 5 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; + // Timeout height relative to the current block height. // The timeout is disabled when set to 0. ibc.core.client.v1.Height timeout_height = 6 [ (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"timeout_height\"" ]; + // Timeout timestamp (in nanoseconds) relative to the current block timestamp. // The timeout is disabled when set to 0. uint64 timeout_timestamp = 7 diff --git a/x/profiles/client/cli/cli_app_links.go b/x/profiles/client/cli/cli_app_links.go index 570fa1aa14..2ff3e23fda 100644 --- a/x/profiles/client/cli/cli_app_links.go +++ b/x/profiles/client/cli/cli_app_links.go @@ -46,7 +46,6 @@ to the counterparty channel. Any timeout set to 0 is disabled.`), srcPort := args[0] srcChannel := args[1] linkData := types.NewData(args[2], args[3]) - oracleRequestCallData := types.NewOracleRequestCallData(args[2], args[4]) timeoutHeightStr, err := cmd.Flags().GetString(flagPacketTimeoutHeight) if err != nil { @@ -88,7 +87,7 @@ to the counterparty channel. Any timeout set to 0 is disabled.`), } msg := types.NewMsgLinkApplication( - linkData, oracleRequestCallData, sender.String(), + linkData, args[4], sender.String(), srcPort, srcChannel, timeoutHeight, timeoutTimestamp, ) if err := msg.ValidateBasic(); err != nil { diff --git a/x/profiles/keeper/relay_app_links.go b/x/profiles/keeper/relay_app_links.go index 188935a197..95c65a2a83 100644 --- a/x/profiles/keeper/relay_app_links.go +++ b/x/profiles/keeper/relay_app_links.go @@ -55,7 +55,7 @@ type resultData struct { func (k Keeper) StartProfileConnection( ctx sdk.Context, applicationData types.Data, - oracleRequestCallData types.OracleRequest_CallData, + dataSourceCallData string, sender sdk.AccAddress, sourcePort, sourceChannel string, @@ -87,8 +87,8 @@ func (k Keeper) StartProfileConnection( // Create the call data to be used data := oracleScriptCallData{ - Application: oracleRequestCallData.Application, - CallData: oracleRequestCallData.CallData, + Application: strings.ToLower(applicationData.Application), + CallData: dataSourceCallData, } // Serialize the call data using the OBI encoding @@ -134,7 +134,12 @@ func (k Keeper) StartProfileConnection( sender.String(), applicationData, types.ApplicationLinkStateInitialized, - types.NewOracleRequest(-1, int64(OracleScriptID), oracleRequestCallData, clientID), + types.NewOracleRequest( + -1, + int64(OracleScriptID), + types.NewOracleRequestCallData(applicationData.Application, dataSourceCallData), + clientID, + ), nil, ctx.BlockTime(), )) diff --git a/x/profiles/keeper/relay_app_links_test.go b/x/profiles/keeper/relay_app_links_test.go index 74534c09d5..23289a7253 100644 --- a/x/profiles/keeper/relay_app_links_test.go +++ b/x/profiles/keeper/relay_app_links_test.go @@ -62,10 +62,10 @@ func createResponsePacketData( func (suite *KeeperTestSuite) TestKeeper_StartProfileConnection() { var ( - applicationData types.Data - oracleRequestCallData types.OracleRequest_CallData - channelA, channelB ibctesting.TestChannel - err error + applicationData types.Data + callData string + channelA, channelB ibctesting.TestChannel + err error ) testCases := []struct { @@ -120,7 +120,7 @@ func (suite *KeeperTestSuite) TestKeeper_StartProfileConnection() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, exported.Tendermint) channelA, channelB = suite.coordinator.CreateIBCProfilesChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.UNORDERED) applicationData = types.NewData("twitter", "twitteruser") - oracleRequestCallData = types.NewOracleRequestCallData("application", "call_data") + callData = "call_data" }, expPass: false, }, @@ -130,7 +130,7 @@ func (suite *KeeperTestSuite) TestKeeper_StartProfileConnection() { _, _, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, exported.Tendermint) channelA, channelB = suite.coordinator.CreateIBCProfilesChannels(suite.chainA, suite.chainB, connA, connB, channeltypes.UNORDERED) applicationData = types.NewData("twitter", "twitteruser") - oracleRequestCallData = types.NewOracleRequestCallData("application", "call_data") + callData = "call_data" }, storeChainA: func(ctx sdk.Context) { profile := suite.CreateProfileFromAddress(suite.chainA.Account.GetAddress().String()) @@ -151,7 +151,7 @@ func (suite *KeeperTestSuite) TestKeeper_StartProfileConnection() { } err = suite.chainA.App.ProfileKeeper.StartProfileConnection( - suite.chainA.GetContext(), applicationData, oracleRequestCallData, suite.chainA.Account.GetAddress(), + suite.chainA.GetContext(), applicationData, callData, suite.chainA.Account.GetAddress(), channelA.PortID, channelA.ID, clienttypes.NewHeight(0, 110), 0, ) diff --git a/x/profiles/types/msgs_app_links.go b/x/profiles/types/msgs_app_links.go index 663789d111..d795119176 100644 --- a/x/profiles/types/msgs_app_links.go +++ b/x/profiles/types/msgs_app_links.go @@ -1,6 +1,7 @@ package types import ( + "encoding/hex" "strings" sdk "github.com/cosmos/cosmos-sdk/types" @@ -12,7 +13,7 @@ import ( // NewMsgLinkApplication creates a new MsgLinkApplication instance // nolint:interfacer func NewMsgLinkApplication( - linkData Data, callData OracleRequest_CallData, sender string, + linkData Data, callData string, sender string, sourcePort, sourceChannel string, timeoutHeight clienttypes.Height, timeoutTimestamp uint64, ) *MsgLinkApplication { return &MsgLinkApplication{ @@ -44,9 +45,8 @@ func (msg MsgLinkApplication) ValidateBasic() error { return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error()) } - err = msg.CallData.Validate() - if err != nil { - return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, err.Error()) + if _, err := hex.DecodeString(msg.CallData); err != nil { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid call data: must be hex encoded") } err = host.ChannelIdentifierValidator(msg.SourceChannel) diff --git a/x/profiles/types/msgs_app_links.pb.go b/x/profiles/types/msgs_app_links.pb.go index 1f0910f56d..44ea5eb3c1 100644 --- a/x/profiles/types/msgs_app_links.pb.go +++ b/x/profiles/types/msgs_app_links.pb.go @@ -31,8 +31,9 @@ type MsgLinkApplication struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` // LinkData contains the data related to the application to which connect LinkData Data `protobuf:"bytes,2,opt,name=link_data,json=linkData,proto3" json:"link_data" yaml:"link_data"` - // CallData contains the data used to verify the link - CallData OracleRequest_CallData `protobuf:"bytes,3,opt,name=call_data,json=callData,proto3" json:"call_data" yaml:"call_data"` + // Hex encoded call data that will be sent to the data source in order to + // verify the link + CallData string `protobuf:"bytes,3,opt,name=call_data,json=callData,proto3" json:"call_data,omitempty" yaml:"call_data"` // The port on which the packet will be sent SourcePort string `protobuf:"bytes,4,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty" yaml:"source_port"` // The channel by which the packet will be sent @@ -211,43 +212,42 @@ func init() { } var fileDescriptor_6e498d4bf623671e = []byte{ - // 577 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0xcf, 0x6e, 0xd3, 0x30, - 0x1c, 0x4e, 0x60, 0x8c, 0xd6, 0xd3, 0xc6, 0x16, 0x06, 0x84, 0x6a, 0x4b, 0x2a, 0x9f, 0x8a, 0x04, - 0x8e, 0x0a, 0x07, 0xd0, 0x4e, 0x90, 0x71, 0x18, 0x12, 0x13, 0x28, 0x1a, 0x17, 0x2e, 0xc5, 0x49, - 0xbd, 0xd4, 0x9a, 0x13, 0x87, 0xd8, 0xad, 0xd8, 0x1b, 0x70, 0xe4, 0x11, 0xf6, 0x06, 0xdc, 0x78, - 0x86, 0x1d, 0x77, 0xe4, 0x14, 0xa1, 0xf6, 0xc2, 0x39, 0x4f, 0x80, 0xe2, 0xb8, 0xff, 0xd8, 0x7a, - 0xca, 0xcf, 0xdf, 0xef, 0xfb, 0x7d, 0xf6, 0x17, 0x7f, 0x06, 0x4f, 0xfb, 0x44, 0x24, 0x5c, 0x78, - 0x59, 0xce, 0x4f, 0x29, 0x23, 0xc2, 0x1b, 0x75, 0x43, 0x22, 0x71, 0xd7, 0x4b, 0x44, 0x2c, 0x7a, - 0x38, 0xcb, 0x7a, 0x8c, 0xa6, 0x67, 0x02, 0x65, 0x39, 0x97, 0xdc, 0x7a, 0x54, 0xb3, 0xd1, 0x94, - 0x8d, 0x34, 0xbb, 0x85, 0x56, 0xca, 0xf0, 0x3e, 0x61, 0xd7, 0x84, 0x5a, 0xbb, 0x31, 0x8f, 0xb9, - 0x2a, 0xbd, 0xaa, 0xd2, 0xa8, 0x4b, 0xc3, 0xc8, 0x8b, 0x78, 0x4e, 0xbc, 0x88, 0x51, 0x92, 0x4a, - 0x6f, 0xd4, 0xd5, 0x55, 0x4d, 0x80, 0x3f, 0xd7, 0x80, 0x75, 0x2c, 0xe2, 0xf7, 0x34, 0x3d, 0x7b, - 0x93, 0x65, 0x8c, 0x46, 0x58, 0x52, 0x9e, 0x5a, 0x4f, 0xc0, 0xba, 0x20, 0x69, 0x9f, 0xe4, 0xb6, - 0xd9, 0x36, 0x3b, 0x4d, 0x7f, 0xa7, 0x2c, 0xdc, 0xcd, 0x73, 0x9c, 0xb0, 0x03, 0x58, 0xe3, 0x30, - 0xd0, 0x04, 0xeb, 0x04, 0x34, 0xab, 0x73, 0xf4, 0xfa, 0x58, 0x62, 0xfb, 0x56, 0xdb, 0xec, 0x6c, - 0x3c, 0xdf, 0x47, 0x2b, 0x5c, 0xa1, 0xb7, 0x58, 0x62, 0xdf, 0xbe, 0x2c, 0x5c, 0xa3, 0x2c, 0xdc, - 0xed, 0x5a, 0x70, 0x36, 0x0d, 0x83, 0x46, 0x55, 0x57, 0x1c, 0xeb, 0x14, 0x34, 0x23, 0xcc, 0x58, - 0xad, 0x7a, 0x5b, 0xa9, 0x7a, 0x2b, 0x55, 0x3f, 0xe4, 0x38, 0x62, 0x24, 0x20, 0x5f, 0x87, 0x44, - 0x48, 0x74, 0x88, 0x19, 0xbb, 0x69, 0x9f, 0x99, 0x1e, 0x0c, 0x1a, 0x91, 0xe6, 0x58, 0x2f, 0xc1, - 0x86, 0xe0, 0xc3, 0x3c, 0x22, 0xbd, 0x8c, 0xe7, 0xd2, 0x5e, 0x53, 0x6e, 0x1f, 0x96, 0x85, 0x6b, - 0x69, 0xb7, 0xf3, 0x26, 0x0c, 0x40, 0xbd, 0xfa, 0xc8, 0x73, 0x69, 0xbd, 0x06, 0x5b, 0xba, 0x17, - 0x0d, 0x70, 0x9a, 0x12, 0x66, 0xdf, 0x51, 0xb3, 0x8f, 0xcb, 0xc2, 0x7d, 0xb0, 0x34, 0xab, 0xfb, - 0x30, 0xd8, 0xac, 0x81, 0xc3, 0x7a, 0x6d, 0x7d, 0x01, 0x5b, 0x92, 0x26, 0x84, 0x0f, 0x65, 0x6f, - 0x40, 0x68, 0x3c, 0x90, 0xf6, 0xba, 0xf2, 0xd9, 0x42, 0x34, 0x8c, 0x50, 0x75, 0x69, 0x48, 0x5f, - 0xd5, 0xa8, 0x8b, 0x8e, 0x14, 0xc3, 0xdf, 0xd7, 0x96, 0xf4, 0x0e, 0xcb, 0xf3, 0x30, 0xd8, 0xd4, - 0x40, 0xcd, 0xb6, 0xde, 0x81, 0x9d, 0x29, 0xa3, 0xfa, 0x0a, 0x89, 0x93, 0xcc, 0xbe, 0xdb, 0x36, - 0x3b, 0x6b, 0xfe, 0x5e, 0x59, 0xb8, 0xf6, 0xb2, 0xc8, 0x8c, 0x02, 0x83, 0x6d, 0x8d, 0x9d, 0x4c, - 0xa1, 0x83, 0xc6, 0xf7, 0x0b, 0xd7, 0xf8, 0x7b, 0xe1, 0x1a, 0x70, 0x0f, 0xb4, 0xae, 0x07, 0x26, - 0x20, 0x22, 0xe3, 0xa9, 0x20, 0xf0, 0x97, 0x09, 0x76, 0x8f, 0x45, 0xfc, 0x29, 0x65, 0xff, 0x25, - 0xea, 0x15, 0xd8, 0xc0, 0xf3, 0xa5, 0x8e, 0xd5, 0xc2, 0x8f, 0x5e, 0x68, 0xc2, 0x60, 0x91, 0x6a, - 0x79, 0xa0, 0x31, 0x14, 0x24, 0x4f, 0x71, 0x42, 0x54, 0xbe, 0x9a, 0xfe, 0xfd, 0xb2, 0x70, 0xef, - 0xd5, 0x63, 0xd3, 0x0e, 0x0c, 0x66, 0x24, 0x15, 0x5e, 0x1a, 0xa7, 0x24, 0x57, 0xc1, 0x59, 0x0e, - 0xaf, 0xc2, 0xab, 0xf0, 0xaa, 0x62, 0xc1, 0x96, 0x03, 0xf6, 0x6e, 0x3a, 0xf7, 0xd4, 0x98, 0x7f, - 0x74, 0x39, 0x76, 0xcc, 0xab, 0xb1, 0x63, 0xfe, 0x19, 0x3b, 0xe6, 0x8f, 0x89, 0x63, 0x5c, 0x4d, - 0x1c, 0xe3, 0xf7, 0xc4, 0x31, 0x3e, 0xa3, 0x98, 0xca, 0xc1, 0x30, 0x44, 0x11, 0x4f, 0xbc, 0x3a, - 0xa1, 0xcf, 0x18, 0x0e, 0x85, 0xae, 0xbd, 0x6f, 0xf3, 0x27, 0x2c, 0xcf, 0x33, 0x22, 0xc2, 0x75, - 0xf5, 0xf2, 0x5e, 0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xe6, 0xe7, 0x74, 0x8a, 0x29, 0x04, 0x00, + // 561 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x53, 0x3f, 0x6f, 0xd3, 0x40, + 0x1c, 0xb5, 0x69, 0x29, 0xc9, 0x55, 0x29, 0xad, 0x09, 0x60, 0xa2, 0xd4, 0x8e, 0x6e, 0x0a, 0x12, + 0x9c, 0x15, 0x18, 0x40, 0x9d, 0xc0, 0x30, 0x14, 0x89, 0x4a, 0xc8, 0x2a, 0x0b, 0x4b, 0x38, 0x3b, + 0x87, 0x73, 0xaa, 0xed, 0xb3, 0x7c, 0x97, 0x88, 0x7e, 0x03, 0x46, 0x3e, 0x42, 0x3f, 0x05, 0x9f, + 0xa1, 0x63, 0x47, 0x26, 0x0b, 0x25, 0x0b, 0xb3, 0x47, 0x26, 0xe4, 0xbb, 0xcb, 0x3f, 0x4a, 0xa7, + 0xbc, 0x7b, 0xbf, 0xf7, 0x7e, 0xf9, 0xdd, 0xcf, 0xef, 0xc0, 0x93, 0x11, 0xe1, 0x29, 0xe3, 0x5e, + 0x5e, 0xb0, 0x2f, 0x34, 0x21, 0xdc, 0x9b, 0x0e, 0x42, 0x22, 0xf0, 0xc0, 0x4b, 0x79, 0xcc, 0x87, + 0x38, 0xcf, 0x87, 0x09, 0xcd, 0xce, 0x38, 0xca, 0x0b, 0x26, 0x98, 0xf5, 0x50, 0xa9, 0xd1, 0x42, + 0x8d, 0xb4, 0xba, 0x83, 0x6e, 0x6c, 0xc3, 0x46, 0x24, 0xb9, 0xd6, 0xa8, 0xd3, 0x8e, 0x59, 0xcc, + 0x24, 0xf4, 0x6a, 0xa4, 0x59, 0x97, 0x86, 0x91, 0x17, 0xb1, 0x82, 0x78, 0x51, 0x42, 0x49, 0x26, + 0xbc, 0xe9, 0x40, 0x23, 0x25, 0x80, 0x7f, 0xb6, 0x80, 0x75, 0xc2, 0xe3, 0xf7, 0x34, 0x3b, 0x7b, + 0x9d, 0xe7, 0x09, 0x8d, 0xb0, 0xa0, 0x2c, 0xb3, 0x1e, 0x83, 0x1d, 0x4e, 0xb2, 0x11, 0x29, 0x6c, + 0xb3, 0x67, 0xf6, 0x9b, 0xfe, 0x41, 0x55, 0xba, 0xad, 0x73, 0x9c, 0x26, 0x47, 0x50, 0xf1, 0x30, + 0xd0, 0x02, 0xeb, 0x14, 0x34, 0xeb, 0x39, 0x86, 0x23, 0x2c, 0xb0, 0x7d, 0xab, 0x67, 0xf6, 0x77, + 0x9f, 0x1d, 0xa2, 0x1b, 0x6e, 0x85, 0xde, 0x62, 0x81, 0x7d, 0xfb, 0xb2, 0x74, 0x8d, 0xaa, 0x74, + 0xf7, 0x55, 0xc3, 0xa5, 0x1b, 0x06, 0x8d, 0x1a, 0xd7, 0x1a, 0x6b, 0x00, 0x9a, 0x11, 0x4e, 0x12, + 0xd5, 0x75, 0x4b, 0xce, 0xd0, 0x5e, 0x59, 0x96, 0x25, 0x18, 0x34, 0x6a, 0x2c, 0x2d, 0x2f, 0xc0, + 0x2e, 0x67, 0x93, 0x22, 0x22, 0xc3, 0x9c, 0x15, 0xc2, 0xde, 0x96, 0xa6, 0x07, 0x55, 0xe9, 0x5a, + 0x7a, 0xf0, 0x55, 0x11, 0x06, 0x40, 0x9d, 0x3e, 0xb0, 0x42, 0x58, 0xaf, 0xc0, 0x9e, 0xae, 0x45, + 0x63, 0x9c, 0x65, 0x24, 0xb1, 0x6f, 0x4b, 0xef, 0xa3, 0xaa, 0x74, 0xef, 0x6f, 0x78, 0x75, 0x1d, + 0x06, 0x2d, 0x45, 0xbc, 0x51, 0x67, 0xeb, 0x33, 0xd8, 0x13, 0x34, 0x25, 0x6c, 0x22, 0x86, 0x63, + 0x42, 0xe3, 0xb1, 0xb0, 0x77, 0xe4, 0x22, 0x3a, 0x88, 0x86, 0x11, 0xaa, 0xf7, 0x8f, 0xf4, 0xd6, + 0xa7, 0x03, 0x74, 0x2c, 0x15, 0xfe, 0xa1, 0xde, 0x82, 0xfe, 0x87, 0x4d, 0x3f, 0x0c, 0x5a, 0x9a, + 0x50, 0x6a, 0xeb, 0x1d, 0x38, 0x58, 0x28, 0xea, 0x5f, 0x2e, 0x70, 0x9a, 0xdb, 0x77, 0x7a, 0x66, + 0x7f, 0xdb, 0xef, 0x56, 0xa5, 0x6b, 0x6f, 0x36, 0x59, 0x4a, 0x60, 0xb0, 0xaf, 0xb9, 0xd3, 0x05, + 0x75, 0xd4, 0xf8, 0x76, 0xe1, 0x1a, 0xbf, 0x2f, 0x5c, 0x03, 0x76, 0x41, 0xe7, 0xfa, 0xb7, 0x0f, + 0x08, 0xcf, 0x59, 0xc6, 0x09, 0xfc, 0x61, 0x82, 0xf6, 0x09, 0x8f, 0x3f, 0x66, 0xc9, 0x3f, 0xe1, + 0x78, 0x09, 0x76, 0xf1, 0xea, 0xa8, 0x13, 0xb2, 0xb6, 0xe8, 0xb5, 0x22, 0x0c, 0xd6, 0xa5, 0x96, + 0x07, 0x1a, 0x13, 0x4e, 0x8a, 0x0c, 0xa7, 0x44, 0x46, 0xa5, 0xe9, 0xdf, 0xab, 0x4a, 0xf7, 0xae, + 0xb2, 0x2d, 0x2a, 0x30, 0x58, 0x8a, 0x64, 0x0e, 0x69, 0x9c, 0x91, 0x42, 0x67, 0x60, 0x3d, 0x87, + 0x92, 0xaf, 0x73, 0x28, 0xc1, 0xda, 0xb5, 0x1c, 0xd0, 0xfd, 0xdf, 0xdc, 0x8b, 0x8b, 0xf9, 0xc7, + 0x97, 0x33, 0xc7, 0xbc, 0x9a, 0x39, 0xe6, 0xaf, 0x99, 0x63, 0x7e, 0x9f, 0x3b, 0xc6, 0xd5, 0xdc, + 0x31, 0x7e, 0xce, 0x1d, 0xe3, 0x13, 0x8a, 0xa9, 0x18, 0x4f, 0x42, 0x14, 0xb1, 0xd4, 0x53, 0x11, + 0x7e, 0x9a, 0xe0, 0x90, 0x6b, 0xec, 0x7d, 0x5d, 0xbd, 0x46, 0x71, 0x9e, 0x13, 0x1e, 0xee, 0xc8, + 0x47, 0xf4, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x1d, 0x81, 0xb1, 0xf4, 0x03, 0x00, 0x00, } @@ -300,16 +300,13 @@ func (m *MsgLinkApplication) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 } - { - size, err := m.CallData.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintMsgsAppLinks(dAtA, i, uint64(size)) + if len(m.CallData) > 0 { + i -= len(m.CallData) + copy(dAtA[i:], m.CallData) + i = encodeVarintMsgsAppLinks(dAtA, i, uint64(len(m.CallData))) + i-- + dAtA[i] = 0x1a } - i-- - dAtA[i] = 0x1a { size, err := m.LinkData.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -443,8 +440,10 @@ func (m *MsgLinkApplication) Size() (n int) { } l = m.LinkData.Size() n += 1 + l + sovMsgsAppLinks(uint64(l)) - l = m.CallData.Size() - n += 1 + l + sovMsgsAppLinks(uint64(l)) + l = len(m.CallData) + if l > 0 { + n += 1 + l + sovMsgsAppLinks(uint64(l)) + } l = len(m.SourcePort) if l > 0 { n += 1 + l + sovMsgsAppLinks(uint64(l)) @@ -604,7 +603,7 @@ func (m *MsgLinkApplication) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field CallData", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowMsgsAppLinks @@ -614,24 +613,23 @@ func (m *MsgLinkApplication) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthMsgsAppLinks } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthMsgsAppLinks } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.CallData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.CallData = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { diff --git a/x/profiles/types/msgs_app_links_test.go b/x/profiles/types/msgs_app_links_test.go index 39443e7d67..661358a272 100644 --- a/x/profiles/types/msgs_app_links_test.go +++ b/x/profiles/types/msgs_app_links_test.go @@ -12,7 +12,7 @@ import ( var msgLinkApplication = types.NewMsgLinkApplication( types.NewData("twitter", "twitterusername"), - types.NewOracleRequestCallData("twitter", ""), + "call_data", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", types.IBCPortID, "channel-0", @@ -38,10 +38,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { name: "invalid link data returns error", msg: types.NewMsgLinkApplication( types.NewData("", "twitteruser"), - types.NewOracleRequestCallData( - "twitter", - "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", - ), + "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", "channel-0", types.IBCPortID, @@ -51,10 +48,10 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { shouldErr: true, }, { - name: "invalid oracle request call data returns error", + name: "invalid data source call data returns error", msg: types.NewMsgLinkApplication( types.NewData("twitter", "twitteruser"), - types.NewOracleRequestCallData("twitter", "calldata"), + "calldata", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", "channel-0", types.IBCPortID, @@ -67,10 +64,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { name: "invalid channel returns error", msg: types.NewMsgLinkApplication( types.NewData("twitter", "twitteruser"), - types.NewOracleRequestCallData( - "twitter", - "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", - ), + "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", "", types.IBCPortID, @@ -83,10 +77,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { name: "invalid port returns error", msg: types.NewMsgLinkApplication( types.NewData("twitter", "twitteruser"), - types.NewOracleRequestCallData( - "twitter", - "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", - ), + "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", "", "channel-0", @@ -99,10 +90,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { name: "invalid signer returns error", msg: types.NewMsgLinkApplication( types.NewData("twitter", "twitteruser"), - types.NewOracleRequestCallData( - "twitter", - "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", - ), + "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", "cosmos10nsdy9qka3zv0lzw8z9cnu6kanld8jh773", "channel-0", types.IBCPortID, @@ -115,10 +103,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { name: "Valid message returns no error", msg: types.NewMsgLinkApplication( types.NewData("twitter", "twitteruser"), - types.NewOracleRequestCallData( - "twitter", - "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", - ), + "7B22757365726E616D65223A22526963636172646F4D222C22676973745F6964223A223732306530303732333930613930316262383065353966643630643766646564227D", "cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773", types.IBCPortID, "channel-0", @@ -143,7 +128,7 @@ func TestMsgLinkApplication_ValidateBasic(t *testing.T) { } func TestMsgLinkApplication_GetSignBytes(t *testing.T) { - expected := `{"type":"desmos/MsgLinkApplication","value":{"call_data":{"application":"twitter"},"link_data":{"application":"twitter","username":"twitterusername"},"sender":"cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773","source_channel":"channel-0","source_port":"ibc-profiles","timeout_height":{"revision_height":"1000"}}}` + expected := `{"type":"desmos/MsgLinkApplication","value":{"call_data":"call_data","link_data":{"application":"twitter","username":"twitterusername"},"sender":"cosmos10nsdxxdvy9qka3zv0lzw8z9cnu6kanld8jh773","source_channel":"channel-0","source_port":"ibc-profiles","timeout_height":{"revision_height":"1000"}}}` require.Equal(t, expected, string(msgLinkApplication.GetSignBytes())) } From 7e32d33ec94cc731d72c3c0819d7570f5f30f657 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:36:44 +0200 Subject: [PATCH 07/14] Update docs/developers/msgs/profiles/link-application.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/msgs/profiles/link-application.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/msgs/profiles/link-application.md b/docs/developers/msgs/profiles/link-application.md index f2985e73b9..b4083cc8db 100644 --- a/docs/developers/msgs/profiles/link-application.md +++ b/docs/developers/msgs/profiles/link-application.md @@ -1,5 +1,5 @@ # `MsgLinkApplication` -This message allows you start the process that will verify +This message allows you to start the process that will verify an [application link](../../types/profiles/application-link.md) and add it to your Desmos profile. ## Structure From 729ad4b4c571a2fcffdac0b37436d559a9879cb0 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:43:06 +0200 Subject: [PATCH 08/14] Update docs/developers/msgs/profiles/unlink-application.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/msgs/profiles/unlink-application.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/msgs/profiles/unlink-application.md b/docs/developers/msgs/profiles/unlink-application.md index d9fed0abe1..5577e8f029 100644 --- a/docs/developers/msgs/profiles/unlink-application.md +++ b/docs/developers/msgs/profiles/unlink-application.md @@ -1,5 +1,5 @@ # `MsgUnlinkApplication` -This message allows you remove a previously linked application from your Desmos profile. +This message allows you to remove a previously linked application from your Desmos profile. ## Structure From 702bb5a71c323ff248992ae3c0d5f5296788d5f5 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:45:26 +0200 Subject: [PATCH 09/14] Update docs/developers/msgs/profiles/unlink-application.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/msgs/profiles/unlink-application.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/msgs/profiles/unlink-application.md b/docs/developers/msgs/profiles/unlink-application.md index 5577e8f029..59908f3475 100644 --- a/docs/developers/msgs/profiles/unlink-application.md +++ b/docs/developers/msgs/profiles/unlink-application.md @@ -6,7 +6,7 @@ This message allows you to remove a previously linked application from your Desm ```json { "@type": "/desmos.profiles.v1beta1.MsgUnlinkApplication", - "application": "", + "application": "", "username": "", "signer": "" } From 2b2b1aa5d3abd8dc7d2ff81ed14ff4afe608fffb Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:45:39 +0200 Subject: [PATCH 10/14] Update docs/developers/msgs/profiles/unlink-application.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/msgs/profiles/unlink-application.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/msgs/profiles/unlink-application.md b/docs/developers/msgs/profiles/unlink-application.md index 59908f3475..4691c3c72c 100644 --- a/docs/developers/msgs/profiles/unlink-application.md +++ b/docs/developers/msgs/profiles/unlink-application.md @@ -16,7 +16,7 @@ This message allows you to remove a previously linked application from your Desm | Attribute | Type | Description | | :-------: | :----: | :-------- | -| `application` | `string` | Name of the application to be unlinked | +| `application` | `string` | Name of the application to unlink | | `username`| `string` | Name of the account inside the application that should be unlinked | | `signer` | String | Desmos address of the profile that should remove the link | From 69a49ac25cdb0cf695a9fbedf563146ae6dd80d3 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:59:35 +0200 Subject: [PATCH 11/14] Update docs/developers/types/profiles/application-link.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/types/profiles/application-link.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developers/types/profiles/application-link.md b/docs/developers/types/profiles/application-link.md index a85e988b9b..1bd1111a99 100644 --- a/docs/developers/types/profiles/application-link.md +++ b/docs/developers/types/profiles/application-link.md @@ -2,7 +2,7 @@ An application link (abbr. _app link_) represents a link to an external (and possibly centralized) application. These links are created by the user and their validity is checked using a multi-step verification process described inside the [_"Themis"_ repository](https://github.com/desmos-labs/themis). ## `User` -The `User` represents the address of the Desmos profile to which the link is associated. +Address of the Desmos profile to which the link is associated. ## `Data` The `Data` object contains the details of the link. @@ -66,4 +66,4 @@ Used to identify an error during the verification process. It contains only one Represents the description of the error that has been emitted during the verification process. ## `CreationTime` -Contains the time at which the link has been created. \ No newline at end of file +Contains the time at which the link has been created. From eb81e61225527f3ca46176db8dd02b5f07436880 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:59:40 +0200 Subject: [PATCH 12/14] Update docs/developers/types/profiles/application-link.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/types/profiles/application-link.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/types/profiles/application-link.md b/docs/developers/types/profiles/application-link.md index 1bd1111a99..48074d7041 100644 --- a/docs/developers/types/profiles/application-link.md +++ b/docs/developers/types/profiles/application-link.md @@ -5,7 +5,7 @@ An application link (abbr. _app link_) represents a link to an external (and pos Address of the Desmos profile to which the link is associated. ## `Data` -The `Data` object contains the details of the link. +Object that contains the details of the link. ### `Application` Name of the application to which the link refers to (eg. `twitter`, `github`, `reddit`, etc). From f2c606a6d1e9189c99fde6679b23399b9be2d701 Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 08:59:44 +0200 Subject: [PATCH 13/14] Update docs/developers/types/profiles/application-link.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/types/profiles/application-link.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/types/profiles/application-link.md b/docs/developers/types/profiles/application-link.md index 48074d7041..6da665974f 100644 --- a/docs/developers/types/profiles/application-link.md +++ b/docs/developers/types/profiles/application-link.md @@ -14,7 +14,7 @@ Name of the application to which the link refers to (eg. `twitter`, `github`, `r Identifier of the application account which the link refers to (eg. Twitter username, GitHub profile, Reddit username, etc). ## `State` -The `State` field represents the current state of the link. There can be five different states in which a link can be: +Representation of the current state of the link. There can be five different states in which a link can be: - `APPLICATION_LINK_STATE_INITIALIZED_UNSPECIFIED` if the link has just been created, and it still needs to be processed; - `APPLICATION_LINK_STATE_VERIFICATION_STARTED` if the verification process has started; From 5fbfb9780147e25a801c693807a2fce8403b77dd Mon Sep 17 00:00:00 2001 From: Riccardo Montagnin Date: Tue, 22 Jun 2021 09:00:03 +0200 Subject: [PATCH 14/14] Update docs/developers/types/profiles/application-link.md Co-authored-by: Leonardo Bragagnolo --- docs/developers/types/profiles/application-link.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/types/profiles/application-link.md b/docs/developers/types/profiles/application-link.md index 6da665974f..902a937ce6 100644 --- a/docs/developers/types/profiles/application-link.md +++ b/docs/developers/types/profiles/application-link.md @@ -60,7 +60,7 @@ Plain text value that has been signed from the user with their Desmos private ke Hex-encoded result of the plain text value signature. ### `Result_Error` -Used to identify an error during the verification process. It contains only one field. +Identifies an error during the verification process. It contains only one field. #### `Error` Represents the description of the error that has been emitted during the verification process.