11package keeper_test
22
3- /*
43import (
54 "context"
65 "math/big"
7- "time"
86
9- "cosmossdk.io/math"
107 sdkmath "cosmossdk.io/math"
118
129 "github.com/cometbft/cometbft/crypto"
@@ -19,17 +16,14 @@ import (
1916
2017 "github.com/piplabs/story/client/x/evmstaking/types"
2118 "github.com/piplabs/story/contracts/bindings"
22- "github.com/piplabs/story/lib/errors"
2319 "github.com/piplabs/story/lib/k1util"
24-
25- "go.uber.org/mock/gomock"
2620)
2721
2822// createValidator creates a validator.
2923func (s * TestSuite ) createValidator (ctx context.Context , valPubKey crypto.PubKey , valAddr sdk.ValAddress ) {
3024 sdkCtx := sdk .UnwrapSDKContext (ctx )
3125 require := s .Require ()
32- bankKeeper, stakingKeeper := s.BankKeeper, s.StakingKeeper
26+ stakingKeeper := s .StakingKeeper
3327
3428 // Convert public key to cosmos format
3529 valCosmosPubKey , err := k1util .PubKeyToCosmos (valPubKey )
@@ -39,13 +33,15 @@ func (s *TestSuite) createValidator(ctx context.Context, valPubKey crypto.PubKey
3933 val := testutil .NewValidator (s .T (), valAddr , valCosmosPubKey )
4034 valTokens := stakingKeeper .TokensFromConsensusPower (ctx , 10 )
4135 validator , _ , _ := val .AddTokensFromDel (valTokens , sdkmath .LegacyOneDec ())
42- bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stypes.NotBondedPoolName, stypes.BondedPoolName, gomock.Any())
36+ // bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stypes.NotBondedPoolName, stypes.BondedPoolName, gomock.Any())
37+ require .NoError (s .BankKeeper .MintCoins (ctx , types .ModuleName , sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , valTokens ))))
38+ require .NoError (s .BankKeeper .SendCoinsFromModuleToModule (ctx , types .ModuleName , stypes .NotBondedPoolName , sdk .NewCoins (sdk .NewCoin (sdk .DefaultBondDenom , valTokens ))))
4339 _ = skeeper .TestingUpdateValidator (stakingKeeper , sdkCtx , validator , true )
4440}
4541
4642func (s * TestSuite ) TestProcessDeposit () {
4743 require := s .Require ()
48- ctx, keeper, accountKeeper, bankKeeper, stakingKeeper := s.Ctx, s.EVMStakingKeeper, s.AccountKeeper, s.BankKeeper , s.StakingKeeper
44+ ctx , keeper , stakingKeeper := s .Ctx , s .EVMStakingKeeper , s .StakingKeeper
4945
5046 pubKeys , accAddrs , valAddrs := createAddresses (2 )
5147 // delegator
@@ -66,15 +62,6 @@ func (s *TestSuite) TestProcessDeposit() {
6662 OperatorAddress : cmpToEVM (delPubKey ),
6763 }
6864 }
69- expectAccountMock := func(isNewAccount bool) {
70- if isNewAccount {
71- accountKeeper.EXPECT().HasAccount(gomock.Any(), delAddr).Return(false)
72- accountKeeper.EXPECT().NewAccountWithAddress(gomock.Any(), delAddr).Return(nil)
73- accountKeeper.EXPECT().SetAccount(gomock.Any(), gomock.Any())
74- } else {
75- accountKeeper.EXPECT().HasAccount(gomock.Any(), delAddr).Return(true)
76- }
77- }
7865
7966 tcs := []struct {
8067 name string
@@ -107,129 +94,25 @@ func (s *TestSuite) TestProcessDeposit() {
10794 },
10895 expectedErr : "invalid uncompressed public key length or format" ,
10996 },
97+ // TODO: corrupted delegator and validator pubkey
11098 {
111- name: "fail: corrupted delegator pubkey",
112- deposit: &bindings.IPTokenStakingDeposit{
113- DelegatorUncmpPubkey: createCorruptedPubKey(cmpToUncmp(delPubKey.Bytes())),
114- ValidatorUncmpPubkey: cmpToUncmp(valPubKey.Bytes()),
115- StakeAmount: new(big.Int).SetUint64(1),
116- StakingPeriod: big.NewInt(0),
117- DelegationId: big.NewInt(0),
118- OperatorAddress: cmpToEVM(delPubKey.Bytes()),
119- },
120- expectedErr: "invalid uncompressed public key length or format",
121- },
122- // {
123- // name: "fail: corrupted validator pubkey",
124- // deposit: createDeposit(delPubKey.Bytes(), createCorruptedPubKey(valPubKey.Bytes()), new(big.Int).SetUint64(1)),
125- // expectedErr: "validator pubkey to evm address",
126- // },
127- {
128- name: "fail: mint coins to existing delegator",
129- settingMock: func() {
130- accountKeeper.EXPECT().HasAccount(gomock.Any(), delAddr).Return(true)
131- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(errors.New(""))
132- },
133- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
134- expectedErr: "create stake coin for depositor: mint coins",
135- },
136- {
137- name: "fail: mint coins to new delegator",
138- settingMock: func() {
139- expectAccountMock(true)
140- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(errors.New(""))
141- },
142- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
143- expectedErr: "create stake coin for depositor: mint coins",
144- },
145- {
146- name: "fail: send coins from module to existing delegator",
147- settingMock: func() {
148- expectAccountMock(false)
149- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
150- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(errors.New(""))
151- },
152- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
153- expectedErr: "create stake coin for depositor: send coins",
154- },
155- {
156- name: "fail: send coins from module to new delegator",
157- settingMock: func() {
158- expectAccountMock(true)
159- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
160- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(errors.New(""))
161- },
162- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
163- expectedErr: "create stake coin for depositor: send coins",
164- },
165- {
166- name: "fail: delegate to existing delegator",
167- settingMock: func() {
168- expectAccountMock(false)
169- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
170- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(nil)
171- bankKeeper.EXPECT().DelegateCoinsFromAccountToModule(gomock.Any(), delAddr, stypes.BondedPoolName, gomock.Any()).Return(errors.New("failed to delegate"))
172- },
173- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
174- expectedErr: "failed to delegate",
175- },
176- {
177- name: "fail: delegate to new delegator",
178- settingMock: func() {
179- expectAccountMock(true)
180- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
181- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(nil)
182- bankKeeper.EXPECT().DelegateCoinsFromAccountToModule(gomock.Any(), delAddr, stypes.BondedPoolName, gomock.Any()).Return(errors.New("failed to delegate"))
183- },
184- deposit: createDeposit(delPubKey.Bytes(), valPubKey.Bytes(), new(big.Int).SetUint64(1)),
185- expectedErr: "failed to delegate",
186- },
187- {
188- name: "pass: existing delegator",
189- settingMock: func() {
190- expectAccountMock(false)
191- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
192- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(nil)
193- bankKeeper.EXPECT().DelegateCoinsFromAccountToModule(gomock.Any(), delAddr, stypes.BondedPoolName, gomock.Any()).Return(nil)
194- },
99+ name : "pass: existing delegator" ,
195100 deposit : createDeposit (delPubKey .Bytes (), valPubKey .Bytes (), new (big.Int ).SetUint64 (1 )),
196101 expectedResult : stypes.Delegation {
197102 DelegatorAddress : delAddr .String (),
198103 ValidatorAddress : valAddr .String (),
199- Shares: math.LegacyNewDecFromInt(math.NewInt(1)),
200- RewardsShares: math.LegacyNewDecFromInt(math.NewInt(1)),
201- PeriodDelegations: map[string]*stypes.PeriodDelegation{
202- stypes.FlexibleDelegationID: {
203- PeriodDelegationId: stypes.FlexibleDelegationID,
204- Shares: math.LegacyNewDecFromInt(math.NewInt(1)),
205- RewardsShares: math.LegacyNewDecFromInt(math.NewInt(1)),
206- EndTime: time.Time{},
207- },
208- },
104+ Shares : sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (1 )),
105+ RewardsShares : sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (1 )).Quo (sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (2 ))),
209106 },
210107 },
211108 {
212- name: "pass: new delegator",
213- settingMock: func() {
214- expectAccountMock(true)
215- bankKeeper.EXPECT().MintCoins(gomock.Any(), types.ModuleName, gomock.Any()).Return(nil)
216- bankKeeper.EXPECT().SendCoinsFromModuleToAccount(gomock.Any(), types.ModuleName, delAddr, gomock.Any()).Return(nil)
217- bankKeeper.EXPECT().DelegateCoinsFromAccountToModule(gomock.Any(), delAddr, stypes.BondedPoolName, gomock.Any()).Return(nil)
218- },
109+ name : "pass: new delegator" ,
219110 deposit : createDeposit (delPubKey .Bytes (), valPubKey .Bytes (), new (big.Int ).SetUint64 (1 )),
220111 expectedResult : stypes.Delegation {
221112 DelegatorAddress : delAddr .String (),
222113 ValidatorAddress : valAddr .String (),
223- Shares: math.LegacyNewDecFromInt(math.NewInt(1)),
224- RewardsShares: math.LegacyNewDecFromInt(math.NewInt(1)),
225- PeriodDelegations: map[string]*stypes.PeriodDelegation{
226- stypes.FlexibleDelegationID: {
227- PeriodDelegationId: stypes.FlexibleDelegationID,
228- Shares: math.LegacyNewDecFromInt(math.NewInt(1)),
229- RewardsShares: math.LegacyNewDecFromInt(math.NewInt(1)),
230- EndTime: time.Time{},
231- },
232- },
114+ Shares : sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (1 )),
115+ RewardsShares : sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (1 )).Quo (sdkmath .LegacyNewDecFromInt (sdkmath .NewInt (2 ))),
233116 },
234117 },
235118 }
@@ -248,7 +131,6 @@ func (s *TestSuite) TestProcessDeposit() {
248131 // check delegation
249132 delegation , err := stakingKeeper .GetDelegation (cachedCtx , delAddr , valAddr )
250133 require .NoError (err )
251- delegation.PeriodDelegations[stypes.FlexibleDelegationID].EndTime = time.Time{}
252134 require .Equal (tc .expectedResult , delegation )
253135 }
254136 })
@@ -291,4 +173,3 @@ func (s *TestSuite) TestParseDepositLog() {
291173 })
292174 }
293175}
294- */
0 commit comments