Changelog
View SourceAll notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.5.0 - 2025-08-06
This release adds IPC transport support for local Ethereum node communication via Unix domain sockets.
Added
- IPC transport implementation using Unix domain sockets
- Connection pooling with NimblePool for efficient resource utilization
- Comprehensive IPC transport documentation and examples
Changed
- Updated transport documentation to include IPC transport options
- Enhanced examples with IPC transport usage
- Added IPC transport to the list of supported transport types
- Updated transport factory to support
:ipctransport type
0.4.2 - 2025-07-04
This release intends to improve the reliability and fault-tolerance of the transport layer.
Added
- Supervision Tree for Transport layer
- Websocket process registration with via-tuples through Registry
0.4.1 - 2025-06-14
Fixed
- Remove spaces from HTTP user-agent
- Fix WebSocket test flakiness caused by Registry name conflicts
0.4.0 - 2025-06-12
Added
Websocket transport implementation.
Support for subscriptions over websockets.
Provider functions for websocket subscriptions (
subscribe_blocks/0,subscribe_pending_transactions/0,subscribe_logs/0,subscribe_logs/1,unsubscribe/1).Internally added a
MessageHandlerresponsible for handling incoming async messages/notifications and routing them to the appropriate caller.Internally added
Exth.Rpc.Callstruct that represents a chain of RPC calls that can be executed in sequence or as a batch.Internally changed
Exth.Rpc.Clientto useExth.Rpc.Callstructs that allow batch requests to be made piping requests, like:client |> Rpc.request("eth_blockNumer", []) |> Rpc.request("net_version", []) |> Rpc.send()
Changed
- Transport layer was responsible for serializing, deserializing and sending requests. Now, it's only responsibility is to send requests and receive responses, to keep its scope as minimal as possible.
- Encoding and decoding logic was moved to
Exth.Rpcsubdomain.
Fixed
- made
:otp_appnot required in the Provider configuration
0.3.0 - 2025-04-11
Added
- Support for dynamic configuration through both inline options and application configuration
- examples directory with practical usage examples
0.2.2 - 2025-04-07
Changed
- Moved
Exth.Rpc.Encoding.encode_request/1logic toExth.Rpc.Request.serialize/1 - Moved
Exth.Rpc.Encoding.decode_response/1logic toExth.Rpc.Response.deserialize/1 - Removed
Exth.Rpc.Encodingmodule - Transport module does not receive an
encoder/1anddecoder/1option anymore. It's now direct to callExth.Rpc.Request.serialize/1andExth.Rpc.Response.deserialize/1functions. - These changes aim to reduce the complexity of
Exth.RpcandExth.Transportmodules and make it easier to understand its internals.
0.2.1 - 2025-04-05
Changed
Exth.Providerwas refactored to reduce its complexity- Fixed dialyzer warnings on
Exth.Providerrelated tohas no local return. Some types were fixed and the dialyzer warning does not appear anymore. No more warnings when defining providers.
0.2.0 - 2025-04-04
Added
- Documentation for
Exth.Rpc.RequestandExth.Rpc.Responsestructs - Allow inverting arguments order on
Exth.Rpc.send/2andExth.Rpc.Client.send/2- This change allows for more flexible usage patterns (pipes)
- Creation of request IDs on
Exth.Rpc.Client.send/2when no pre-assigned IDs are provided - Creation of requests with no pre-assigned IDs with
Exth.Rpc.request/2andExth.Rpc.Client.request/2
Changed
- Replaced
JasonwithJSONfor JSON encoding/decoding - Updated
README.mdfor documentation purposes - Updated
Exth.Rpc.Clientdocumentation
0.1.1 - 2025-03-27
Changed
mintdependency is now:optionalinstead ofonly: :dev;- Updated
README.mdfor documentation purposes, with more examples and better formatting;
0.1.0 - 2025-03-25 🚀
Added
- Initial release of Exth
- Core JSON-RPC functionality
- Request/Response handling
- Method generation
- Parameter encoding
- Transport layer abstraction
- HTTP Transport implementation using Tesla
- Configurable middleware support
- Provider interface
- Ethereum namespace support (
eth_*methods) - Net namespace support (
net_*methods) - Web3 namespace support (
web3_*methods)
- Ethereum namespace support (
- Client caching mechanism
- Comprehensive documentation
- MIT License