github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/types/msg_shares.go (about)

     1  package types
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  )
     6  
     7  // ensure Msg interface compliance at compile time
     8  var (
     9  	_ sdk.Msg = (*MsgAddShares)(nil)
    10  	_ sdk.Msg = (*MsgDestroyValidator)(nil)
    11  )
    12  
    13  // MsgDestroyValidator - struct for transactions to deregister a validator
    14  type MsgDestroyValidator struct {
    15  	DelAddr sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
    16  }
    17  
    18  // NewMsgDestroyValidator creates a msg of destroy-validator
    19  func NewMsgDestroyValidator(delAddr sdk.AccAddress) MsgDestroyValidator {
    20  	return MsgDestroyValidator{
    21  		DelAddr: delAddr,
    22  	}
    23  }
    24  
    25  // nolint
    26  func (MsgDestroyValidator) Route() string { return RouterKey }
    27  func (MsgDestroyValidator) Type() string  { return "destroy_validator" }
    28  func (msg MsgDestroyValidator) GetSigners() []sdk.AccAddress {
    29  	return []sdk.AccAddress{msg.DelAddr}
    30  }
    31  
    32  // ValidateBasic gives a quick validity check
    33  func (msg MsgDestroyValidator) ValidateBasic() error {
    34  	if msg.DelAddr.Empty() {
    35  		return ErrNilDelegatorAddr()
    36  	}
    37  
    38  	return nil
    39  }
    40  
    41  // GetSignBytes returns the message bytes to sign over
    42  func (msg MsgDestroyValidator) GetSignBytes() []byte {
    43  	bytes := ModuleCdc.MustMarshalJSON(msg)
    44  	return sdk.MustSortJSON(bytes)
    45  }
    46  
    47  // MsgUnbindProxy - structure for unbinding proxy relationship between the delegator and the proxy
    48  type MsgUnbindProxy struct {
    49  	DelAddr sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
    50  }
    51  
    52  // NewMsgUnbindProxy creates a msg of unbinding proxy
    53  func NewMsgUnbindProxy(delAddr sdk.AccAddress) MsgUnbindProxy {
    54  	return MsgUnbindProxy{
    55  		DelAddr: delAddr,
    56  	}
    57  }
    58  
    59  // nolint
    60  func (MsgUnbindProxy) Route() string { return RouterKey }
    61  func (MsgUnbindProxy) Type() string  { return "unbind_proxy" }
    62  func (msg MsgUnbindProxy) GetSigners() []sdk.AccAddress {
    63  	return []sdk.AccAddress{msg.DelAddr}
    64  }
    65  
    66  // ValidateBasic gives a quick validity check
    67  func (msg MsgUnbindProxy) ValidateBasic() error {
    68  	if msg.DelAddr.Empty() {
    69  		return ErrNilDelegatorAddr()
    70  	}
    71  	return nil
    72  }
    73  
    74  // GetSignBytes returns the message bytes to sign over
    75  func (msg MsgUnbindProxy) GetSignBytes() []byte {
    76  	bytes := ModuleCdc.MustMarshalJSON(msg)
    77  	return sdk.MustSortJSON(bytes)
    78  }
    79  
    80  // MsgRegProxy - register delegator as proxy or unregister proxy to delegator
    81  // if Reg == true, action is reg, otherwise action is unreg
    82  type MsgRegProxy struct {
    83  	ProxyAddress sdk.AccAddress `json:"proxy_address" yaml:"proxy_address"`
    84  	Reg          bool           `json:"reg" yaml:"reg"`
    85  }
    86  
    87  // NewMsgRegProxy creates a msg of registering proxy
    88  func NewMsgRegProxy(proxyAddress sdk.AccAddress, reg bool) MsgRegProxy {
    89  	return MsgRegProxy{
    90  		ProxyAddress: proxyAddress,
    91  		Reg:          reg,
    92  	}
    93  }
    94  
    95  // nolint
    96  func (MsgRegProxy) Route() string { return RouterKey }
    97  func (MsgRegProxy) Type() string  { return "reg_or_unreg_proxy" }
    98  func (msg MsgRegProxy) GetSigners() []sdk.AccAddress {
    99  	return []sdk.AccAddress{msg.ProxyAddress}
   100  }
   101  
   102  // ValidateBasic gives a quick validity check
   103  func (msg MsgRegProxy) ValidateBasic() error {
   104  	if msg.ProxyAddress.Empty() {
   105  		return ErrNilDelegatorAddr()
   106  	}
   107  	return nil
   108  }
   109  
   110  // GetSignBytes returns the message bytes to sign over
   111  func (msg MsgRegProxy) GetSignBytes() []byte {
   112  	bytes := ModuleCdc.MustMarshalJSON(msg)
   113  	return sdk.MustSortJSON(bytes)
   114  }
   115  
   116  // MsgBindProxy - structure for bind proxy relationship between the delegator and the proxy
   117  type MsgBindProxy struct {
   118  	DelAddr      sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
   119  	ProxyAddress sdk.AccAddress `json:"proxy_address" yaml:"proxy_address"`
   120  }
   121  
   122  // NewMsgBindProxy creates a msg of binding proxy
   123  func NewMsgBindProxy(delAddr sdk.AccAddress, ProxyDelAddr sdk.AccAddress) MsgBindProxy {
   124  	return MsgBindProxy{
   125  		DelAddr:      delAddr,
   126  		ProxyAddress: ProxyDelAddr,
   127  	}
   128  }
   129  
   130  // nolint
   131  func (MsgBindProxy) Route() string { return RouterKey }
   132  func (MsgBindProxy) Type() string  { return "bind_proxy" }
   133  func (msg MsgBindProxy) GetSigners() []sdk.AccAddress {
   134  	return []sdk.AccAddress{msg.DelAddr}
   135  }
   136  
   137  // ValidateBasic gives a quick validity check
   138  func (msg MsgBindProxy) ValidateBasic() error {
   139  	if msg.DelAddr.Empty() || msg.ProxyAddress.Empty() {
   140  		return ErrNilDelegatorAddr()
   141  	}
   142  
   143  	if msg.DelAddr.Equals(msg.ProxyAddress) {
   144  		return ErrDelegatorEqualToProxyAddr()
   145  	}
   146  
   147  	return nil
   148  }
   149  
   150  // GetSignBytes returns the message bytes to sign over
   151  func (msg MsgBindProxy) GetSignBytes() []byte {
   152  	bytes := ModuleCdc.MustMarshalJSON(msg)
   153  	return sdk.MustSortJSON(bytes)
   154  }
   155  
   156  // MsgAddShares - struct for adding-shares transaction
   157  type MsgAddShares struct {
   158  	DelAddr  sdk.AccAddress   `json:"delegator_address" yaml:"delegator_address"`
   159  	ValAddrs []sdk.ValAddress `json:"validator_addresses" yaml:"validator_addresses"`
   160  }
   161  
   162  // NewMsgAddShares creates a msg of adding shares to vals
   163  func NewMsgAddShares(delAddr sdk.AccAddress, valAddrs []sdk.ValAddress) MsgAddShares {
   164  	return MsgAddShares{
   165  		DelAddr:  delAddr,
   166  		ValAddrs: valAddrs,
   167  	}
   168  }
   169  
   170  // nolint
   171  func (MsgAddShares) Route() string { return RouterKey }
   172  func (MsgAddShares) Type() string  { return "add_shares_to_validators" }
   173  func (msg MsgAddShares) GetSigners() []sdk.AccAddress {
   174  	return []sdk.AccAddress{msg.DelAddr}
   175  }
   176  
   177  // ValidateBasic gives a quick validity check
   178  func (msg MsgAddShares) ValidateBasic() error {
   179  	if msg.DelAddr.Empty() {
   180  		return ErrNilDelegatorAddr()
   181  	}
   182  
   183  	if msg.ValAddrs == nil || len(msg.ValAddrs) == 0 {
   184  		return ErrBadValidatorAddr()
   185  	}
   186  
   187  	if isValsDuplicate(msg.ValAddrs) {
   188  		return ErrTargetValsDuplicate()
   189  	}
   190  
   191  	return nil
   192  }
   193  
   194  // GetSignBytes returns the message bytes to sign over
   195  func (msg MsgAddShares) GetSignBytes() []byte {
   196  	bytes := ModuleCdc.MustMarshalJSON(msg)
   197  	return sdk.MustSortJSON(bytes)
   198  }
   199  
   200  func isValsDuplicate(valAddrs []sdk.ValAddress) bool {
   201  	lenAddrs := len(valAddrs)
   202  	filter := make(map[string]struct{}, lenAddrs)
   203  	for i := 0; i < lenAddrs; i++ {
   204  		key := valAddrs[i].String()
   205  		if _, ok := filter[key]; ok {
   206  			return true
   207  		}
   208  		filter[key] = struct{}{}
   209  	}
   210  
   211  	return false
   212  }
   213  
   214  // MsgDeposit - structure for depositing to the delegator account
   215  type MsgDeposit struct {
   216  	DelegatorAddress sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
   217  	Amount           sdk.SysCoin    `json:"quantity" yaml:"quantity"`
   218  }
   219  
   220  // NewMsgDeposit creates a new instance of MsgDeposit
   221  func NewMsgDeposit(delAddr sdk.AccAddress, amount sdk.SysCoin) MsgDeposit {
   222  	return MsgDeposit{
   223  		DelegatorAddress: delAddr,
   224  		Amount:           amount,
   225  	}
   226  }
   227  
   228  // nolint
   229  func (msg MsgDeposit) Route() string { return RouterKey }
   230  func (msg MsgDeposit) Type() string  { return "deposit" }
   231  func (msg MsgDeposit) GetSigners() []sdk.AccAddress {
   232  	return []sdk.AccAddress{msg.DelegatorAddress}
   233  }
   234  
   235  // ValidateBasic gives a quick validity check
   236  func (msg MsgDeposit) ValidateBasic() error {
   237  	if msg.DelegatorAddress.Empty() {
   238  		return ErrNilDelegatorAddr()
   239  	}
   240  	if msg.Amount.Amount.LTE(sdk.ZeroDec()) || !msg.Amount.IsValid() {
   241  		return ErrBadDelegationAmount()
   242  	}
   243  	return nil
   244  }
   245  
   246  // GetSignBytes returns the message bytes to sign over
   247  func (msg MsgDeposit) GetSignBytes() []byte {
   248  	bz := ModuleCdc.MustMarshalJSON(msg)
   249  	return sdk.MustSortJSON(bz)
   250  }
   251  
   252  // MsgWithdraw - structure for withdrawing fibo and the corresponding shares from all validators
   253  type MsgWithdraw struct {
   254  	DelegatorAddress sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
   255  	Amount           sdk.SysCoin    `json:"quantity" yaml:"quantity"`
   256  }
   257  
   258  // NewMsgWithdraw creates a new instance of MsgWithdraw
   259  func NewMsgWithdraw(delAddr sdk.AccAddress, amount sdk.SysCoin) MsgWithdraw {
   260  	return MsgWithdraw{
   261  		DelegatorAddress: delAddr,
   262  		Amount:           amount,
   263  	}
   264  }
   265  
   266  // nolint
   267  func (msg MsgWithdraw) Route() string { return RouterKey }
   268  func (msg MsgWithdraw) Type() string  { return "withdraw" }
   269  func (msg MsgWithdraw) GetSigners() []sdk.AccAddress {
   270  	return []sdk.AccAddress{msg.DelegatorAddress}
   271  }
   272  
   273  // ValidateBasic gives a quick validity check
   274  func (msg MsgWithdraw) ValidateBasic() error {
   275  	if msg.DelegatorAddress.Empty() {
   276  		return ErrNilDelegatorAddr()
   277  	}
   278  	if !msg.Amount.IsValid() {
   279  		return ErrBadUnDelegationAmount()
   280  	}
   281  	return nil
   282  }
   283  
   284  // GetSignBytes returns the message bytes to sign over
   285  func (msg MsgWithdraw) GetSignBytes() []byte {
   286  	bz := ModuleCdc.MustMarshalJSON(msg)
   287  	return sdk.MustSortJSON(bz)
   288  }