syntax = "proto3";
package kava.liquid.v1beta1;

import "gogoproto/gogo.proto";
import "cosmos/base/v1beta1/coin.proto";
import "cosmos_proto/cosmos.proto";

option go_package = "github.com/kava-labs/kava/x/liquid/types";

// Msg defines the liquid Msg service.
service Msg {

  // MintDerivative defines a method for converting a delegation into staking deriviatives.
  rpc MintDerivative(MsgMintDerivative) returns (MsgMintDerivativeResponse);

  // BurnDerivative defines a method for converting staking deriviatives into a delegation.
  rpc BurnDerivative(MsgBurnDerivative) returns (MsgBurnDerivativeResponse);
}

// MsgMintDerivative defines the Msg/MintDerivative request type.
message MsgMintDerivative {
  // sender is the owner of the delegation to be converted
  string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  // validator is the validator of the delegation to be converted
  string validator = 2;
  // amount is the quantity of staked assets to be converted
  cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false];
}

// MsgMintDerivativeResponse defines the Msg/MintDerivative response type.
message MsgMintDerivativeResponse {
  // received is the amount of staking derivative minted and sent to the sender
  cosmos.base.v1beta1.Coin received = 1 [(gogoproto.nullable) = false];
}

// MsgBurnDerivative defines the Msg/BurnDerivative request type.
message MsgBurnDerivative {
  // sender is the owner of the derivatives to be converted
  string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
  // validator is the validator of the derivatives to be converted
  string validator = 2;
  // amount is the quantity of derivatives to be converted
  cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false];
}

// MsgBurnDerivativeResponse defines the Msg/BurnDerivative response type.
message MsgBurnDerivativeResponse {
  // received is the number of delegation shares sent to the sender
  string received = 1 [
    (cosmos_proto.scalar)  = "cosmos.Dec",
    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
    (gogoproto.nullable)   = false
  ];
}