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 }