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

[Supplier] Enforce minimum stake when staking #857

Merged
merged 187 commits into from
Oct 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
187 commits
Select commit Hold shift + click to select a range
d1cd5e6
scaffold: message update-param --module gateway --signer authority na…
bryanchriswhite Sep 9, 2024
91eecfc
chore: update gateway MsgUpdateParam fields
bryanchriswhite Sep 9, 2024
ef62280
chore: update MsgUpdateParamResponse fields
bryanchriswhite Sep 23, 2024
f7a6e5b
chore: comment out autocli for gateway module param updates
bryanchriswhite Sep 10, 2024
8957f1c
fix: linter error
bryanchriswhite Sep 26, 2024
3016ca3
revert: premature changes
bryanchriswhite Sep 26, 2024
899effb
feat: add min_stake gateway module param
bryanchriswhite Sep 26, 2024
83c1d74
chore: cleanup makefiles and param update JSON files
bryanchriswhite Sep 23, 2024
55e6a31
chore: add gateway module param make targets
bryanchriswhite Sep 23, 2024
ddd68bb
refctor: consolidate param config types
bryanchriswhite Sep 26, 2024
fa8caf6
tests: improve error messaging
bryanchriswhite Sep 26, 2024
ae006e2
tests: add coverage over gateway min stake param updates
bryanchriswhite Sep 26, 2024
e92e3b1
chore: add as_coin as_type type 😉
bryanchriswhite Sep 26, 2024
b2e1267
chore: add app MsgUpdateParam to genesis authorizations
bryanchriswhite Sep 26, 2024
0373fa2
fix: typo
bryanchriswhite Sep 26, 2024
da7894a
chore: cleanup makefiles
bryanchriswhite Sep 26, 2024
015c537
wip: fixing tests
bryanchriswhite Sep 26, 2024
1ac6c48
tests: add tests
bryanchriswhite Sep 26, 2024
db366f6
tests: remove erroneous case
bryanchriswhite Sep 26, 2024
60bef17
test: gateway staking below minimum fails
bryanchriswhite Sep 27, 2024
a21687f
feat: gateway min stake validation & grpc status error returns
bryanchriswhite Sep 27, 2024
7e9f857
chore: cleanup comments
bryanchriswhite Sep 27, 2024
4140710
scaffold: message update-param --module examplemod --signer authority…
bryanchriswhite Sep 27, 2024
0a8d922
chore: update MsgUpdateParam fields
bryanchriswhite Sep 27, 2024
c88edd6
chore: comment out application MsgUpdateParam autocli
bryanchriswhite Sep 27, 2024
da51239
chore: add application MsgUpdateParam to dao genesis authorizations
bryanchriswhite Sep 27, 2024
45c5a99
chore: update NewMsgUpdateParam constructor
bryanchriswhite Sep 27, 2024
d987e09
fix: simulations generated code
bryanchriswhite Sep 27, 2024
0da255d
chore: add min_stake param to application module params
bryanchriswhite Sep 27, 2024
4542628
chore: update params config for param updates test suite
bryanchriswhite Sep 27, 2024
b81ca9e
chore: add parameter validation
bryanchriswhite Sep 27, 2024
cdff4b3
chore: add param update make targets and JSON msgs
bryanchriswhite Sep 27, 2024
be24753
chore: add default application min_stake param of 1 POKT to genesis c…
bryanchriswhite Sep 27, 2024
45b6e5c
chore: update MsgUpdateParamResponse & add AsUint64 AsType type
bryanchriswhite Sep 27, 2024
b3e139a
feat: implement MsgUpdateParam handler
bryanchriswhite Sep 27, 2024
872202b
test: MsgUpdateParam handler
bryanchriswhite Sep 27, 2024
a49d69b
feat: implement NewMsgUpdateParam constructor
bryanchriswhite Sep 27, 2024
d63a429
chore: add min_stake validation
bryanchriswhite Sep 27, 2024
9040bf0
chore: tidy up
bryanchriswhite Sep 27, 2024
4340590
chore: review feedback improvements
bryanchriswhite Sep 30, 2024
4b8e95b
Merge branch 'main' into issues/612/chore/gateway-msg-update-param
bryanchriswhite Sep 30, 2024
352afa1
chore: review feedback improvements
bryanchriswhite Sep 30, 2024
6afdaef
fix: linter errors
bryanchriswhite Sep 30, 2024
0839ae4
chore: review feedback improvements
bryanchriswhite Sep 30, 2024
34b0d6d
Merge remote-tracking branch 'pokt/issues/612/chore/gateway-msg-updat…
bryanchriswhite Sep 30, 2024
f48fa66
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Sep 30, 2024
6c5e13f
chore: review feedback improvements
bryanchriswhite Sep 30, 2024
a77877b
fix: test error message
bryanchriswhite Sep 30, 2024
9f65d25
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Sep 30, 2024
28962ba
Merge remote-tracking branch 'pokt/main' into issues/612/param/min-st…
bryanchriswhite Sep 30, 2024
497ecd9
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Sep 30, 2024
d92eb59
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Sep 30, 2024
941b801
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Sep 30, 2024
36e5f2e
chore: update message_update_param_test.go
bryanchriswhite Sep 30, 2024
2baa173
fix: genesis tests
bryanchriswhite Sep 30, 2024
7018149
chore: use AsInt64 to update MaxDelegatedGateways for consistency
bryanchriswhite Sep 30, 2024
c36fe79
chore: ensure application stake handler returns grpc status errors
bryanchriswhite Sep 30, 2024
eab9417
tests: update app stake msg handler unit tests
bryanchriswhite Sep 30, 2024
da9b322
feat: enforce application min stake when staking
bryanchriswhite Sep 30, 2024
5e47c98
fix: failing unit tests
bryanchriswhite Sep 30, 2024
323299e
chore: add PreGeneratedAccountIterator#MustNext()
bryanchriswhite Oct 1, 2024
d888548
chore: update require deps for RingClient
bryanchriswhite Oct 1, 2024
e87564d
refactor: extract application unbonding to method
bryanchriswhite Oct 1, 2024
7d5c17b
test: app is unbonded when settlement lowers stake below min
bryanchriswhite Oct 1, 2024
030f2ef
feat: unbond app when stake drops below min when settling
bryanchriswhite Oct 1, 2024
3e77f7c
chore: add TODO_NEXT comments
bryanchriswhite Oct 1, 2024
090ca9a
fix: failing tests
bryanchriswhite Oct 1, 2024
c14ad46
chore: add TODOs & update comments
bryanchriswhite Oct 1, 2024
d0b4187
chore: add TODOs & update comments
bryanchriswhite Oct 1, 2024
891a858
chore: review feedback improvements
bryanchriswhite Oct 2, 2024
08e99ba
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Oct 2, 2024
da9a240
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 2, 2024
d85d969
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Oct 2, 2024
47da555
Merge branch 'issues/612/application/min-stake-param' into issues/612…
bryanchriswhite Oct 2, 2024
0f55e91
Merge branch 'issues/612/application/staking' into issues/612/applica…
bryanchriswhite Oct 2, 2024
d98b22b
test: simplify
bryanchriswhite Oct 2, 2024
ccc3f53
fix: e2e test
bryanchriswhite Oct 2, 2024
47e0993
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Oct 2, 2024
c08abfd
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 2, 2024
8336d76
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Oct 2, 2024
9386791
Merge branch 'issues/612/application/min-stake-param' into issues/612…
bryanchriswhite Oct 2, 2024
0a72a83
Merge branch 'issues/612/application/staking' into issues/612/applica…
bryanchriswhite Oct 2, 2024
ce5b693
chore: increase genesis app stakes so E2E tests don't burn them out
bryanchriswhite Oct 2, 2024
2d2e815
scaffold: message update-param --module examplemod --signer authority…
bryanchriswhite Oct 2, 2024
bb0267d
chore: update MsgUpdateParam & MsgUpdateParamResponse field types
bryanchriswhite Oct 2, 2024
83b7311
chore: comment out autoCLI
bryanchriswhite Oct 2, 2024
fd42c5e
chore: add supplier MsgUpdateParam to DAO genesis authorizations
bryanchriswhite Oct 2, 2024
63bc125
chore: add supplier param invalid error
bryanchriswhite Oct 2, 2024
f3bb3e0
chore: update NewMsgUpdateParam() & MsgUpdateParam#ValidateBasic()
bryanchriswhite Oct 2, 2024
acb6622
chore: update msgServer#UpdateParam()
bryanchriswhite Oct 2, 2024
935a40f
chore: update param update test module param config
bryanchriswhite Oct 2, 2024
b29843e
Empty commit
bryanchriswhite Oct 2, 2024
8c25061
Empty commit
bryanchriswhite Oct 2, 2024
3f59041
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Oct 2, 2024
ce328bb
fix: linter errors
bryanchriswhite Oct 2, 2024
17b6420
fix: failing tests & add TODO_UPNEXT comments
bryanchriswhite Oct 2, 2024
4583b75
chore: add min_stake param to supplier module
bryanchriswhite Oct 2, 2024
e84643d
test: add min_stake to supplier ModuleParamConfig
bryanchriswhite Oct 2, 2024
f694bad
chore: add min_stake genesis param to config.yml
bryanchriswhite Oct 2, 2024
000c330
chore: add min_stake defaults and validation
bryanchriswhite Oct 2, 2024
5e72e47
chore: add min_stake case to MsgUpdateParam handler
bryanchriswhite Oct 2, 2024
c5ede9d
chore: update MsgUpdateParams, MsgUpdateParam, & Params unit tests
bryanchriswhite Oct 2, 2024
698712b
chore: add make targets and JSON files
bryanchriswhite Oct 2, 2024
b94cd63
fix: unit tests
bryanchriswhite Oct 2, 2024
fcc18c6
chore: return gRPC status errors from msgServer methods
bryanchriswhite Oct 2, 2024
6c18b75
fix: genesis test
bryanchriswhite Oct 2, 2024
4e259c9
chore: apply improvements
bryanchriswhite Oct 2, 2024
2808925
chore: add godoc style comment to min_stake params field
bryanchriswhite Oct 2, 2024
197af04
chore: add godoc style comment to min_stake params field
bryanchriswhite Oct 2, 2024
2a33127
chore: improvements:
bryanchriswhite Oct 4, 2024
3280142
chore: improve logging & ensure gRPC status error returns
bryanchriswhite Oct 4, 2024
98d1c96
chore: improve logging & ensure gRPC status error returns
bryanchriswhite Oct 4, 2024
955b28f
chore: improve logging, validate params in MsgUpdateParam handler, & …
bryanchriswhite Oct 4, 2024
c256eae
chore: review feedback improvements
bryanchriswhite Oct 4, 2024
0d36e0f
Merge remote-tracking branch 'pokt/main' into issues/612/param/min-st…
bryanchriswhite Oct 4, 2024
00914b0
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Oct 4, 2024
f3fa183
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 4, 2024
f4b8284
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Oct 4, 2024
12d1b43
Merge branch 'issues/612/application/min-stake-param' into issues/612…
bryanchriswhite Oct 4, 2024
30b48f4
test: simplify coin equality assertions
bryanchriswhite Oct 4, 2024
b3a3236
Merge branch 'issues/612/application/staking' into issues/612/applica…
bryanchriswhite Oct 4, 2024
1c309b8
Empty commit
bryanchriswhite Oct 4, 2024
e7ff959
Merge branch 'issues/612/param/min-stake-gateway' into issues/612/gat…
bryanchriswhite Oct 4, 2024
1257f6e
Merge branch 'main' into issues/612/gateway/logic
bryanchriswhite Oct 4, 2024
b972e3b
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 4, 2024
0f4a82d
chore: add review feedback TODOs
bryanchriswhite Oct 4, 2024
44257f3
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Oct 4, 2024
561a1aa
Merge branch 'issues/612/application/min-stake-param' into issues/612…
bryanchriswhite Oct 4, 2024
f176fe4
Merge branch 'issues/612/application/staking' into issues/612/applica…
bryanchriswhite Oct 4, 2024
ef4e0ad
chore: reconcile PreGeneratedAccountIterator#MustNext()
bryanchriswhite Oct 4, 2024
4d2c2d9
chore: review feedback improvements
bryanchriswhite Oct 4, 2024
5ba2a48
fix: typo
bryanchriswhite Oct 4, 2024
aef3773
chore: ensure gRPC status error returns from supplier stake handler
bryanchriswhite Oct 4, 2024
fff062b
chore: review improvements
bryanchriswhite Oct 4, 2024
3e4ef9e
fix: linter errors
bryanchriswhite Oct 4, 2024
8c7eadf
Empty commit
bryanchriswhite Oct 4, 2024
a28ff88
Empty commit
bryanchriswhite Oct 4, 2024
cd5e420
chore: review feedback improvements
bryanchriswhite Oct 4, 2024
cc95ebf
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 4, 2024
1c38372
fix: failing test
bryanchriswhite Oct 4, 2024
65158ad
Merge branch 'main' into issues/612/gateway/logic
bryanchriswhite Oct 4, 2024
70f8985
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 4, 2024
3774d66
feat: enforce supplier min stake when staking
bryanchriswhite Oct 4, 2024
4c46084
fix: unit tests
bryanchriswhite Oct 4, 2024
698991a
Empty commit
bryanchriswhite Oct 4, 2024
6c689e8
Merge branch 'issues/612/gateway/logic' into issues/612/app/msg-updat…
bryanchriswhite Oct 4, 2024
c2bf664
Merge branch 'main' into issues/612/app/msg-update-param
bryanchriswhite Oct 4, 2024
0d63e07
fix: linter error
bryanchriswhite Oct 4, 2024
7753572
Merge branch 'issues/612/app/msg-update-param' into issues/612/applic…
bryanchriswhite Oct 4, 2024
5556f4a
Merge remote-tracking branch 'pokt/main' into issues/612/application/…
bryanchriswhite Oct 4, 2024
1faf4ab
chore: regenerate protobufs
bryanchriswhite Oct 4, 2024
48ba5dd
Merge branch 'issues/612/application/min-stake-param' into issues/612…
bryanchriswhite Oct 4, 2024
d91dde7
Merge branch 'main' into issues/612/application/staking
bryanchriswhite Oct 4, 2024
032b849
test: add TestMsgServer_StakeSupplier_FailBelowMinStake
bryanchriswhite Oct 4, 2024
ce8b68c
chore: add gRPC status error
bryanchriswhite Oct 7, 2024
e06dca2
fix: failing unit tests
bryanchriswhite Oct 7, 2024
7bf55d6
Empty commit
bryanchriswhite Oct 7, 2024
5e5d8a4
Merge branch 'issues/612/application/staking' into issues/612/applica…
bryanchriswhite Oct 7, 2024
e119e97
Merge branch 'issues/612/application/burning' into issues/612/supplie…
bryanchriswhite Oct 7, 2024
d99bac2
Merge branch 'issues/612/supplier/msg-update-param' into issues/612/s…
bryanchriswhite Oct 7, 2024
1d87fe3
Merge branch 'issues/612/supplier/min-stake' into issues/612/supplier…
bryanchriswhite Oct 7, 2024
7e9bd33
Empty commit
bryanchriswhite Oct 7, 2024
69c2755
Empty commit
bryanchriswhite Oct 9, 2024
1f7e201
Merge branch 'main' into issues/612/application/staking
bryanchriswhite Oct 9, 2024
0fa9ab8
Merge remote-tracking branch 'pokt/issues/612/application/staking' in…
bryanchriswhite Oct 10, 2024
d91671e
Merge remote-tracking branch 'pokt/main' into issues/612/application/…
bryanchriswhite Oct 10, 2024
c89ee93
chore: quick fixes
bryanchriswhite Oct 10, 2024
ed0d795
fix: linter error
bryanchriswhite Oct 10, 2024
0be55c6
Empty commit
bryanchriswhite Oct 10, 2024
14a5c79
chore: review feedback improvements
bryanchriswhite Oct 11, 2024
735ca2a
test: fix application min stake integration test
bryanchriswhite Oct 11, 2024
1c25798
chore: review feedback improvements
bryanchriswhite Oct 11, 2024
d2dfbd2
chore: regenerate protobufs
bryanchriswhite Oct 11, 2024
48df935
chore: review feedback improvements
bryanchriswhite Oct 11, 2024
b220177
Empty commit
bryanchriswhite Oct 11, 2024
530ce2a
Merge branch 'issues/612/application/burning' into issues/612/supplie…
bryanchriswhite Oct 11, 2024
788d506
Merge remote-tracking branch 'pokt/main' into issues/612/supplier/msg…
bryanchriswhite Oct 11, 2024
071149b
fix: flaky test
bryanchriswhite Oct 14, 2024
13b655a
Merge branch 'issues/612/supplier/msg-update-param' into issues/612/s…
bryanchriswhite Oct 14, 2024
f557714
Merge branch 'issues/612/supplier/min-stake' into issues/612/supplier…
bryanchriswhite Oct 14, 2024
395126d
fix: linter error
bryanchriswhite Oct 14, 2024
ea028cb
Merge branch 'issues/612/supplier/msg-update-param' into issues/612/s…
bryanchriswhite Oct 14, 2024
8395029
Merge branch 'issues/612/supplier/min-stake' into issues/612/supplier…
bryanchriswhite Oct 14, 2024
f18e347
test: supplier up-staking from below min. stake
bryanchriswhite Oct 14, 2024
b166d0d
Merge remote-tracking branch 'pokt/HEAD' into issues/612/supplier/min…
bryanchriswhite Oct 14, 2024
413a084
Merge branch 'issues/612/supplier/min-stake' into issues/612/supplier…
bryanchriswhite Oct 14, 2024
67f28f6
Merge remote-tracking branch 'pokt/main' into issues/612/supplier/sta…
bryanchriswhite Oct 14, 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
16 changes: 14 additions & 2 deletions x/supplier/keeper/msg_server_stake_supplier.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,21 +96,33 @@ func (k msgServer) StakeSupplier(ctx context.Context, msg *types.MsgStakeSupplie
}
coinsToEscrow, err = (*msg.Stake).SafeSub(currSupplierStake)
if err != nil {
return nil, err
logger.Info(fmt.Sprintf("ERROR: %s", err))
return nil, status.Error(codes.Internal, err.Error())
}
logger.Info(fmt.Sprintf("Supplier is going to escrow an additional %+v coins", coinsToEscrow))

