Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(x/accounts/defaults/lockup): Clean up some logic #20037

Merged
merged 33 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e24324d
use branch service
sontrinh16 Apr 11, 2024
d58b858
add withdraw reward
sontrinh16 Apr 11, 2024
e45a0d9
clean up
sontrinh16 Apr 14, 2024
bf22eff
seperate withdraw reward to another PR
sontrinh16 Apr 14, 2024
375b789
minor
sontrinh16 Apr 14, 2024
fd69fd3
minor
sontrinh16 Apr 14, 2024
4fe5ffd
minor
sontrinh16 Apr 14, 2024
0ad7f95
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 15, 2024
83eca87
add withdraw reward
sontrinh16 Apr 15, 2024
f49f4d0
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 15, 2024
89abdbf
remove loop
sontrinh16 Apr 18, 2024
f8b28ee
just need to initialize bondenom for del and undel trackin
sontrinh16 Apr 18, 2024
c323ee3
add withdraw reward
sontrinh16 Apr 18, 2024
99f1523
fix conflict
sontrinh16 Apr 18, 2024
51d0457
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 21, 2024
2bae4bc
addressing comment
sontrinh16 Apr 21, 2024
a75b91a
remove branch execute for send coins
sontrinh16 Apr 22, 2024
3e749ca
del free and del locking only track bond denom
sontrinh16 Apr 22, 2024
f85deb7
fix conflict
sontrinh16 Apr 24, 2024
5e5661d
fix test
sontrinh16 Apr 24, 2024
d8787f0
remove branch service
sontrinh16 Apr 24, 2024
e338a26
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 24, 2024
a67166c
add e2e test for withdraw reward
sontrinh16 Apr 24, 2024
d968fc7
add tracking check for del and undel
sontrinh16 Apr 24, 2024
6d26484
Merge branch 'son/lockup_cleanup' of https://github.com/cosmos/cosmos…
sontrinh16 Apr 24, 2024
74f856a
minor
sontrinh16 Apr 25, 2024
0bcfadd
remove print log
sontrinh16 Apr 25, 2024
28eb59a
fix test
sontrinh16 Apr 25, 2024
78a438d
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 28, 2024
ed55f56
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 29, 2024
bfb1e18
minor
sontrinh16 Apr 29, 2024
4a13043
minor
sontrinh16 Apr 29, 2024
b44fb4e
Merge branch 'main' into son/lockup_cleanup
sontrinh16 Apr 29, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
748 changes: 650 additions & 98 deletions api/cosmos/accounts/defaults/lockup/tx.pulsar.go

Large diffs are not rendered by default.

57 changes: 54 additions & 3 deletions tests/e2e/accounts/lockup/continous_lockup_test_suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ func (s *E2ETestSuite) TestContinuousLockingAccount() {
addr, err := app.AuthKeeper.AddressCodec().BytesToString(randAcc)
require.NoError(t, err)

vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]

t.Run("error - execute message, wrong sender", func(t *testing.T) {
msg := &types.MsgSend{
Sender: addr,
Expand Down Expand Up @@ -109,9 +113,6 @@ func (s *E2ETestSuite) TestContinuousLockingAccount() {
require.True(t, balance.Amount.Equal(math.NewInt(100)))
})
t.Run("ok - execute delegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Expand All @@ -128,6 +129,19 @@ func (s *E2ETestSuite) TestContinuousLockingAccount() {
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.NewInt(100)))
})
t.Run("ok - execute withdraw reward message", func(t *testing.T) {
msg := &types.MsgWithdrawReward{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)
})
t.Run("ok - execute undelegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
Expand All @@ -148,5 +162,42 @@ func (s *E2ETestSuite) TestContinuousLockingAccount() {
)
require.NoError(t, err)
require.Equal(t, len(ubd.Entries), 1)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.ZeroInt()))
})

// Update context time to end time
ctx = ctx.WithHeaderInfo(header.Info{
Time: currentTime.Add(time.Minute),
})

// test if tracking delegate work perfectly
t.Run("ok - execute delegate message", func(t *testing.T) {
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Amount: sdk.NewCoin("stake", math.NewInt(100)),
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)

valbz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.OperatorAddress)
require.NoError(t, err)

