Skip to content

Commit aa764bb

Browse files
abi87StephenButtolphdhrubabasu
authored
Drop Pending Stakers 5 - validated PostDurango StakerTxs (#2314)
Co-authored-by: Stephen Buttolph <stephen@avalabs.org> Co-authored-by: dhrubabasu <7675102+dhrubabasu@users.noreply.github.com>
1 parent 4430550 commit aa764bb

23 files changed

+392
-268
lines changed

tests/e2e/p/interchain_workflow.go

+3-14
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,9 @@ var _ = e2e.DescribePChain("[Interchain Workflow]", ginkgo.Label(e2e.UsesCChainL
9595
nodeID, nodePOP, err := infoClient.GetNodeID(e2e.DefaultContext())
9696
require.NoError(err)
9797

98+
// Adding a validator should not break interchain transfer.
99+
endTime := time.Now().Add(30 * time.Second)
98100
ginkgo.By("adding the new node as a validator", func() {
99-
startTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
100-
// Validation duration doesn't actually matter to this
101-
// test - it is only ensuring that adding a validator
102-
// doesn't break interchain transfer.
103-
endTime := startTime.Add(30 * time.Second)
104-
105101
rewardKey, err := secp256k1.NewPrivateKey()
106102
require.NoError(err)
107103

@@ -114,7 +110,6 @@ var _ = e2e.DescribePChain("[Interchain Workflow]", ginkgo.Label(e2e.UsesCChainL
114110
&txs.SubnetValidator{
115111
Validator: txs.Validator{
116112
NodeID: nodeID,
117-
Start: uint64(startTime.Unix()),
118113
End: uint64(endTime.Unix()),
119114
Wght: weight,
120115
},
@@ -136,21 +131,15 @@ var _ = e2e.DescribePChain("[Interchain Workflow]", ginkgo.Label(e2e.UsesCChainL
136131
require.NoError(err)
137132
})
138133

134+
// Adding a delegator should not break interchain transfer.
139135
ginkgo.By("adding a delegator to the new node", func() {
140-
startTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
141-
// Delegation duration doesn't actually matter to this
142-
// test - it is only ensuring that adding a delegator
143-
// doesn't break interchain transfer.
144-
endTime := startTime.Add(15 * time.Second)
145-
146136
rewardKey, err := secp256k1.NewPrivateKey()
147137
require.NoError(err)
148138

149139
_, err = pWallet.IssueAddPermissionlessDelegatorTx(
150140
&txs.SubnetValidator{
151141
Validator: txs.Validator{
152142
NodeID: nodeID,
153-
Start: uint64(startTime.Unix()),
154143
End: uint64(endTime.Unix()),
155144
Wght: weight,
156145
},

tests/e2e/p/permissionless_subnets.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,13 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
134134
require.NoError(err)
135135
})
136136

137-
validatorStartTime := time.Now().Add(time.Minute)
137+
endTime := time.Now().Add(time.Minute)
138138
ginkgo.By("add permissionless validator", func() {
139139
_, err := pWallet.IssueAddPermissionlessValidatorTx(
140140
&txs.SubnetValidator{
141141
Validator: txs.Validator{
142142
NodeID: validatorID,
143-
Start: uint64(validatorStartTime.Unix()),
144-
End: uint64(validatorStartTime.Add(5 * time.Second).Unix()),
143+
End: uint64(endTime.Unix()),
145144
Wght: 25 * units.MegaAvax,
146145
},
147146
Subnet: subnetID,
@@ -156,14 +155,12 @@ var _ = e2e.DescribePChain("[Permissionless Subnets]", func() {
156155
require.NoError(err)
157156
})
158157

159-
delegatorStartTime := validatorStartTime
160158
ginkgo.By("add permissionless delegator", func() {
161159
_, err := pWallet.IssueAddPermissionlessDelegatorTx(
162160
&txs.SubnetValidator{
163161
Validator: txs.Validator{
164162
NodeID: validatorID,
165-
Start: uint64(delegatorStartTime.Unix()),
166-
End: uint64(delegatorStartTime.Add(5 * time.Second).Unix()),
163+
End: uint64(endTime.Unix()),
167164
Wght: 25 * units.MegaAvax,
168165
},
169166
Subnet: subnetID,

tests/e2e/p/staking_rewards.go

+39-34
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import (
3131
)
3232

3333
const (
34-
delegationPeriod = 15 * time.Second
35-
validationPeriod = 30 * time.Second
34+
targetDelegationPeriod = 15 * time.Second
35+
targetValidationPeriod = 30 * time.Second
3636
)
3737

3838
var _ = ginkgo.Describe("[Staking Rewards]", func() {
@@ -58,6 +58,16 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
5858
ginkgo.By("waiting until beta node is healthy")
5959
e2e.WaitForHealthy(betaNode)
6060

61+
ginkgo.By("retrieving alpha node id and pop")
62+
alphaInfoClient := info.NewClient(alphaNode.URI)
63+
alphaNodeID, alphaPOP, err := alphaInfoClient.GetNodeID(e2e.DefaultContext())
64+
require.NoError(err)
65+
66+
ginkgo.By("retrieving beta node id and pop")
67+
betaInfoClient := info.NewClient(betaNode.URI)
68+
betaNodeID, betaPOP, err := betaInfoClient.GetNodeID(e2e.DefaultContext())
69+
require.NoError(err)
70+
6171
ginkgo.By("generating reward keys")
6272

6373
alphaValidationRewardKey, err := secp256k1.NewPrivateKey()
@@ -89,43 +99,34 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
8999
keychain := secp256k1fx.NewKeychain(rewardKeys...)
90100
fundedKey := e2e.Env.AllocatePreFundedKey()
91101
keychain.Add(fundedKey)
92-
nodeURI := e2e.Env.GetRandomNodeURI()
102+
nodeURI := tmpnet.NodeURI{
103+
NodeID: alphaNodeID,
104+
URI: alphaNode.URI,
105+
}
93106
baseWallet := e2e.NewWallet(keychain, nodeURI)
94107
pWallet := baseWallet.P()
95108

96-
ginkgo.By("retrieving alpha node id and pop")
97-
alphaInfoClient := info.NewClient(alphaNode.URI)
98-
alphaNodeID, alphaPOP, err := alphaInfoClient.GetNodeID(e2e.DefaultContext())
99-
require.NoError(err)
100-
101-
ginkgo.By("retrieving beta node id and pop")
102-
betaInfoClient := info.NewClient(betaNode.URI)
103-
betaNodeID, betaPOP, err := betaInfoClient.GetNodeID(e2e.DefaultContext())
104-
require.NoError(err)
105-
106-
pvmClient := platformvm.NewClient(alphaNode.URI)
107-
108109
const (
109110
delegationPercent = 0.10 // 10%
110111
delegationShare = reward.PercentDenominator * delegationPercent
111112
weight = 2_000 * units.Avax
112113
)
113114

115+
pvmClient := platformvm.NewClient(alphaNode.URI)
116+
114117
ginkgo.By("retrieving supply before inserting validators")
115118
supplyAtValidatorsStart, _, err := pvmClient.GetCurrentSupply(e2e.DefaultContext(), constants.PrimaryNetworkID)
116119
require.NoError(err)
117120

118-
alphaValidatorStartTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
119-
alphaValidatorEndTime := alphaValidatorStartTime.Add(validationPeriod)
120-
tests.Outf("alpha node validation period starting at: %v\n", alphaValidatorStartTime)
121+
alphaValidatorsEndTime := time.Now().Add(targetValidationPeriod)
122+
tests.Outf("alpha node validation period ending at: %v\n", alphaValidatorsEndTime)
121123

122124
ginkgo.By("adding alpha node as a validator", func() {
123125
_, err := pWallet.IssueAddPermissionlessValidatorTx(
124126
&txs.SubnetValidator{
125127
Validator: txs.Validator{
126128
NodeID: alphaNodeID,
127-
Start: uint64(alphaValidatorStartTime.Unix()),
128-
End: uint64(alphaValidatorEndTime.Unix()),
129+
End: uint64(alphaValidatorsEndTime.Unix()),
129130
Wght: weight,
130131
},
131132
Subnet: constants.PrimaryNetworkID,
@@ -146,16 +147,14 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
146147
require.NoError(err)
147148
})
148149

149-
betaValidatorStartTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
150-
betaValidatorEndTime := betaValidatorStartTime.Add(validationPeriod)
151-
tests.Outf("beta node validation period starting at: %v\n", betaValidatorStartTime)
150+
betaValidatorEndTime := time.Now().Add(targetValidationPeriod)
151+
tests.Outf("beta node validation period ending at: %v\n", betaValidatorEndTime)
152152

153153
ginkgo.By("adding beta node as a validator", func() {
154154
_, err := pWallet.IssueAddPermissionlessValidatorTx(
155155
&txs.SubnetValidator{
156156
Validator: txs.Validator{
157157
NodeID: betaNodeID,
158-
Start: uint64(betaValidatorStartTime.Unix()),
159158
End: uint64(betaValidatorEndTime.Unix()),
160159
Wght: weight,
161160
},
@@ -181,16 +180,15 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
181180
supplyAtDelegatorsStart, _, err := pvmClient.GetCurrentSupply(e2e.DefaultContext(), constants.PrimaryNetworkID)
182181
require.NoError(err)
183182

184-
gammaDelegatorStartTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
185-
tests.Outf("gamma delegation period starting at: %v\n", gammaDelegatorStartTime)
183+
gammaDelegatorEndTime := time.Now().Add(targetDelegationPeriod)
184+
tests.Outf("gamma delegation period ending at: %v\n", gammaDelegatorEndTime)
186185

187186
ginkgo.By("adding gamma as delegator to the alpha node", func() {
188187
_, err := pWallet.IssueAddPermissionlessDelegatorTx(
189188
&txs.SubnetValidator{
190189
Validator: txs.Validator{
191190
NodeID: alphaNodeID,
192-
Start: uint64(gammaDelegatorStartTime.Unix()),
193-
End: uint64(gammaDelegatorStartTime.Add(delegationPeriod).Unix()),
191+
End: uint64(gammaDelegatorEndTime.Unix()),
194192
Wght: weight,
195193
},
196194
Subnet: constants.PrimaryNetworkID,
@@ -205,16 +203,15 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
205203
require.NoError(err)
206204
})
207205

208-
deltaDelegatorStartTime := time.Now().Add(e2e.DefaultValidatorStartTimeDiff)
209-
tests.Outf("delta delegation period starting at: %v\n", deltaDelegatorStartTime)
206+
deltaDelegatorEndTime := time.Now().Add(targetDelegationPeriod)
207+
tests.Outf("delta delegation period ending at: %v\n", deltaDelegatorEndTime)
210208

211209
ginkgo.By("adding delta as delegator to the beta node", func() {
212210
_, err := pWallet.IssueAddPermissionlessDelegatorTx(
213211
&txs.SubnetValidator{
214212
Validator: txs.Validator{
215213
NodeID: betaNodeID,
216-
Start: uint64(deltaDelegatorStartTime.Unix()),
217-
End: uint64(deltaDelegatorStartTime.Add(delegationPeriod).Unix()),
214+
End: uint64(deltaDelegatorEndTime.Unix()),
218215
Wght: weight,
219216
},
220217
Subnet: constants.PrimaryNetworkID,
@@ -232,6 +229,14 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
232229
ginkgo.By("stopping beta node to prevent it and its delegator from receiving a validation reward")
233230
require.NoError(betaNode.Stop())
234231

232+
ginkgo.By("retrieving staking periods from the chain")
233+
data, err := pvmClient.GetCurrentValidators(e2e.DefaultContext(), constants.PlatformChainID, []ids.NodeID{alphaNodeID})
234+
require.NoError(err)
235+
require.Len(data, 1)
236+
actualAlphaValidationPeriod := time.Duration(data[0].EndTime-data[0].StartTime) * time.Second
237+
delegatorData := data[0].Delegators[0]
238+
actualGammaDelegationPeriod := time.Duration(delegatorData.EndTime-delegatorData.StartTime) * time.Second
239+
235240
ginkgo.By("waiting until all validation periods are over")
236241
// The beta validator was the last added and so has the latest end time. The
237242
// delegation periods are shorter than the validation periods.
@@ -279,8 +284,8 @@ var _ = ginkgo.Describe("[Staking Rewards]", func() {
279284

280285
ginkgo.By("determining expected validation and delegation rewards")
281286
calculator := reward.NewCalculator(rewardConfig)
282-
expectedValidationReward := calculator.Calculate(validationPeriod, weight, supplyAtValidatorsStart)
283-
potentialDelegationReward := calculator.Calculate(delegationPeriod, weight, supplyAtDelegatorsStart)
287+
expectedValidationReward := calculator.Calculate(actualAlphaValidationPeriod, weight, supplyAtValidatorsStart)
288+
potentialDelegationReward := calculator.Calculate(actualGammaDelegationPeriod, weight, supplyAtDelegatorsStart)
284289
expectedDelegationFee, expectedDelegatorReward := reward.Split(potentialDelegationReward, delegationShare)
285290

286291
ginkgo.By("checking expected rewards against actual rewards")

tests/e2e/p/workflow.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
6868
require.NoError(err)
6969
require.GreaterOrEqual(pBalance, minBalance)
7070
})
71-
// create validator data
72-
validatorStartTimeDiff := 30 * time.Second
73-
vdrStartTime := time.Now().Add(validatorStartTimeDiff)
7471

7572
// Use a random node ID to ensure that repeated test runs
7673
// will succeed against a network that persists across runs.
@@ -79,8 +76,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
7976

8077
vdr := &txs.Validator{
8178
NodeID: validatorID,
82-
Start: uint64(vdrStartTime.Unix()),
83-
End: uint64(vdrStartTime.Add(72 * time.Hour).Unix()),
79+
End: uint64(time.Now().Add(72 * time.Hour).Unix()),
8480
Wght: minValStake,
8581
}
8682
rewardOwner := &secp256k1fx.OutputOwners{

tests/fixture/e2e/helpers.go

-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/ava-labs/avalanchego/ids"
2424
"github.com/ava-labs/avalanchego/tests"
2525
"github.com/ava-labs/avalanchego/tests/fixture/tmpnet"
26-
"github.com/ava-labs/avalanchego/vms/platformvm/txs/executor"
2726
"github.com/ava-labs/avalanchego/vms/secp256k1fx"
2827
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
2928
"github.com/ava-labs/avalanchego/wallet/subnet/primary/common"
@@ -44,11 +43,6 @@ const (
4443
// development.
4544
SkipBootstrapChecksEnvName = "E2E_SKIP_BOOTSTRAP_CHECKS"
4645

47-
// Validator start time must be a minimum of SyncBound from the
48-
// current time for validator addition to succeed, and adding 20
49-
// seconds provides a buffer in case of any delay in processing.
50-
DefaultValidatorStartTimeDiff = executor.SyncBound + 20*time.Second
51-
5246
DefaultGasLimit = uint64(21000) // Standard gas limit
5347

5448
// An empty string prompts the use of the default path which ensures a

0 commit comments

Comments
 (0)