syntax = "proto3";
package osmosis.poolincentives.v1beta1;

import "gogoproto/gogo.proto";
import "cosmos_proto/cosmos.proto";
import "amino/amino.proto";
import "osmosis/pool-incentives/v1beta1/incentives.proto";

option go_package = "github.com/osmosis-labs/osmosis/v13/x/pool-incentives/types";

// ReplacePoolIncentivesProposal is a gov Content type for updating the pool
// incentives. If a ReplacePoolIncentivesProposal passes, the proposal’s records
// override the existing DistrRecords set in the module. Each record has a
// specified gauge id and weight, and the incentives are distributed to each
// gauge according to weight/total_weight. The incentives are put in the fee
// pool and it is allocated to gauges and community pool by the DistrRecords
// configuration. Note that gaugeId=0 represents the community pool.
message ReplacePoolIncentivesProposal {
  option (gogoproto.equal) = true;
  option (gogoproto.goproto_getters) = false;
  option (gogoproto.goproto_stringer) = false;
  option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content";
  
  string title = 1;
  string description = 2;
  repeated DistrRecord records = 3 [ (gogoproto.nullable) = false ];
}

// UpdatePoolIncentivesProposal is a gov Content type for updating the pool
// incentives. If a UpdatePoolIncentivesProposal passes, all the DistrRecords
// in the proposals are edited. An existing DistrRecord is not overriden unless
// explicitly included in the proposal.
// This differs from an ReplacePoolIncentivesProposal because it only does an
// in place update of the DistrRecords for gauges explicitly mentioned in the
// proposal.

// For example: if the existing DistrRecords were:
// [(Gauge 0, 5), (Gauge 1, 6), (Gauge 2, 6)]
// An UpdatePoolIncentivesProposal includes
// [(Gauge 1, 0), (Gauge 2, 4), (Gauge 3, 10)]
// This would delete Gauge 1, Edit Gauge 2, and Add Gauge 3
// The result DistrRecords in state would be:
// [(Gauge 0, 5), (Gauge 2, 4), (Gauge 3, 10)]
message UpdatePoolIncentivesProposal {
  option (gogoproto.equal) = true;
  option (gogoproto.goproto_getters) = false;
  option (gogoproto.goproto_stringer) = false;
  option (amino.name) = "osmosis/UpdatePoolIncentivesProposal";
  option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content";

  string title = 1;
  string description = 2;
  repeated DistrRecord records = 3 [ (gogoproto.nullable) = false ];
}