del, err := app.StakingKeeper.Delegations.Get(
ctx, collections.Join(sdk.AccAddress(accountAddr), sdk.ValAddress(valbz)),
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.ZeroInt()))
delFree := lockupAccountInfoResponse.DelegatedFree
require.True(t, delFree.AmountOf("stake").Equal(math.NewInt(100)))
})
}
25 changes: 22 additions & 3 deletions tests/e2e/accounts/lockup/delayed_lockup_test_suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ func (s *E2ETestSuite) TestDelayedLockingAccount() {
addr, err := app.AuthKeeper.AddressCodec().BytesToString(randAcc)
require.NoError(t, err)

vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]

t.Run("error - execute message, wrong sender", func(t *testing.T) {
msg := &types.MsgSend{
Sender: addr,
Expand Down Expand Up @@ -71,9 +75,6 @@ func (s *E2ETestSuite) TestDelayedLockingAccount() {
require.NotNil(t, err)
})
t.Run("ok - execute delegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Expand All @@ -90,6 +91,19 @@ func (s *E2ETestSuite) TestDelayedLockingAccount() {
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.NewInt(100)))
})
t.Run("ok - execute withdraw reward message", func(t *testing.T) {
msg := &types.MsgWithdrawReward{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)
})
t.Run("ok - execute undelegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
Expand All @@ -110,6 +124,11 @@ func (s *E2ETestSuite) TestDelayedLockingAccount() {
)
require.NoError(t, err)
require.Equal(t, len(ubd.Entries), 1)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.ZeroInt()))
})

// Update context time
Expand Down
66 changes: 59 additions & 7 deletions tests/e2e/accounts/lockup/periodic_lockup_test_suite.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package lockup

import (
"fmt"
"testing"
"time"

Expand Down Expand Up @@ -40,13 +41,21 @@ func (s *E2ETestSuite) TestPeriodicLockingAccount() {
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
Length: time.Minute,
},
{
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
Length: time.Minute,
},
Comment on lines +44 to +47
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ensure consistency in test data setup.

Consider using a loop to add multiple periods with the same settings to reduce redundancy and improve maintainability.

- {
-   Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
-   Length: time.Minute,
- },
+ for i := 0; i < 3; i++ {
+   periods = append(periods, types.Period{
+     Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
+     Length: time.Minute,
+   })
+ }

Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
{
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
Length: time.Minute,
},
for i := 0; i < 3; i++ {
periods = append(periods, types.Period{
Amount: sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(500))),
Length: time.Minute,
})
}

},
}, sdk.Coins{sdk.NewCoin("stake", math.NewInt(1000))})
}, sdk.Coins{sdk.NewCoin("stake", math.NewInt(1500))})
require.NoError(t, err)

addr, err := app.AuthKeeper.AddressCodec().BytesToString(randAcc)
require.NoError(t, err)

vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]

t.Run("error - execute message, wrong sender", func(t *testing.T) {
msg := &types.MsgSend{
Sender: addr,
Expand Down Expand Up @@ -125,13 +134,7 @@ func (s *E2ETestSuite) TestPeriodicLockingAccount() {
require.True(t, balance.Amount.Equal(math.NewInt(500)))
})

// Fund acc since we withdraw all the funds
s.fundAccount(app, ctx, accountAddr, sdk.Coins{sdk.NewCoin("stake", math.NewInt(100))})

t.Run("ok - execute delegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Expand All @@ -148,6 +151,20 @@ func (s *E2ETestSuite) TestPeriodicLockingAccount() {
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
fmt.Println(lockupAccountInfoResponse)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.NewInt(100)))
})
t.Run("ok - execute withdraw reward message", func(t *testing.T) {
msg := &types.MsgWithdrawReward{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)
})
t.Run("ok - execute undelegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
Expand All @@ -168,5 +185,40 @@ func (s *E2ETestSuite) TestPeriodicLockingAccount() {
)
require.NoError(t, err)
require.Equal(t, len(ubd.Entries), 1)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.ZeroInt()))
})

// Update context time
// After third period 1500stake should be unlock
ctx = ctx.WithHeaderInfo(header.Info{
Time: currentTime.Add(time.Minute * 3),
})

