@@ -13,6 +13,7 @@ import (
1313 "cosmossdk.io/log"
1414 "cosmossdk.io/store/prefix"
1515 storetypes "cosmossdk.io/store/types"
16+ "github.com/cosmos/cosmos-sdk/codec"
1617 sdk "github.com/cosmos/cosmos-sdk/types"
1718 ante_types "github.com/dydxprotocol/v4-chain/protocol/app/ante/types"
1819 "github.com/dydxprotocol/v4-chain/protocol/lib/metrics"
@@ -27,6 +28,7 @@ var _ types.FullNodeStreamingManager = (*FullNodeStreamingManagerImpl)(nil)
2728type FullNodeStreamingManagerImpl struct {
2829 sync.Mutex
2930
31+ cdc codec.BinaryCodec
3032 logger log.Logger
3133
3234 // orderbookSubscriptions maps subscription IDs to their respective orderbook subscriptions.
@@ -95,6 +97,7 @@ func NewFullNodeStreamingManager(
9597 maxSubscriptionChannelSize uint32 ,
9698 snapshotBlockInterval uint32 ,
9799 streamingManagerTransientStoreKey storetypes.StoreKey ,
100+ cdc codec.BinaryCodec ,
98101) * FullNodeStreamingManagerImpl {
99102 fullNodeStreamingManager := & FullNodeStreamingManagerImpl {
100103 logger : logger ,
@@ -113,6 +116,7 @@ func NewFullNodeStreamingManager(
113116 snapshotBlockInterval : snapshotBlockInterval ,
114117
115118 streamingManagerTransientStoreKey : streamingManagerTransientStoreKey ,
119+ cdc : cdc ,
116120 }
117121
118122 // Start the goroutine for pushing order updates through.
@@ -391,14 +395,15 @@ func (sm *FullNodeStreamingManagerImpl) StageFinalizeBlockSubaccountUpdate(
391395 ctx sdk.Context ,
392396 subaccountUpdate satypes.StreamSubaccountUpdate ,
393397) {
398+ lib .AssertDeliverTxMode (ctx )
394399 stagedEvent := clobtypes.StagedFinalizeBlockEvent {
395400 Event : & clobtypes.StagedFinalizeBlockEvent_SubaccountUpdate {
396401 SubaccountUpdate : & subaccountUpdate ,
397402 },
398403 }
399404 sm .stageFinalizeBlockEvent (
400405 ctx ,
401- clobtypes . Amino .MustMarshal (stagedEvent ),
406+ sm . cdc .MustMarshal (& stagedEvent ),
402407 )
403408}
404409
@@ -411,25 +416,30 @@ func (sm *FullNodeStreamingManagerImpl) StageFinalizeBlockFill(
411416 ctx sdk.Context ,
412417 fill clobtypes.StreamOrderbookFill ,
413418) {
419+ lib .AssertDeliverTxMode (ctx )
414420 stagedEvent := clobtypes.StagedFinalizeBlockEvent {
415421 Event : & clobtypes.StagedFinalizeBlockEvent_OrderFill {
416422 OrderFill : & fill ,
417423 },
418424 }
425+
419426 sm .stageFinalizeBlockEvent (
420427 ctx ,
421- clobtypes . Amino .MustMarshal (stagedEvent ),
428+ sm . cdc .MustMarshal (& stagedEvent ),
422429 )
423430}
424431
425- func getStagedFinalizeBlockEvents (store storetypes.KVStore ) []clobtypes.StagedFinalizeBlockEvent {
432+ func getStagedFinalizeBlockEventsFromStore (
433+ store storetypes.KVStore ,
434+ cdc codec.BinaryCodec ,
435+ ) []clobtypes.StagedFinalizeBlockEvent {
426436 count := getStagedEventsCount (store )
427437 events := make ([]clobtypes.StagedFinalizeBlockEvent , count )
428438 store = prefix .NewStore (store , []byte (StagedEventsKeyPrefix ))
429439 for i := uint32 (0 ); i < count ; i ++ {
430440 var event clobtypes.StagedFinalizeBlockEvent
431441 bytes := store .Get (lib .Uint32ToKey (i ))
432- clobtypes . Amino .MustUnmarshal (bytes , & event )
442+ cdc .MustUnmarshal (bytes , & event )
433443 events [i ] = event
434444 }
435445 return events
@@ -441,7 +451,7 @@ func (sm *FullNodeStreamingManagerImpl) GetStagedFinalizeBlockEvents(
441451) []clobtypes.StagedFinalizeBlockEvent {
442452 noGasCtx := ctx .WithGasMeter (ante_types .NewFreeInfiniteGasMeter ())
443453 store := noGasCtx .TransientStore (sm .streamingManagerTransientStoreKey )
444- return getStagedFinalizeBlockEvents (store )
454+ return getStagedFinalizeBlockEventsFromStore (store , sm . cdc )
445455}
446456
447457func (sm * FullNodeStreamingManagerImpl ) stageFinalizeBlockEvent (
@@ -889,6 +899,9 @@ func (sm *FullNodeStreamingManagerImpl) StreamBatchUpdatesAfterFinalizeBlock(
889899 orderBookUpdatesToSyncLocalOpsQueue * clobtypes.OffchainUpdates ,
890900 perpetualIdToClobPairId map [uint32 ][]clobtypes.ClobPairId ,
891901) {
902+ // Prevent gas metering from state read.
903+ ctx = ctx .WithGasMeter (ante_types .NewFreeInfiniteGasMeter ())
904+
892905 finalizedFills , finalizedSubaccountUpdates := sm .getStagedEventsFromFinalizeBlock (ctx )
893906
894907 orderbookStreamUpdates , orderbookClobPairIds := getStreamUpdatesFromOffchainUpdates (
0 commit comments