Read the April 2026 blog (English) here
https://thesymbolsyndicate.notion.site/April-2026-3e8a7f7eb5e480208ba0c6c9b6f75290
April 2026 Anthony’s Engineering Blog (Japanese Translation)
April felt like a month of turning unfinished pieces into usable Explorer backend features. Some work, such as the modules and transaction schemas, had started in March, but April was when those pieces were reviewed, refactored, merged, and connected as actual REST endpoints.
The puller (the data retrieval and synchronization process) needed to handle all transaction types from blocks, while the REST side needed clean endpoints for querying transactions by hash and listing transactions with filters. Along the way, there were plenty of rebases, responses to review feedback, refactoring, and test updates. This is how the NEM Explorer backend is gradually taking shape. 🦾
Summary of Main Tasks
- Completed and merged the mosaic module.
- Completed transaction processing from blocks.
- Added
/transaction/<hash>and a/transactionslist endpoint supporting multiple filters. - Added support for unconfirmed transactions to lightapi/python.
- Verified puller synchronization locally on the NEM testnet.
Details of Each Task
Mosaic Module
- Development of the mosaic module began in March, so April was mainly spent addressing review feedback, refactoring, and merging.
- Refactored the REST endpoints for mosaics, mosaic lists, and rich lists.
- Added unit tests for the mosaic rich list to verify that the endpoint works correctly.
- With these PRs merged, the mosaic module was complete.
Transaction Puller
- In April, I focused on completing the transaction puller.
- Added support in the puller for processing all transaction types within blocks.
- Fixed a bug where
sender_addresswas not correctly converted from the sender’s public key. - Removed unnecessary inner transaction ID logic, since multisig inner transactions can be queried by transaction hash.
- This part helped me better understand how transaction data should be structured for storage and subsequent queries.
- After several rounds of feedback and refactoring, the transaction puller module was finally merged.
Transaction REST API
- Once the puller was working reliably, I moved on to the transaction REST endpoints.
- Added the
/transaction/<hash>endpoint to query transaction details by transaction hash. - Refactored transaction output logic to make responses simpler and easier to maintain.
- Added support for multisig and inner transaction output.
- This endpoint allows the Explorer to query detailed transaction information by transaction hash.
- Added the
/transactionsendpoint with pagination and sorting by block height. - Implemented filters for
height,transaction_types,address,senderAddress,recipientAddress, andsenderPublicKey. - The final “mosaic” filter was challenging because the query needed to correctly match mosaic-related transaction data.
- Also considered
/mosaic/transfers, but decided against it because themosaicfilter on/transactionscovers the same use case. - It was a reminder that sometimes a better solution comes from improving an existing endpoint rather than adding a new one.
Lightapi / Python
- Added an endpoint for unconfirmed transactions to support the NEM Explorer.
- This allows the Explorer to query unconfirmed transaction data through lightapi/python.
- Although smaller than the Explorer backend work, this was an important change because the Explorer depends on complete data from the underlying API layer.
Puller Synchronization Verification
- Used the puller to synchronize NEM testnet data to a local database.
- Checked the synchronization process locally, with good results.
- Wrote a setup guide for running the puller locally, making the setup process easier to repeat and test.
What’s Next
The transaction list endpoint still needs further consideration, particularly around filtering and review feedback. After that, I will work on the remaining Explorer backend endpoints and prepare the backend for integration with the frontend.
Thank you for reading, and see you next time! 🏴☠️
—
Anthony (Japanese translation by Radio)