syntax = "proto3";
package provenance.marker.v1;

import "amino/amino.proto";
import "gogoproto/gogo.proto";
import "cosmos/bank/v1beta1/bank.proto";
import "cosmos/base/v1beta1/coin.proto";
import "provenance/marker/v1/marker.proto";
import "provenance/marker/v1/accessgrant.proto";

option go_package = "github.com/provenance-io/provenance/x/marker/types";

option java_package        = "io.provenance.marker.v1";
option java_multiple_files = true;

// AddMarkerProposal is deprecated and can no longer be used.
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgAddMarkerRequest in a governance proposal.
message AddMarkerProposal {
  option deprecated = true;

  string title       = 1;
  string description = 2;

  cosmos.base.v1beta1.Coin amount                   = 3 [(gogoproto.nullable) = false];
  string                   manager                  = 4;
  MarkerStatus             status                   = 5;
  MarkerType               marker_type              = 6;
  repeated AccessGrant     access_list              = 7 [(gogoproto.nullable) = false];
  bool                     supply_fixed             = 8;
  bool                     allow_governance_control = 9;
}

// SupplyIncreaseProposal defines a governance proposal to administer a marker and increase total supply of the marker
// through minting coin and placing it within the marker or assigning it directly to an account
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgSupplyIncreaseProposalRequest in a governance proposal.
message SupplyIncreaseProposal {
  option deprecated = true;

  string                   title          = 1;
  string                   description    = 2;
  cosmos.base.v1beta1.Coin amount         = 3 [(gogoproto.nullable) = false];
  string                   target_address = 4; // an optional target address for the minted coin from this request
}

// SupplyDecreaseProposal defines a governance proposal to administer a marker and decrease the total supply through
// burning coin held within the marker
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgSupplyDecreaseProposalRequest in a governance proposal.
message SupplyDecreaseProposal {
  option deprecated = true;

  string                   title       = 1;
  string                   description = 2;
  cosmos.base.v1beta1.Coin amount      = 3 [(gogoproto.nullable) = false];
}

// SetAdministratorProposal defines a governance proposal to administer a marker and set administrators with specific
// access on the marker
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgSetAdministratorProposalRequest in a governance proposal.
message SetAdministratorProposal {
  option deprecated = true;

  string               title       = 1;
  string               description = 2;
  string               denom       = 3;
  repeated AccessGrant access      = 4 [(gogoproto.nullable) = false];
}

// RemoveAdministratorProposal defines a governance proposal to administer a marker and remove all permissions for a
// given address
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgRemoveAdministratorProposalRequest in a governance proposal.
message RemoveAdministratorProposal {
  option deprecated = true;

  string          title           = 1;
  string          description     = 2;
  string          denom           = 3;
  repeated string removed_address = 4;
}

// ChangeStatusProposal defines a governance proposal to administer a marker to change its status
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgChangeStatusProposalRequest in a governance proposal.
message ChangeStatusProposal {
  option deprecated = true;

  string       title       = 1;
  string       description = 2;
  string       denom       = 3;
  MarkerStatus new_status  = 4;
}

// WithdrawEscrowProposal defines a governance proposal to withdraw escrow coins from a marker
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgWithdrawEscrowProposalRequest in a governance proposal.
message WithdrawEscrowProposal {
  option deprecated = true;

  string   title                           = 1;
  string   description                     = 2;
  string   denom                           = 3;
  repeated cosmos.base.v1beta1.Coin amount = 4 [
    (gogoproto.nullable)     = false,
    (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
    (amino.dont_omitempty)   = true,
    (amino.encoding)         = "legacy_coins"
  ];
  string target_address = 5;
}

// SetDenomMetadataProposal defines a governance proposal to set the metadata for a denom
// Deprecated: This message is no longer usable. It is only still included for
// backwards compatibility (e.g. looking up old governance proposals).
// It is replaced by providing a MsgSetDenomMetadataProposalRequest in a governance proposal.
message SetDenomMetadataProposal {
  option deprecated = true;

  string                       title       = 1;
  string                       description = 2;
  cosmos.bank.v1beta1.Metadata metadata    = 3
      [(gogoproto.nullable) = false, (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/x/bank/types.Metadata"];
}