/
account.go
157 lines (124 loc) · 3.35 KB
/
account.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package types
import (
"fmt"
"github.com/ci123chain/ci123chain/pkg/abci/types"
"github.com/ci123chain/ci123chain/pkg/account"
"github.com/ci123chain/ci123chain/pkg/account/exported"
types2 "github.com/ci123chain/ci123chain/pkg/account/types"
"github.com/tendermint/tendermint/crypto"
"time"
)
// 0x2f8833FCe544807E6F2b030c758aFe1e0a16Eb29
var _ exported.ModuleAccountI = (*ModuleAccount)(nil)
type ModuleAccount struct {
*account.BaseAccount
Name string `json:"name" yaml:"name"`
Permissions []string `json:"permissions" yaml:"permissions"`
}
func (macc ModuleAccount) SetIsModule(flag bool) error {
return macc.BaseAccount.SetIsModule(flag)
}
func (macc ModuleAccount) GetName() string {
return macc.Name
}
func (macc ModuleAccount) GetPermissions() []string {
return macc.Permissions
}
func (macc *ModuleAccount) SetPermissions(perms []string) {
macc.Permissions = perms
}
func (macc ModuleAccount) HasPermission(perm string) bool {
for _, v := range macc.Permissions {
if v == perm {
return true
}
}
return false
}
func (macc *ModuleAccount) SetAddress(acc types.AccAddress) error {
macc.Address = acc
return nil
}
func (macc ModuleAccount) GetAddress() types.AccAddress {
return macc.Address
}
func (macc ModuleAccount) GetPubKey() crypto.PubKey {
return macc.PubKey
}
func (macc *ModuleAccount) SetPubKey(key crypto.PubKey) error {
macc.PubKey = key
return nil
}
func (macc *ModuleAccount) SetAccountNumber(n uint64) error {
macc.AccountNumber = n
return nil
}
func (macc ModuleAccount) GetAccountNumber() uint64{
return macc.AccountNumber
}
func (macc ModuleAccount) GetSequence() uint64 {
return macc.Sequence
}
func (macc *ModuleAccount) SetSequence(s uint64) error {
macc.Sequence = s
return nil
}
func (macc *ModuleAccount) SetCoins(c types.Coins) error {
macc.Coins = c
return nil
}
func (macc ModuleAccount) GetCoins() types.Coins {
return macc.Coins
}
func (macc ModuleAccount) GetCodeHash() []byte {
return macc.CodeHash
}
func (macc *ModuleAccount) SetCodeHash(hash []byte) {
macc.CodeHash = hash
}
func (macc *ModuleAccount) SetContractType(c string) error {
macc.ContractType = c
return nil
}
func (macc ModuleAccount) GetContractType() string {
return macc.ContractType
}
func (macc ModuleAccount) String() string {
return fmt.Sprintf(`Vesting Account:
Address: %s
Pubkey: %s
Coins: %v
AccountNumber: %d
Sequence: %d`,
macc.Address, macc.PubKey, macc.Coins, macc.AccountNumber, macc.Sequence,
)
}
func (macc ModuleAccount) GetIsModule() bool {
return macc.IsModule
}
func (macc ModuleAccount) SpendableCoins(bt time.Time) types.Coins {
return macc.Coins
}
func NewModuleAddress(name string) types.AccAddress {
return types.ToAccAddress(crypto.AddressHash([]byte(name)))
}
func NewEmptyModuleAccount(name string, permissions ...string) *ModuleAccount {
moduleAddress := NewModuleAddress(name)
baseAcc := types2.NewBaseAccountWithAddress(moduleAddress)
baseAcc.SetIsModule(true)
if err := validatePermissions(permissions...); err != nil {
panic(err)
}
return &ModuleAccount{
BaseAccount: &baseAcc,
Name: name,
Permissions: permissions,
}
}
func NewModuleAccountFromBaseAccount(acc *types2.BaseAccount, name string, permissions ...string) *ModuleAccount {
return &ModuleAccount{
BaseAccount: acc,
Name: name,
Permissions: permissions,
}
}