Skip to content

Commit

Permalink
[TRA-572] Send upsert vault event when setting parameters of vault. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentwschau committed Sep 18, 2024
1 parent 486b265 commit 903e10a
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 22 deletions.
1 change: 1 addition & 0 deletions protocol/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -1184,6 +1184,7 @@ func New(
app.PricesKeeper,
app.SendingKeeper,
app.SubaccountsKeeper,
app.IndexerEventManager,
[]string{
lib.GovModuleAddress.String(),
delaymsgmoduletypes.ModuleAddress.String(),
Expand Down
5 changes: 2 additions & 3 deletions protocol/indexer/events/upsert_vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,19 @@ package events

import (
v1 "github.com/dydxprotocol/v4-chain/protocol/indexer/protocol/v1"
clobtypes "github.com/dydxprotocol/v4-chain/protocol/x/clob/types"
"github.com/dydxprotocol/v4-chain/protocol/x/vault/types"
)

// NewUpsertVaultEvent creates a UpsertVaultEventV1
// representing an create / update of a vault.
func NewUpsertVaultEvent(
vaultAddress string,
clobPairId clobtypes.ClobPairId,
clobPairId uint32,
status types.VaultStatus,
) *UpsertVaultEventV1 {
return &UpsertVaultEventV1{
Address: vaultAddress,
ClobPairId: uint32(clobPairId),
ClobPairId: clobPairId,
Status: v1.VaultStatusToIndexerVaultStatus(status),
}
}
10 changes: 10 additions & 0 deletions protocol/testutil/keeper/vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import (
"testing"

dbm "github.com/cosmos/cosmos-db"
"github.com/dydxprotocol/v4-chain/protocol/indexer/indexer_manager"
"github.com/dydxprotocol/v4-chain/protocol/lib"
delaymsgtypes "github.com/dydxprotocol/v4-chain/protocol/x/delaymsg/types"
"github.com/stretchr/testify/mock"

storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/codec"
Expand Down Expand Up @@ -50,6 +52,13 @@ func createVaultKeeper(
storeKey := storetypes.NewKVStoreKey(types.StoreKey)
stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db)

mockMsgSender := &mocks.IndexerMessageSender{}
mockMsgSender.On("Enabled").Return(true)
mockMsgSender.On("SendOnchainData", mock.Anything).Return()
mockMsgSender.On("SendOffchainData", mock.Anything).Return()

mockIndexerEventsManager := indexer_manager.NewIndexerEventManager(mockMsgSender, transientStoreKey, true)

k := keeper.NewKeeper(
cdc,
storeKey,
Expand All @@ -59,6 +68,7 @@ func createVaultKeeper(
&mocks.PricesKeeper{},
&mocks.SendingKeeper{},
&mocks.SubaccountsKeeper{},
mockIndexerEventsManager,
[]string{
lib.GovModuleAddress.String(),
delaymsgtypes.ModuleAddress.String(),
Expand Down
44 changes: 26 additions & 18 deletions protocol/x/vault/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,23 @@ import (
storetypes "cosmossdk.io/store/types"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dydxprotocol/v4-chain/protocol/indexer/indexer_manager"
"github.com/dydxprotocol/v4-chain/protocol/lib"
"github.com/dydxprotocol/v4-chain/protocol/x/vault/types"
)

type (
Keeper struct {
cdc codec.BinaryCodec
storeKey storetypes.StoreKey
clobKeeper types.ClobKeeper
delayMsgKeeper types.DelayMsgKeeper
perpetualsKeeper types.PerpetualsKeeper
pricesKeeper types.PricesKeeper
sendingKeeper types.SendingKeeper
subaccountsKeeper types.SubaccountsKeeper
authorities map[string]struct{}
cdc codec.BinaryCodec
storeKey storetypes.StoreKey
clobKeeper types.ClobKeeper
delayMsgKeeper types.DelayMsgKeeper
perpetualsKeeper types.PerpetualsKeeper
pricesKeeper types.PricesKeeper
sendingKeeper types.SendingKeeper
subaccountsKeeper types.SubaccountsKeeper
indexerEventManager indexer_manager.IndexerEventManager
authorities map[string]struct{}
}
)

Expand All @@ -34,18 +36,20 @@ func NewKeeper(
pricesKeeper types.PricesKeeper,
sendingKeeper types.SendingKeeper,
subaccountsKeeper types.SubaccountsKeeper,
indexerEventManager indexer_manager.IndexerEventManager,
authorities []string,
) *Keeper {
return &Keeper{
cdc: cdc,
storeKey: storeKey,
clobKeeper: clobKeeper,
delayMsgKeeper: delayMsgKeeper,
perpetualsKeeper: perpetualsKeeper,
pricesKeeper: pricesKeeper,
sendingKeeper: sendingKeeper,
subaccountsKeeper: subaccountsKeeper,
authorities: lib.UniqueSliceToSet(authorities),
cdc: cdc,
storeKey: storeKey,
clobKeeper: clobKeeper,
delayMsgKeeper: delayMsgKeeper,
perpetualsKeeper: perpetualsKeeper,
pricesKeeper: pricesKeeper,
sendingKeeper: sendingKeeper,
subaccountsKeeper: subaccountsKeeper,
indexerEventManager: indexerEventManager,
authorities: lib.UniqueSliceToSet(authorities),
}
}

Expand All @@ -58,4 +62,8 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With(log.ModuleKey, fmt.Sprintf("x/%s", types.ModuleName))
}

func (k Keeper) GetIndexerEventManager() indexer_manager.IndexerEventManager {
return k.indexerEventManager
}

func (k Keeper) InitializeForGenesis(ctx sdk.Context) {}
2 changes: 2 additions & 0 deletions protocol/x/vault/keeper/orders_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ func TestRefreshAllVaultOrders(t *testing.T) {
)
require.NoError(t, err)
}
// Clear events from setting vault params
tApp.App.IndexerEventManager.ClearEvents(ctx)

// Check that there's no stateful orders yet.
allStatefulOrders := tApp.App.ClobKeeper.GetAllStatefulOrders(ctx)
Expand Down
15 changes: 15 additions & 0 deletions protocol/x/vault/keeper/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
"cosmossdk.io/store/prefix"
storetypes "cosmossdk.io/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
indexerevents "github.com/dydxprotocol/v4-chain/protocol/indexer/events"
"github.com/dydxprotocol/v4-chain/protocol/indexer/indexer_manager"
"github.com/dydxprotocol/v4-chain/protocol/x/vault/types"
)

Expand Down Expand Up @@ -70,6 +72,19 @@ func (k Keeper) SetVaultParams(
store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte(types.VaultParamsKeyPrefix))
store.Set(vaultId.ToStateKey(), b)

k.GetIndexerEventManager().AddTxnEvent(
ctx,
indexerevents.SubtypeUpsertVault,
indexerevents.UpsertVaultEventVersion,
indexer_manager.GetBytes(
indexerevents.NewUpsertVaultEvent(
vaultId.ToModuleAccountAddress(),
vaultId.Number,
vaultParams.Status,
),
),
)

return nil
}

Expand Down
57 changes: 56 additions & 1 deletion protocol/x/vault/keeper/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,17 @@ package keeper_test
import (
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/gogoproto/proto"
"github.com/dydxprotocol/v4-chain/protocol/dtypes"
"github.com/dydxprotocol/v4-chain/protocol/indexer"
indexerevents "github.com/dydxprotocol/v4-chain/protocol/indexer/events"
"github.com/dydxprotocol/v4-chain/protocol/indexer/indexer_manager"
"github.com/dydxprotocol/v4-chain/protocol/indexer/msgsender"
v1 "github.com/dydxprotocol/v4-chain/protocol/indexer/protocol/v1"
testapp "github.com/dydxprotocol/v4-chain/protocol/testutil/app"
"github.com/dydxprotocol/v4-chain/protocol/testutil/constants"
"github.com/dydxprotocol/v4-chain/protocol/x/vault/keeper"
"github.com/dydxprotocol/v4-chain/protocol/x/vault/types"
"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -54,16 +62,32 @@ func TestGetSetVaultParams(t *testing.T) {
vaultId types.VaultId
// Vault params to set.
vaultParams *types.VaultParams
// Expected on-chain indexer events
expectedIndexerEvents []*indexerevents.UpsertVaultEventV1
// Expected error.
expectedErr error
}{
"Success - Vault Clob 0": {
vaultId: constants.Vault_Clob0,
vaultParams: &constants.VaultParams,
expectedIndexerEvents: []*indexerevents.UpsertVaultEventV1{
{
Address: constants.Vault_Clob0.ToModuleAccountAddress(),
ClobPairId: constants.Vault_Clob0.Number,
Status: v1.VaultStatusToIndexerVaultStatus(constants.VaultParams.Status),
},
},
},
"Success - Vault Clob 1": {
vaultId: constants.Vault_Clob1,
vaultParams: &constants.VaultParams,
expectedIndexerEvents: []*indexerevents.UpsertVaultEventV1{
{
Address: constants.Vault_Clob1.ToModuleAccountAddress(),
ClobPairId: constants.Vault_Clob1.Number,
Status: v1.VaultStatusToIndexerVaultStatus(constants.VaultParams.Status),
},
},
},
"Success - Non-existent Vault Params": {
vaultId: constants.Vault_Clob1,
Expand All @@ -88,7 +112,11 @@ func TestGetSetVaultParams(t *testing.T) {

for name, tc := range tests {
t.Run(name, func(t *testing.T) {
tApp := testapp.NewTestAppBuilder(t).Build()
msgSender := msgsender.NewIndexerMessageSenderInMemoryCollector()
appOpts := map[string]interface{}{
indexer.MsgSenderInstanceForTest: msgSender,
}
tApp := testapp.NewTestAppBuilder(t).WithAppOptions(appOpts).Build()
ctx := tApp.InitChain()
k := tApp.App.VaultKeeper

Expand All @@ -109,6 +137,11 @@ func TestGetSetVaultParams(t *testing.T) {
require.True(t, exists)
require.Equal(t, *tc.vaultParams, p)
}

if tc.expectedErr == nil && tc.vaultParams != nil {
upsertVaultEventsInBlock := getUpsertVaultEventsFromIndexerBlock(ctx, &k)
require.ElementsMatch(t, tc.expectedIndexerEvents, upsertVaultEventsInBlock)
}
})
}
}
Expand Down Expand Up @@ -197,3 +230,25 @@ func TestGetSetOperatorParams(t *testing.T) {
require.Error(t, err)
require.Equal(t, newParams, k.GetOperatorParams(ctx))
}

func getUpsertVaultEventsFromIndexerBlock(
ctx sdk.Context,
keeper *keeper.Keeper,
) []*indexerevents.UpsertVaultEventV1 {
block := keeper.GetIndexerEventManager().ProduceBlock(ctx)
var upsertVaultEvents []*indexerevents.UpsertVaultEventV1
for _, event := range block.Events {
if event.Subtype != indexerevents.SubtypeUpsertVault {
continue
}
if _, ok := event.OrderingWithinBlock.(*indexer_manager.IndexerTendermintEvent_TransactionIndex); ok {
var upsertVaultEvent indexerevents.UpsertVaultEventV1
err := proto.Unmarshal(event.DataBytes, &upsertVaultEvent)
if err != nil {
panic(err)
}
upsertVaultEvents = append(upsertVaultEvents, &upsertVaultEvent)
}
}
return upsertVaultEvents
}

0 comments on commit 903e10a

Please sign in to comment.