Skip to content

[Phase 3] Event Parser Optimization (Issue #40)#57

Merged
gmajor-encrypt merged 1 commit intomasterfrom
feature/event-parser
Mar 24, 2026
Merged

[Phase 3] Event Parser Optimization (Issue #40)#57
gmajor-encrypt merged 1 commit intomasterfrom
feature/event-parser

Conversation

@gmajor-encrypt
Copy link
Owner

Summary

This PR implements an optimized Event parser for the SCALE codec library.

Features Implemented

EventRecord Parsing

  • Phase support: ApplyExtrinsic, Finalization, Initialization
  • Event data: Pallet index, event index, event data
  • Topics: Vec<[u8; 32]> parsing

Components

Phase (enum)

  • ApplyExtrinsic: Event from extrinsic execution
  • Finalization: Event from block finalization
  • Initialization: Event from block initialization

Event (class)

  • Pallet name and index
  • Event name and index
  • Event data fields
  • Field getters

EventRecord (class)

  • Phase information
  • Extrinsic index (for ApplyExtrinsic phase)
  • Event data
  • Topics list

EventParser (class)

  • SCALE parsing for EventRecords
  • Batch parsing support
  • Metadata integration

EventIndex (class)

  • Fast event lookup by name
  • Fast event lookup by pallet
  • Fast event lookup by extrinsic
  • Phase-based filtering

ErrorEventDetector (class)

  • Detect ExtrinsicFailed events
  • Check if extrinsic failed
  • Get error summary

Example Usage

use Substrate\ScaleCodec\Event\{EventParser, EventIndex, ErrorEventDetector};

// Parse events
$parser = new EventParser();
$events = $parser->parseHex($hexData);

// Index events for fast lookup
$index = new EventIndex($events);

// Find events by name
$transfers = $index->findByName('Balances', 'Transfer');

// Find events by extrinsic
$extrinsic0Events = $index->findByExtrinsic(0);

// Detect errors
$detector = new ErrorEventDetector($events);
if ($detector->hasErrors()) {
    $errors = $detector->getErrors();
}

Tests

  • Unit tests in tests/Event/EventTest.php
  • Phase tests
  • EventRecord tests
  • Parser tests
  • Index tests
  • Error detector tests

Issue


Ready for review.

- EventRecord parsing with phase support
- Event indexing for fast lookups
- Error event detection
- Phase enum (ApplyExtrinsic/Finalization/Initialization)

Components:
- Phase: Execution phase enum
- Event: Event data model
- EventRecord: Event with phase and topics
- EventParser: SCALE parser for events
- EventIndex: Indexing utility for fast lookups
- ErrorEventDetector: Error event detection

Features:
- Parse Vec<EventRecord> from SCALE
- Phase-based filtering
- Event lookup by name/pallet/extrinsic
- Error event detection (ExtrinsicFailed, etc)
- Topic parsing

Tests:
- Unit tests for all components
- Phase tests
- EventRecord tests
- Parser tests
- Index tests
- Error detector tests

Closes #40
@gmajor-encrypt gmajor-encrypt merged commit 176b43f into master Mar 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Phase 3] Event Parser Optimization

1 participant