@@ -2,6 +2,7 @@ package baseapp
2
2
3
3
import (
4
4
"context"
5
+ "encoding/json"
5
6
"fmt"
6
7
"sort"
7
8
"strconv"
@@ -20,6 +21,7 @@ import (
20
21
21
22
"github.com/cosmos/cosmos-sdk/client/flags"
22
23
servertypes "github.com/cosmos/cosmos-sdk/server/types"
24
+ sdk "github.com/cosmos/cosmos-sdk/types"
23
25
)
24
26
25
27
const (
@@ -48,7 +50,7 @@ func (app *BaseApp) EnableIndexer(indexerOpts interface{}, keys map[string]*stor
48
50
app .cms .AddListeners (exposedKeys )
49
51
50
52
app .streamingManager = storetypes.StreamingManager {
51
- ABCIListeners : []storetypes.ABCIListener {listenerWrapper {listener .Listener }},
53
+ ABCIListeners : []storetypes.ABCIListener {listenerWrapper {listener .Listener , app . txDecoder }},
52
54
StopNodeOnErr : true ,
53
55
}
54
56
@@ -144,9 +146,10 @@ func exposeStoreKeysSorted(keysStr []string, keys map[string]*storetypes.KVStore
144
146
return exposeStoreKeys
145
147
}
146
148
147
- func eventToAppDataEvent (event abci.Event ) (appdata.Event , error ) {
149
+ func eventToAppDataEvent (event abci.Event , height int64 ) (appdata.Event , error ) {
148
150
appdataEvent := appdata.Event {
149
- Type : event .Type ,
151
+ BlockNumber : uint64 (height ),
152
+ Type : event .Type ,
150
153
Attributes : func () ([]appdata.EventAttribute , error ) {
151
154
attrs := make ([]appdata.EventAttribute , len (event .Attributes ))
152
155
for j , attr := range event .Attributes {
@@ -197,7 +200,8 @@ func eventToAppDataEvent(event abci.Event) (appdata.Event, error) {
197
200
}
198
201
199
202
type listenerWrapper struct {
200
- listener appdata.Listener
203
+ listener appdata.Listener
204
+ txDecoder sdk.TxDecoder
201
205
}
202
206
203
207
// NewListenerWrapper creates a new listenerWrapper.
@@ -208,20 +212,35 @@ func NewListenerWrapper(listener appdata.Listener) listenerWrapper {
208
212
209
213
func (p listenerWrapper ) ListenFinalizeBlock (_ context.Context , req abci.FinalizeBlockRequest , res abci.FinalizeBlockResponse ) error {
210
214
if p .listener .StartBlock != nil {
215
+ // clean up redundant data
216
+ reqWithoutTxs := req
217
+ reqWithoutTxs .Txs = nil
218
+
211
219
if err := p .listener .StartBlock (appdata.StartBlockData {
212
220
Height : uint64 (req .Height ),
213
221
HeaderBytes : nil , // TODO: https://github.com/cosmos/cosmos-sdk/issues/22009
214
- HeaderJSON : nil , // TODO: https://github.com/cosmos/cosmos-sdk/issues/22009
222
+ HeaderJSON : func () (json.RawMessage , error ) {
223
+ return json .Marshal (reqWithoutTxs )
224
+ },
215
225
}); err != nil {
216
226
return err
217
227
}
218
228
}
219
229
if p .listener .OnTx != nil {
220
230
for i , tx := range req .Txs {
221
231
if err := p .listener .OnTx (appdata.TxData {
222
- TxIndex : int32 (i ),
223
- Bytes : func () ([]byte , error ) { return tx , nil },
224
- JSON : nil , // TODO: https://github.com/cosmos/cosmos-sdk/issues/22009
232
+ BlockNumber : uint64 (req .Height ),
233
+ TxIndex : int32 (i ),
234
+ Bytes : func () ([]byte , error ) { return tx , nil },
235
+ JSON : func () (json.RawMessage , error ) {
236
+ sdkTx , err := p .txDecoder (tx )
237
+ if err != nil {
238
+ // if the transaction cannot be decoded, return the error as JSON
239
+ // as there are some txs that might not be decodeable by the txDecoder
240
+ return json .Marshal (err )
241
+ }
242
+ return json .Marshal (sdkTx )
243
+ },
225
244
}); err != nil {
226
245
return err
227
246
}
@@ -231,14 +250,14 @@ func (p listenerWrapper) ListenFinalizeBlock(_ context.Context, req abci.Finaliz
231
250
events := make ([]appdata.Event , len (res .Events ))
232
251
var err error
233
252
for i , event := range res .Events {
234
- events [i ], err = eventToAppDataEvent (event )
253
+ events [i ], err = eventToAppDataEvent (event , req . Height )
235
254
if err != nil {
236
255
return err
237
256
}
238
257
}
239
258
for _ , txResult := range res .TxResults {
240
259
for _ , event := range txResult .Events {
241
- appdataEvent , err := eventToAppDataEvent (event )
260
+ appdataEvent , err := eventToAppDataEvent (event , req . Height )
242
261
if err != nil {
243
262
return err
244
263
}
0 commit comments