// If the supplier has initiated an unstake action, cancel it since they are staking again.
supplier.UnstakeSessionEndHeight = sharedtypes.SupplierNotUnstaking
}

// Must always stake or upstake (> 0 delta)
// MUST ALWAYS stake or upstake (> 0 delta)
if coinsToEscrow.IsZero() {
err = types.ErrSupplierInvalidStake.Wrapf("Signer %q must escrow more than 0 additional coins", msg.Signer)
logger.Info(fmt.Sprintf("WARN: %s", err))
return nil, status.Error(codes.InvalidArgument, err.Error())
}

// MUST ALWAYS have at least minimum stake.
minStake := k.GetParams(ctx).MinStake
if msg.Stake.Amount.LT(minStake.Amount) {
err = types.ErrSupplierInvalidStake.Wrapf(
"supplier with owner %q must stake at least %s",
msg.GetOwnerAddress(), minStake,
)
logger.Info(fmt.Sprintf("ERROR: %s", err))
return nil, status.Error(codes.InvalidArgument, err.Error())
}

// Retrieve the account address of the message signer
msgSignerAddress, err := sdk.AccAddressFromBech32(msg.Signer)
if err != nil {
Expand Down
118 changes: 92 additions & 26 deletions x/supplier/keeper/msg_server_stake_supplier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ import (
"testing"

"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
cosmostypes "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"

"github.com/pokt-network/poktroll/app/volatile"
keepertest "github.com/pokt-network/poktroll/testutil/keeper"
"github.com/pokt-network/poktroll/testutil/sample"
sharedtypes "github.com/pokt-network/poktroll/x/shared/types"
"github.com/pokt-network/poktroll/x/supplier/keeper"
"github.com/pokt-network/poktroll/x/supplier/types"
suppliertypes "github.com/pokt-network/poktroll/x/supplier/types"
)

func TestMsgServer_StakeSupplier_SuccessfulCreateAndUpdate(t *testing.T) {
Expand All @@ -28,7 +30,7 @@ func TestMsgServer_StakeSupplier_SuccessfulCreateAndUpdate(t *testing.T) {
require.False(t, isSupplierFound)

// Prepare the stakeMsg
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "svcId")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "svcId")

// Stake the supplier
_, err := srv.StakeSupplier(ctx, stakeMsg)
Expand All @@ -38,14 +40,14 @@ func TestMsgServer_StakeSupplier_SuccessfulCreateAndUpdate(t *testing.T) {
foundSupplier, isSupplierFound := supplierModuleKeepers.GetSupplier(ctx, operatorAddr)
require.True(t, isSupplierFound)
require.Equal(t, operatorAddr, foundSupplier.OperatorAddress)
require.Equal(t, int64(100), foundSupplier.Stake.Amount.Int64())
require.Equal(t, int64(1000000), foundSupplier.Stake.Amount.Int64())
require.Len(t, foundSupplier.Services, 1)
require.Equal(t, "svcId", foundSupplier.Services[0].ServiceId)
require.Len(t, foundSupplier.Services[0].Endpoints, 1)
require.Equal(t, "http://localhost:8080", foundSupplier.Services[0].Endpoints[0].Url)

// Prepare an updated supplier with a higher stake and a different URL for the service
updateMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 200, "svcId2")
updateMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 2000000, "svcId2")
updateMsg.Services[0].Endpoints[0].Url = "http://localhost:8082"

