Skip to content

Commit c8a9c9e

Browse files
committed
add liquidstake module
1 parent efbcb58 commit c8a9c9e

42 files changed

Lines changed: 13909 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

x/liquidstake/abci.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package liquidstake
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/cosmos/cosmos-sdk/telemetry"
8+
sdk "github.com/cosmos/cosmos-sdk/types"
9+
10+
"github.com/persistenceOne/persistenceCore/v16/x/liquidstake/keeper"
11+
"github.com/persistenceOne/persistenceCore/v16/x/liquidstake/types"
12+
)
13+
14+
func BeginBlock(ctx context.Context, k keeper.Keeper) error {
15+
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
16+
sdkCtx := sdk.UnwrapSDKContext(ctx)
17+
params, err := k.GetParams(sdkCtx)
18+
if err != nil {
19+
return err
20+
}
21+
if !params.ModulePaused {
22+
// return value of UpdateLiquidValidatorSet is useful only in testing
23+
_ = k.UpdateLiquidValidatorSet(sdkCtx, false)
24+
}
25+
return nil
26+
}

x/liquidstake/abci_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package liquidstake_test
2+
3+
import (
4+
"testing"
5+
6+
sdk "github.com/cosmos/cosmos-sdk/types"
7+
"github.com/persistenceOne/persistenceCore/v16/app"
8+
"github.com/persistenceOne/persistenceCore/v16/app/constants"
9+
"github.com/stretchr/testify/suite"
10+
11+
"github.com/persistenceOne/persistenceCore/v16/x/liquidstake"
12+
"github.com/persistenceOne/persistenceCore/v16/x/liquidstake/keeper"
13+
)
14+
15+
type ABCITestSuite struct {
16+
suite.Suite
17+
18+
app *app.Application
19+
ctx sdk.Context
20+
keeper keeper.Keeper
21+
}
22+
23+
func TestABCITestSuite(t *testing.T) {
24+
suite.Run(t, new(ABCITestSuite))
25+
}
26+
27+
func (s *ABCITestSuite) SetupTest() {
28+
constants.SetUnsealedConfig()
29+
s.app = app.Setup(s.T())
30+
s.ctx = s.app.BaseApp.NewContext(false)
31+
32+
s.keeper = *s.app.LiquidStakeKeeper
33+
blocktime, err := sdk.ParseTime("2022-03-01T00:00:00.000000000")
34+
s.Require().NoError(err)
35+
s.ctx = s.ctx.WithBlockHeight(100).WithBlockTime(blocktime)
36+
}
37+
38+
func (s *ABCITestSuite) TestBeginBlock() {
39+
// Test when module is not paused
40+
params, err := s.keeper.GetParams(s.ctx)
41+
s.Require().NoError(err)
42+
params.ModulePaused = false
43+
s.Require().NoError(s.keeper.SetParams(s.ctx, params))
44+
45+
// Call BeginBlock
46+
err = liquidstake.BeginBlock(s.ctx, s.keeper)
47+
s.Require().NoError(err)
48+
49+
// Test when module is paused
50+
params.ModulePaused = true
51+
s.Require().NoError(s.keeper.SetParams(s.ctx, params))
52+
53+
// Call BeginBlock
54+
err = liquidstake.BeginBlock(s.ctx, s.keeper)
55+
s.Require().NoError(err)
56+
}

x/liquidstake/autocli.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package liquidstake
2+
3+
import (
4+
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
5+
6+
liquidstakev1beta1 "github.com/persistenceOne/persistenceCore/v16/x/liquidstake/types"
7+
)
8+
9+
// AutoCLIOptions returns the AutoCLI configuration for the liquidstake module.
10+
// This enables `pstaked` to auto-generate CLI commands for this module based
11+
// on the Msg and Query protobuf service definitions.
12+
func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {
13+
return &autocliv1.ModuleOptions{
14+
Query: &autocliv1.ServiceCommandDescriptor{
15+
Service: liquidstakev1beta1.Query_serviceDesc.ServiceName,
16+
RpcCommandOptions: []*autocliv1.RpcCommandOptions{
17+
{
18+
RpcMethod: "Params",
19+
Use: "params",
20+
Short: "Query the liquidstake module parameters",
21+
},
22+
{
23+
RpcMethod: "LiquidValidators",
24+
Use: "liquid-validators",
25+
Short: "Query all liquid validators",
26+
},
27+
{
28+
RpcMethod: "States",
29+
Use: "states",
30+
Short: "Query liquidstake module states (net amount, mint rate)",
31+
},
32+
},
33+
},
34+
Tx: &autocliv1.ServiceCommandDescriptor{
35+
Service: liquidstakev1beta1.Msg_serviceDesc.ServiceName,
36+
RpcCommandOptions: []*autocliv1.RpcCommandOptions{
37+
{
38+
RpcMethod: "LiquidStake",
39+
Use: "liquid-stake [amount]",
40+
Short: "Liquid-stake XPRT",
41+
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
42+
{ProtoField: "amount"},
43+
},
44+
},
45+
{
46+
RpcMethod: "StakeToLP",
47+
Use: "stake-to-lp [validator-addr] [staked_amount] [liquid_amount]",
48+
Short: "Convert delegation into stkXPRT and lock into LP",
49+
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
50+
{ProtoField: "validator_address"},
51+
{ProtoField: "staked_amount"},
52+
{ProtoField: "liquid_amount", Optional: true},
53+
},
54+
},
55+
{
56+
RpcMethod: "LiquidUnstake",
57+
Use: "liquid-unstake [amount]",
58+
Short: "Liquid-unstake stkXPRT",
59+
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
60+
{ProtoField: "amount"},
61+
},
62+
},
63+
// Authority gated admin txs are kept but discoverable via autocli; typically used with --from authority
64+
{
65+
RpcMethod: "UpdateParams",
66+
Use: "update-params",
67+
Short: "Update liquidstake module params (authority only)",
68+
},
69+
{
70+
RpcMethod: "UpdateWhitelistedValidators",
71+
Use: "update-whitelisted-validators",
72+
Short: "Update whitelisted validators (authority only)",
73+
},
74+
{
75+
RpcMethod: "SetModulePaused",
76+
Use: "set-module-paused",
77+
Short: "Set module paused flag (authority only)",
78+
},
79+
},
80+
},
81+
}
82+
}

0 commit comments

Comments
 (0)