/
msg_delegate_direct.go
62 lines (54 loc) · 1.75 KB
/
msg_delegate_direct.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package types
import (
sdk "github.com/ci123chain/ci123chain/pkg/abci/types"
sdkerrors "github.com/ci123chain/ci123chain/pkg/abci/types/errors"
"time"
)
type MsgStakingDirect struct {
FromAddress sdk.AccAddress `json:"from_address"`
Delegator sdk.AccAddress `json:"delegator"`
Validator sdk.AccAddress `json:"validator"`
Amount sdk.Coin `json:"amount"`
DelegateTime time.Duration `json:"delegate_time"`
}
func NewMsgStakingDirect(from sdk.AccAddress, delegatorAddr sdk.AccAddress, validatorAddr sdk.AccAddress,
amount sdk.Coin, dt time.Duration) *MsgStakingDirect {
return &MsgStakingDirect{
FromAddress: from,
Delegator: delegatorAddr,
Validator: validatorAddr,
Amount: amount,
DelegateTime: dt,
}
}
func (msg *MsgStakingDirect) ValidateBasic() error {
if msg.Delegator.Empty() {
return ErrInvalidDelegatorAddress
}
if msg.Validator.Empty() {
return ErrInvalidValidatorAddress
}
if !msg.FromAddress.Equal(msg.Delegator) {
return ErrFromNotEqualDelegator
}
//if msg.VaultID.Cmp(new(big.Int).SetUint64(0)) <= 1 {
// return ErrInvalidVaultID
//}
if !msg.Amount.IsPositive() {
return sdkerrors.Wrap(sdkerrors.ErrParams, "amount can not be negative")
}
if msg.DelegateTime.Seconds() <= (time.Hour * 24 * 7).Seconds(){
return sdkerrors.Wrap(sdkerrors.ErrParams, "the time should longer than 168h(1 week)")
}
return nil
}
func (msg *MsgStakingDirect) Bytes() []byte {
bytes, err := PreStakingCodec.MarshalBinaryLengthPrefixed(msg)
if err != nil {
panic(err)
}
return bytes
}
func (msg *MsgStakingDirect) Route() string {return ModuleName}
func (msg *MsgStakingDirect) MsgType() string {return "delegate-direct"}
func (msg *MsgStakingDirect) GetFromAddress() sdk.AccAddress { return msg.FromAddress}