t.Run("ok - execute delegate message", func(t *testing.T) {
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Amount: sdk.NewCoin("stake", math.NewInt(100)),
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)

valbz, err := app.StakingKeeper.ValidatorAddressCodec().StringToBytes(val.OperatorAddress)
require.NoError(t, err)

del, err := app.StakingKeeper.Delegations.Get(
ctx, collections.Join(sdk.AccAddress(accountAddr), sdk.ValAddress(valbz)),
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delFree := lockupAccountInfoResponse.DelegatedFree
require.True(t, delFree.AmountOf("stake").Equal(math.NewInt(100)))
})
}
25 changes: 22 additions & 3 deletions tests/e2e/accounts/lockup/permanent_lockup_test_suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ func (s *E2ETestSuite) TestPermanentLockingAccount() {
addr, err := app.AuthKeeper.AddressCodec().BytesToString(randAcc)
require.NoError(t, err)

vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]

t.Run("error - execute message, wrong sender", func(t *testing.T) {
msg := &types.MsgSend{
Sender: addr,
Expand All @@ -55,9 +59,6 @@ func (s *E2ETestSuite) TestPermanentLockingAccount() {
require.NotNil(t, err)
})
t.Run("ok - execute delegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
require.NoError(t, err)
val := vals[0]
msg := &types.MsgDelegate{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
Expand All @@ -74,6 +75,19 @@ func (s *E2ETestSuite) TestPermanentLockingAccount() {
)
require.NoError(t, err)
require.NotNil(t, del)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.NewInt(100)))
})
t.Run("ok - execute withdraw reward message", func(t *testing.T) {
msg := &types.MsgWithdrawReward{
Sender: ownerAddrStr,
ValidatorAddress: val.OperatorAddress,
}
err = s.executeTx(ctx, msg, app, accountAddr, accOwner)
require.NoError(t, err)
})
t.Run("ok - execute undelegate message", func(t *testing.T) {
vals, err := app.StakingKeeper.GetAllValidators(ctx)
Expand All @@ -94,6 +108,11 @@ func (s *E2ETestSuite) TestPermanentLockingAccount() {
)
require.NoError(t, err)
require.Equal(t, len(ubd.Entries), 1)

// check if tracking is updated accordingly
lockupAccountInfoResponse := s.queryLockupAccInfo(t, ctx, app, accountAddr)
delLocking := lockupAccountInfoResponse.DelegatedLocking
require.True(t, delLocking.AmountOf("stake").Equal(math.ZeroInt()))
})

s.fundAccount(app, ctx, accountAddr, sdk.Coins{sdk.NewCoin("stake", math.NewInt(1000))})
Expand Down
21 changes: 21 additions & 0 deletions tests/e2e/accounts/lockup/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ import (

"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"google.golang.org/protobuf/runtime/protoiface"

"cosmossdk.io/simapp"
"cosmossdk.io/x/accounts/defaults/lockup/types"
"cosmossdk.io/x/bank/testutil"

"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
sdk "github.com/cosmos/cosmos-sdk/types"
)

type ProtoMsg = protoiface.MessageV1

var (
ownerAddr = secp256k1.GenPrivKey().PubKey().Address()
accOwner = sdk.AccAddress(ownerAddr)
Expand Down Expand Up @@ -48,6 +52,23 @@ func (s *E2ETestSuite) executeTx(ctx sdk.Context, msg sdk.Msg, app *simapp.SimAp
return err
}

func (s *E2ETestSuite) queryAcc(ctx sdk.Context, req sdk.Msg, app *simapp.SimApp, accAddr []byte) (ProtoMsg, error) {
resp, err := app.AccountsKeeper.Query(ctx, accAddr, req)
return resp, err
}

func (s *E2ETestSuite) fundAccount(app *simapp.SimApp, ctx sdk.Context, addr sdk.AccAddress, amt sdk.Coins) {
require.NoError(s.T(), testutil.FundAccount(ctx, app.BankKeeper, addr, amt))
}

func (s *E2ETestSuite) queryLockupAccInfo(t *testing.T, ctx sdk.Context, app *simapp.SimApp, accAddr []byte) *types.QueryLockupAccountInfoResponse {
req := &types.QueryLockupAccountInfoRequest{}
resp, err := s.queryAcc(ctx, req, app, accAddr)
require.NoError(t, err)
require.NotNil(t, resp)

lockupAccountInfoResponse, ok := resp.(*types.QueryLockupAccountInfoResponse)
require.True(t, ok)

return lockupAccountInfoResponse
}
Loading
Loading