// Update the staked supplier
Expand All @@ -54,7 +56,7 @@ func TestMsgServer_StakeSupplier_SuccessfulCreateAndUpdate(t *testing.T) {

foundSupplier, isSupplierFound = supplierModuleKeepers.GetSupplier(ctx, operatorAddr)
require.True(t, isSupplierFound)
require.Equal(t, int64(200), foundSupplier.Stake.Amount.Int64())
require.Equal(t, int64(2000000), foundSupplier.Stake.Amount.Int64())
require.Len(t, foundSupplier.Services, 1)
require.Equal(t, "svcId2", foundSupplier.Services[0].ServiceId)
require.Len(t, foundSupplier.Services[0].Endpoints, 1)
Expand All @@ -70,7 +72,7 @@ func TestMsgServer_StakeSupplier_FailRestakingDueToInvalidServices(t *testing.T)
operatorAddr := sample.AccAddress()

// Prepare the supplier stake message
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "svcId")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "svcId")

// Stake the supplier
_, err := srv.StakeSupplier(ctx, stakeMsg)
Expand Down Expand Up @@ -120,7 +122,7 @@ func TestMsgServer_StakeSupplier_FailLoweringStake(t *testing.T) {
operatorAddr := sample.AccAddress()

// Prepare the supplier stake message
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "svcId")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "svcId")

