- What Laravel versions does amashukov/rlp-php support?
- The package has no Laravel-specific dependencies and works with any Laravel 8.x+ version. It integrates seamlessly with Laravel’s service container, event-driven architecture, or queue workers. Tested against PHP 8.1+ (Laravel’s minimum for newer versions).
- How do I integrate this into Laravel’s service container?
- Register the `Rlp` class as a singleton in `AppServiceProvider::boot()` using `app()->singleton(Rlp::class, fn() => new Rlp())`. This ensures global access via dependency injection. For example, inject `Rlp` into controllers or services needing RLP operations.
- Does this package handle Ethereum transaction serialization for Laravel APIs?
- Yes. Use `Rlp::encode()` to serialize transaction data (e.g., nonce, gasPrice, data) into Ethereum’s canonical RLP format. For decoding, `Rlp::decode()` parses raw transaction bytes into structured arrays, which you can then validate or process in Laravel’s request pipelines.
- What happens if I try to decode malformed RLP data (e.g., non-canonical)?
- The package throws exceptions for non-canonical RLP (e.g., malleable encodings, truncated input). Wrap calls in a `try-catch` and log errors or return HTTP 400 responses in APIs. For Laravel, consider creating a custom `RlpException` class extending `RuntimeException` for consistent error handling.
- Can I use this for streaming large Ethereum block datasets in Laravel?
- Yes, the `decodeStream()` method processes concatenated RLP data (e.g., batches of transactions) without loading everything into memory. Use it in Laravel queue workers or console commands for historical block processing. Manage offsets manually for long-running processes.
- Is ext-gmp required, and how do I enforce it in Laravel?
- Yes, `ext-gmp` is required for big-integer support. Enforce it in CI by adding `phpunit/phpunit:^10` with the `gmp` extension to your `phpunit.xml` or use a custom `phpunit` config. Shared hosting may need runtime configuration via `.php.ini` or `ini_set()`.
- How does this compare to alternatives like web3.php for RLP operations?
- This package is a lightweight, dependency-free primitive focused solely on RLP encoding/decoding with strict canonical enforcement. Alternatives like `web3.php` bundle RLP with higher-level Ethereum logic. Benchmark for your use case: this is ideal for custom serialization, while `web3.php` may suit full-stack Ethereum apps.
- Does this support Ethereum’s evolving RLP spec (e.g., new EIPs)?
- The package adheres to Ethereum’s Yellow Paper and current RLP spec. For EIP-specific changes (e.g., new field encodings), check the [GitHub issues](https://github.com/AndreyMashukov/rlp-php/issues) or contribute updates. The modular design makes it easy to extend for future specs.
- How do I test RLP encoding/decoding in Laravel’s test suite?
- Use PHPUnit to validate against known test vectors (included in the package). Example: `assertEquals(Rlp::encode([1, 2, 3]), '0xc2010203');`. For integration tests, mock Ethereum data (e.g., raw transactions) and assert decoded structures match expected arrays.
- Can I use this in Laravel’s queue workers for high-throughput transaction processing?
- Yes. Decode transactions in queue jobs (e.g., `DecodeTransactionJob`) using `Rlp::decode()`. For high throughput, benchmark `decodeStream()` for batch processing. Pair with Laravel’s `dispatchSync()` for critical paths or use Redis queues to distribute load.