feat: implement handler interface, add example emitter (stdout)

This commit is contained in:
2024-04-16 13:14:21 +08:00
parent 49feb5bd2e
commit 343f304eaf
8 changed files with 141 additions and 45 deletions

View File

@@ -5,6 +5,7 @@ import (
"github.com/celo-org/celo-blockchain/common"
"github.com/celo-org/celo-blockchain/core/types"
"github.com/grassrootseconomics/celo-tracker/internal/emitter"
)
func (p *Processor) processBlock(ctx context.Context, block types.Block) error {
@@ -24,8 +25,11 @@ func (p *Processor) processBlock(ctx context.Context, block types.Block) error {
for i, receipt := range receiptsResp {
if receipt.Status > 0 {
// test transfers
p.chain.TestDecodeTransfer(ctx, receipt.Logs)
for _, log := range receipt.Logs {
if err := p.handleLogs(ctx, log); err != nil {
p.logg.Error("hanlder error", "error", err)
}
}
} else {
revertReason, _ := p.chain.GetRevertReason(ctx, receipt.TxHash, receipt.BlockNumber)
p.logg.Debug("tx reverted", "hash", receipt.TxHash, "revert_reason", revertReason, "input_data", common.Bytes2Hex(txs[i].Data()))
@@ -40,3 +44,14 @@ func (p *Processor) processBlock(ctx context.Context, block types.Block) error {
return nil
}
func (p *Processor) handleLogs(ctx context.Context, log *types.Log) error {
defaultEmitter := emitter.New(p.logg)
for _, handler := range p.handlers {
if err := handler.Handle(ctx, log, defaultEmitter); err != nil {
return err
}
}
return nil
}

View File

@@ -10,6 +10,7 @@ import (
"github.com/ef-ds/deque/v2"
"github.com/grassrootseconomics/celo-tracker/internal/chain"
"github.com/grassrootseconomics/celo-tracker/internal/db"
"github.com/grassrootseconomics/celo-tracker/internal/handler"
"github.com/grassrootseconomics/celo-tracker/internal/pool"
"github.com/grassrootseconomics/celo-tracker/internal/stats"
)
@@ -31,6 +32,7 @@ type (
stats *stats.Stats
db *db.DB
quit chan struct{}
handlers []handler.Handler
}
)
@@ -47,6 +49,7 @@ func NewProcessor(o ProcessorOpts) *Processor {
stats: o.Stats,
db: o.DB,
quit: make(chan struct{}),
handlers: handler.New(),
}
}