// Stake the supplier & verify that the supplier exists
_, err := srv.StakeSupplier(ctx, stakeMsg)
Expand All @@ -140,7 +142,7 @@ func TestMsgServer_StakeSupplier_FailLoweringStake(t *testing.T) {
// Verify that the supplier stake is unchanged
supplierFound, isSupplierFound := supplierModuleKeepers.GetSupplier(ctx, operatorAddr)
require.True(t, isSupplierFound)
require.Equal(t, int64(100), supplierFound.Stake.Amount.Int64())
require.Equal(t, int64(1000000), supplierFound.Stake.Amount.Int64())
require.Len(t, supplierFound.Services, 1)
}

Expand All @@ -153,11 +155,12 @@ func TestMsgServer_StakeSupplier_FailWithNonExistingService(t *testing.T) {
operatorAddr := sample.AccAddress()

// Prepare the supplier stake message with a non-existing service ID
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "newService")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "newService")

// Stake the supplier & verify that it fails because the service does not exist.
_, err := srv.StakeSupplier(ctx, stakeMsg)
require.ErrorContains(t, err, types.ErrSupplierServiceNotFound.Wrapf(
require.Equal(t, codes.InvalidArgument, status.Code(err))
require.ErrorContains(t, err, suppliertypes.ErrSupplierServiceNotFound.Wrapf(
"service %q does not exist", "newService",
).Error())
}
Expand All @@ -171,7 +174,7 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {
operatorAddr := sample.AccAddress()

// Stake using the operator address as the signer and verify that it succeeds.
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "svcId")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "svcId")
setStakeMsgSigner(stakeMsg, operatorAddr)
_, err := srv.StakeSupplier(ctx, stakeMsg)
require.NoError(t, err)
Expand All @@ -181,7 +184,7 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {
require.Equal(t, ownerAddr, supplier.OwnerAddress)

// Update the supplier using the operator address as the signer and verify that it succeeds.
stakeMsgUpdateUrl := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 200, "svcId")
stakeMsgUpdateUrl := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 2000000, "svcId")
operatorUpdatedServiceUrl := "http://localhost:8081"
stakeMsgUpdateUrl.Services[0].Endpoints[0].Url = operatorUpdatedServiceUrl
setStakeMsgSigner(stakeMsgUpdateUrl, operatorAddr)
Expand All @@ -196,7 +199,7 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {
// Update the supplier URL by using the owner address as the singer and verify that it succeeds.
ownerUpdaterServiceUrl := "http://localhost:8082"
stakeMsgUpdateUrl.Services[0].Endpoints[0].Url = ownerUpdaterServiceUrl
stakeMsgUpdateUrl.Stake.Amount = math.NewInt(300)
stakeMsgUpdateUrl.Stake.Amount = math.NewInt(3000000)
setStakeMsgSigner(stakeMsgUpdateUrl, ownerAddr)
_, err = srv.StakeSupplier(ctx, stakeMsgUpdateUrl)
require.NoError(t, err)
Expand All @@ -209,7 +212,7 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {

// Try updating the supplier's operator address using the old operator as a signer
// will create a new supplier.
stakeMsgUpdateOperator := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 300, "svcId")
stakeMsgUpdateOperator := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 3000000, "svcId")
newOperatorAddress := sample.AccAddress()
stakeMsgUpdateOperator.OperatorAddress = newOperatorAddress
setStakeMsgSigner(stakeMsgUpdateOperator, operatorAddr)
Expand All @@ -229,7 +232,7 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {
// will create a new supplier.
newOperatorAddress = sample.AccAddress()
stakeMsgUpdateOperator.OperatorAddress = newOperatorAddress
stakeMsgUpdateOperator.Stake.Amount = math.NewInt(400)
stakeMsgUpdateOperator.Stake.Amount = math.NewInt(4000000)
setStakeMsgSigner(stakeMsgUpdateOperator, ownerAddr)
_, err = srv.StakeSupplier(ctx, stakeMsgUpdateOperator)
require.NoError(t, err)
Expand All @@ -246,10 +249,11 @@ func TestMsgServer_StakeSupplier_OperatorAuthorizations(t *testing.T) {
// Try updating the supplier's owner address using the operator as a signer
// and verify that it fails.
newOwnerAddress := sample.AccAddress()
stakeMsgUpdateOwner := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 500, "svcId")
stakeMsgUpdateOwner := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 5000000, "svcId")
stakeMsgUpdateOwner.OwnerAddress = newOwnerAddress
setStakeMsgSigner(stakeMsgUpdateOwner, operatorAddr)
_, err = srv.StakeSupplier(ctx, stakeMsgUpdateOwner)
require.Equal(t, codes.InvalidArgument, status.Code(err))
require.ErrorContains(t, err, sharedtypes.ErrSharedUnauthorizedSupplierUpdate.Wrapf(
"signer %q is not allowed to update the owner address %q",
operatorAddr, ownerAddr,
Expand All @@ -275,13 +279,13 @@ func TestMsgServer_StakeSupplier_ActiveSupplier(t *testing.T) {
operatorAddr := sample.AccAddress()

// Prepare the supplier
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 100, "svcId")
stakeMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 1000000, "svcId")

// Stake the supplier & verify that the supplier exists.
_, err := srv.StakeSupplier(ctx, stakeMsg)
require.NoError(t, err)

sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx := cosmostypes.UnwrapSDKContext(ctx)
currentHeight := sdkCtx.BlockHeight()
sessionEndHeight := supplierModuleKeepers.SharedKeeper.GetSessionEndHeight(ctx, currentHeight)

Expand All @@ -304,7 +308,7 @@ func TestMsgServer_StakeSupplier_ActiveSupplier(t *testing.T) {
ctx = keepertest.SetBlockHeight(ctx, sessionEndHeight+1)

// Prepare the supplier stake message with a different service
updateMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 200, "svcId", "svcId2")
updateMsg := stakeSupplierForServicesMsg(ownerAddr, operatorAddr, 2000000, "svcId", "svcId2")
updateMsg.Signer = operatorAddr

// Update the staked supplier
Expand Down Expand Up @@ -339,7 +343,7 @@ func stakeSupplierForServicesMsg(
ownerAddr, operatorAddr string,
amount int64,
serviceIds ...string,
) *types.MsgStakeSupplier {
) *suppliertypes.MsgStakeSupplier {
services := make([]*sharedtypes.SupplierServiceConfig, 0, len(serviceIds))
for _, serviceId := range serviceIds {
services = append(services, &sharedtypes.SupplierServiceConfig{
Expand All @@ -348,7 +352,7 @@ func stakeSupplierForServicesMsg(
{
Url: "http://localhost:8080",
RpcType: sharedtypes.RPCType_JSON_RPC,
Configs: make([]*sharedtypes.ConfigOption, 0),
Configs: nil,
},
},
RevShare: []*sharedtypes.ServiceRevenueShare{
Expand All @@ -360,20 +364,82 @@ func stakeSupplierForServicesMsg(
})
}

return &types.MsgStakeSupplier{
return &suppliertypes.MsgStakeSupplier{
Signer: ownerAddr,
OwnerAddress: ownerAddr,
OperatorAddress: operatorAddr,
Stake: &sdk.Coin{Denom: volatile.DenomuPOKT, Amount: math.NewInt(amount)},
Stake: &cosmostypes.Coin{Denom: volatile.DenomuPOKT, Amount: math.NewInt(amount)},
Services: services,
}
}

// setStakeMsgSigner sets the signer of the given MsgStakeSupplier to the given address
func setStakeMsgSigner(
msg *types.MsgStakeSupplier,
msg *suppliertypes.MsgStakeSupplier,
signer string,
) *types.MsgStakeSupplier {
) *suppliertypes.MsgStakeSupplier {
msg.Signer = signer
return msg
}

func TestMsgServer_StakeSupplier_FailBelowMinStake(t *testing.T) {
k, ctx := keepertest.SupplierKeeper(t)
srv := keeper.NewMsgServerImpl(*k.Keeper)

addr := sample.AccAddress()
supplierStake := cosmostypes.NewInt64Coin(volatile.DenomuPOKT, 100)
minStake := supplierStake.AddAmount(math.NewInt(1))
expectedErr := suppliertypes.ErrSupplierInvalidStake.Wrapf("supplier with owner %q must stake at least %s", addr, minStake)

// Set the minimum stake to be greater than the supplier stake.
params := k.Keeper.GetParams(ctx)
params.MinStake = &minStake
err := k.SetParams(ctx, params)
require.NoError(t, err)

// Prepare the supplier stake message.
stakeMsg := stakeSupplierForServicesMsg(addr, addr, 100, "svcId")

// Attempt to stake the supplier & verify that the supplier does NOT exist.
_, err = srv.StakeSupplier(ctx, stakeMsg)
require.ErrorContains(t, err, expectedErr.Error())
_, isSupplierFound := k.GetSupplier(ctx, addr)
require.False(t, isSupplierFound)
}

func TestMsgServer_StakeSupplier_UpStakeFromBelowMinStake(t *testing.T) {
k, ctx := keepertest.SupplierKeeper(t)
srv := keeper.NewMsgServerImpl(*k.Keeper)

addr := sample.AccAddress()
supplierParams := k.Keeper.GetParams(ctx)
minStake := supplierParams.GetMinStake()
belowMinStake := minStake.AddAmount(math.NewInt(-1))
aboveMinStake := minStake.AddAmount(math.NewInt(1))

stakeMsg := stakeSupplierForServicesMsg(addr, addr, aboveMinStake.Amount.Int64(), "svcId")

// Stake (via keeper methods) a supplier with stake below min. stake.
initialSupplier := sharedtypes.Supplier{
OwnerAddress: addr,
OperatorAddress: addr,
Stake: &belowMinStake,
Services: stakeMsg.GetServices(),
ServicesActivationHeightsMap: map[string]uint64{
"svcId": 0,
},
}

k.SetSupplier(ctx, initialSupplier)

// Attempt to upstake the supplier with stake above min. stake.
_, err := srv.StakeSupplier(ctx, stakeMsg)
require.NoError(t, err)

// Assert supplier is staked for above min. stake.
expectedSupplier := initialSupplier
expectedSupplier.Stake = &aboveMinStake
supplier, isSupplierFound := k.GetSupplier(ctx, addr)
require.True(t, isSupplierFound)
require.EqualValues(t, expectedSupplier, supplier)
}
Loading
Loading