Skip to content

Commit

Permalink
feat: more edge case tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gpsanant committed Oct 29, 2024
1 parent 49e2291 commit 2bc5ee4
Showing 1 changed file with 131 additions and 4 deletions.
135 changes: 131 additions & 4 deletions internal/eigenState/stakerShares/stakerShares_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,7 @@ func Test_StakerSharesState(t *testing.T) {
query := `
select * from staker_shares
where block_number = ?
order by staker asc
`
results := []*StakerShares{}
res := model.DB.Raw(query, blockNumber).Scan(&results)
Expand Down Expand Up @@ -795,6 +796,7 @@ func Test_StakerSharesState(t *testing.T) {
query := `
select * from staker_shares
where block_number = ?
order by staker asc
`
results := []*StakerShares{}
res := model.DB.Raw(query, blockNumber).Scan(&results)
Expand Down Expand Up @@ -1119,19 +1121,144 @@ func Test_StakerSharesState(t *testing.T) {
query := `
select * from staker_shares
where block_number = ?
order by staker asc
`
results := []*StakerShares{}
res := model.DB.Raw(query, blockNumber).Scan(&results)
assert.Nil(t, res.Error)

assert.Equal(t, 2, len(results))
assert.Equal(t, "0x4444444444444444444444444444444444444444", results[0].Staker)
assert.Equal(t, "0x1234567890abcdef1234567890abcdef12345678", results[0].Strategy)
assert.Equal(t, "200000000000000000", results[0].Shares)

assert.Equal(t, "0xaf6fb48ac4a60c61a64124ce9dc28f508dc8de8d", results[1].Staker)
assert.Equal(t, "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", results[1].Strategy)
assert.Equal(t, "900000000000000000", results[1].Shares)

teardown(model)
})

t.Run("Should handle a full slashing", func(t *testing.T) {
esm := stateManager.NewEigenStateManager(l, grm)
blockNumber := uint64(200)

delegationModel, err := stakerDelegations.NewStakerDelegationsModel(esm, grm, l, cfg)
assert.Nil(t, err)

err = delegationModel.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

_, err = processDelegation(delegationModel, cfg.GetContractsMapForChain().DelegationManager, blockNumber, 300, "0xaf6fb48ac4a60c61a64124ce9dc28f508dc8de8d", "0xbde83df53bc7d159700e966ad5d21e8b7c619459")
assert.Nil(t, err)

err = delegationModel.CommitFinalState(blockNumber)
assert.Nil(t, err)

model, err := NewStakerSharesModel(esm, grm, l, cfg)
assert.Nil(t, err)

err = model.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

_, err = processDeposit(model, cfg.GetContractsMapForChain().StrategyManager, blockNumber, 400, "0xaf6fb48ac4a60c61a64124ce9dc28f508dc8de8d", "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", big.NewInt(1e18))
assert.Nil(t, err)

err = model.CommitFinalState(blockNumber)
assert.Nil(t, err)

blockNumber = blockNumber + 1
err = model.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

change, err := processSlashing(model, cfg.GetContractsMapForChain().AllocationManager, blockNumber, 500, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", []string{"0x7d704507b76571a51d9cae8addabbfd0ba0e63d3"}, []*big.Int{big.NewInt(1e18)})
assert.Nil(t, err)

typedChange := change.(*AccumulatedStateDiffs)
assert.Equal(t, 1, len(typedChange.StateDiffs))

slashDiff := typedChange.StateDiffs[0].Event.(*SlashDiff)
assert.Equal(t, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", slashDiff.Operator)
assert.Equal(t, "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", slashDiff.Strategy)
assert.Equal(t, "1000000000000000000", slashDiff.WadsSlashed.String())

err = model.CommitFinalState(blockNumber)
assert.Nil(t, err)

query := `
select * from staker_shares
where block_number = ?
`
results := []*StakerShares{}
res := model.DB.Raw(query, blockNumber).Scan(&results)
assert.Nil(t, res.Error)

assert.Equal(t, 1, len(results))
assert.Equal(t, "0xaf6fb48ac4a60c61a64124ce9dc28f508dc8de8d", results[0].Staker)
assert.Equal(t, "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", results[0].Strategy)
assert.Equal(t, "900000000000000000", results[0].Shares)
assert.Equal(t, "0", results[0].Shares)

teardown(model)
})

t.Run("Should slashing when staker has 0 shares", func(t *testing.T) {
esm := stateManager.NewEigenStateManager(l, grm)
blockNumber := uint64(200)

delegationModel, err := stakerDelegations.NewStakerDelegationsModel(esm, grm, l, cfg)
assert.Nil(t, err)

err = delegationModel.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

_, err = processDelegation(delegationModel, cfg.GetContractsMapForChain().DelegationManager, blockNumber, 300, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", "0xbde83df53bc7d159700e966ad5d21e8b7c619459")
assert.Nil(t, err)

err = delegationModel.CommitFinalState(blockNumber)
assert.Nil(t, err)

model, err := NewStakerSharesModel(esm, grm, l, cfg)
assert.Nil(t, err)

err = model.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

_, err = processDeposit(model, cfg.GetContractsMapForChain().StrategyManager, blockNumber, 400, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", big.NewInt(0))
assert.Nil(t, err)

err = model.CommitFinalState(blockNumber)
assert.Nil(t, err)

blockNumber = blockNumber + 1
err = model.SetupStateForBlock(blockNumber)
assert.Nil(t, err)

change, err := processSlashing(model, cfg.GetContractsMapForChain().AllocationManager, blockNumber, 500, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", []string{"0x7d704507b76571a51d9cae8addabbfd0ba0e63d3"}, []*big.Int{big.NewInt(1e17)})
assert.Nil(t, err)

assert.Equal(t, "0x4444444444444444444444444444444444444444", results[1].Staker)
assert.Equal(t, "0x1234567890abcdef1234567890abcdef12345678", results[1].Strategy)
assert.Equal(t, "200000000000000000", results[1].Shares)
typedChange := change.(*AccumulatedStateDiffs)
assert.Equal(t, 1, len(typedChange.StateDiffs))

slashDiff := typedChange.StateDiffs[0].Event.(*SlashDiff)
assert.Equal(t, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", slashDiff.Operator)
assert.Equal(t, "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", slashDiff.Strategy)
assert.Equal(t, "100000000000000000", slashDiff.WadsSlashed.String())

err = model.CommitFinalState(blockNumber)
assert.Nil(t, err)

query := `
select * from staker_shares
where block_number = ?
`
results := []*StakerShares{}
res := model.DB.Raw(query, blockNumber).Scan(&results)
assert.Nil(t, res.Error)

assert.Equal(t, 1, len(results))
assert.Equal(t, "0xbde83df53bc7d159700e966ad5d21e8b7c619459", results[0].Staker)
assert.Equal(t, "0x7d704507b76571a51d9cae8addabbfd0ba0e63d3", results[0].Strategy)
assert.Equal(t, "0", results[0].Shares)

teardown(model)
})
Expand Down

0 comments on commit 2bc5ee4

Please sign in to comment.