syntax = "proto3";

package cosmos.query.v1;

import "google/protobuf/descriptor.proto";

// TODO: once we fully migrate to protov2 the go_package needs to be updated.
// We need this right now because gogoproto codegen needs to import the extension.
option go_package = "github.com/cosmos/cosmos-sdk/types/query";

extend google.protobuf.MethodOptions {
  // module_query_safe is set to true when the query is safe to be called from
  // within the state machine, for example from another module's Keeper, via
  // ADR-033 calls or from CosmWasm contracts.
  // Concretely, it means that the query is:
  // 1. deterministic: given a block height, returns the exact same response
  // upon multiple calls; and doesn't introduce any state-machine-breaking
  // changes across SDK patch version.
  // 2. consumes gas correctly.
  //
  // If you are a module developer and want to add this annotation to one of
  // your own queries, please make sure that the corresponding query:
  // 1. is deterministic and won't introduce state-machine-breaking changes
  // without a coordinated upgrade path,
  // 2. has its gas tracked, to avoid the attack vector where no gas is
  // accounted for on potentially high-computation queries.
  //
  // For queries that potentially consume a large amount of gas (for example
  // those with pagination, if the pagination field is incorrectly set), we
  // also recommend adding Protobuf comments to warn module developers
  // consuming these queries.
  //
  // When set to true, the query can safely be called
  bool module_query_safe = 11110001;
}