alisinabh

alisinabh

Ethers - a comprehensive Web3 library for interacting with smart contracts on Ethereum using Elixir

Hello Elixir community!

I am excited to announce the release of a new Elixir library for interacting with the Ethereum blockchain: Ethers!

Ethers is heavily inspired by the popular ethers.js library and aims to provide a comprehensive and easy-to-use solution for Elixir developers working with Ethereum smart contracts. With Ethers, you can effortlessly interact with Ethereum contracts using automatically generated Elixir modules, complete with documentation and type-specs.

Here are some of the key features that differentiate Ethers from other Ethereum Clients.

  • Compile-time contract ABI to Elixir module conversion. This means it is faster in runtime and easier to use than other libraries like exw3
  • Out of the box support for standard contract interfaces such as ERC20, ERC721, ERC1155 and ERC777
  • Easy contract function calling and transaction sending
  • Simple log fetching and event filter creation
  • Developer first experience with typespecs and generated documentation
  • Portable RPC modules (Want to use a different RPC or want to add a feature to the RPC? You can swap it with your own)

Right now this is considered beta-testing release. I would encourage and also ask everybody who is interested to interact with and test Ethers. Did I mentioned that contribution is really welcomed?

Happy coding!

GitHub: alisinabh/elixir_ethers
Hex: ethers
Hexdocs

Most Liked

alisinabh

alisinabh

Ethers version 0.0.1 of Ethers is now published on hex.pm/packages/ethers.

This initial beta version is now shipped with the following functionalities.

  • Contract function generation during compile time from ABIs.
  • Ability to deploy a contract with its byte-code and constructor.
  • Common contract interfaces like ERC20, ERC721, ERC777 and ERC1155. (built-ins)
  • ENS and other name services resolve functionality and contracts.
  • Implicit type conversion and common type utility functions.

Feel free to give it a try and file your issues in github or your suggestions here.

alisinabh

alisinabh

Ethers 0.2.0 is out. This version adds new features which helps users to sign transactions locally, with JSON RPC endpoints or even bring their own signer implementation (e.g. using AWS KMS or proprietary HSM modules).

Please feel free to try it out and share your feedback.

Thanks!

alisinabh

alisinabh

By default on EVM chains when you issue a getLogs call you get logs from the last block only. You need to specify fromBlock and toBlock values. (Example below)

{:ok, current_block} = Ethers.current_block_number()
Ethers.get_logs!(
  filter, 
  fromBlock: current_block_number - 128, 
  toBlock: current_block_number
)

I can see there is a gap in the docs regarding these parameters. Will create an issue to track and fix this.

Thank you for introducing W3WS to me. Didn’t know about that!

alisinabh

alisinabh

Elixir Ethers 0.6.x Release

I’m thrilled to announce that Ethers 0.6 has been released.

This release contains long-awaited features such as raw Transaction decoding, native CCIP read support, improved ENS (Ethereum Name Service) support, and more.

Under the hood, it includes a refactored extensible Transaction module, which will make supporting more transaction types (e.g. EIP-4844) easier.

Version 0.6 has a few breaking changes, but for most typical use cases, it should not cause any major issues.

0.6.0 Changelog

Breaking Changes

  • Removed Ethers.Transaction struct and replaced with separate EIP-1559 and Legacy transaction structs for improved type safety
  • Deprecated Ethers.Transaction.from_map/1 - use Ethers.Transaction.from_rpc_map/1 instead for RPC response parsing
  • Deprecated Ethers.Utils.maybe_add_gas_limit/2 - gas limits should now be set explicitly
  • Changed input format requirements: All inputs to Ethers functions must use native types (e.g., integers) instead of hex strings encoded values
  • Removed auto-gas estimation from send_transaction calls
  • tx_type option in transaction overrides has been replaced with type, now requiring explicit struct modules (e.g. Ethers.Transaction.Eip1559, Ethers.Transaction.Legacy)
  • Moved Ethers.Transaction.calculate_y_parity_or_v/1 to Ethers.Transaction.Signed module
  • Deprecate Ethers.send/2 in favor of Ethers.send_transaction/2 for clarity and prevent collision with Kernel.send/2.

New features

  • Added EIP-3668 CCIP-Read support via Ethers.CcipRead module for off-chain data resolution
  • Extended NameService to handle off-chain and cross-chain name resolution using CCIP-Read protocol
  • Introduced Ethers.Transaction.Protocol behaviour for improved transaction handling
  • Added dedicated EIP-1559 and Legacy transaction struct types with validation
  • New address utilities: Ethers.Utils.decode_address/1 and Ethers.Utils.encode_address/1
  • Added Transaction.decode/1 to decode raw transactions

Enhancements

  • Improved error handling and reporting in Ethers.deploy/2
  • Enhanced NameService with ENSIP-10 wildcard resolution support
  • Use checksum addresses when decoding transactions
  • Add bang versions of Ethers top module functions which were missing

Please feel free to open issues, reply here or in Elixir’s #ethereum slack channel if you face any issues.

Where Next?

Popular in Libraries Top

wmnnd
Hi there, for my project DBLSQD, I needed a file storage solution that is a bit more flexible than Arc. Because I thought others might f...
New
Qqwy
While not as prevalent as in imperative languages, arrays (collections with efficient random element access) are still very useful in Eli...
New
vic
Expat is a tiny experiment I did for extracting patterns and being able to reuse them (compose and share patterns between elixir librarie...
New
woylie
I released Doggo, a collection of unstyled Phoenix components. Features Unstyled Phoenix components. Storybook that can be added to...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
josevalim
EDIT: since Ecto 3.0 final version is out, this post was amended to use the final versions in the instructions below. Hi everyone, We a...
New
woutdp
Hi! I wanted to introduce my latest project LiveSvelte. It allows you to render Svelte inside LiveView with end-to-end reactivity. It’s ...
New
riverrun
I’ve just released version 3 of Comeonin, a password hashing library. The following small changes have been made: changes to the NIF c...
New
RobertDober
Earmark is a pure-Elixir Markdown converter. It is intended to be used as a library (just call Earmark.as_html), but can also be used as...
239 11851 134
New
bluzky
You may know https://ui.shadcn.com/, a UI component library for React. I really love it’s design style and components. I’ve built some co...
381 12391 119
New

Other popular topics Top

stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1140 51847 244
New

Sub Categories:

We're in Beta

About us Mission Statement