Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gregors/fast_eip_55

Fast EIP-55 checksum library for Elixir
https://github.com/gregors/fast_eip_55

eip55 elixir hex

Last synced: 19 days ago
JSON representation

Fast EIP-55 checksum library for Elixir

Awesome Lists containing this project

README

        

# Fast EIP-55

Encode and validate Ethereum addresses fast!

FastEIP55 is a derivative work of unnawut's [EIP-55](https://github.com/unnawut/eip_55) elixir implementation of the [spec](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md).

The original version uses a pure elixir version. This version makes 2 substantial changes.

* replaces pure slow elixir keccak version with the much faster rust-powered one [Ex_Keccak](https://github.com/tzumby/ex_keccak)
* replaces easy-to-read logic, with harder-to-read optimized logic

I've kept the library interface the same, and have kept the original tests. I'm taking some liberty with the `to_upper` logic and might tweak things a bit if I uncover issues. I've also have some additional performance tweaks that I'd like to experiment with. Many thanks to unnawut for the original implemenation and tests!

## Installation

The package can be installed by adding `:fast_eip_55` to your list of dependencies in `mix.exs`:

```elixir
defp deps do
[
{:fast_eip_55, "~> 0.3"}
]
end
```

## Usage

Encoding:

```elixir
iex> alias FastEIP55, as: EIP55
iex> EIP55.encode("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed")
{:ok, "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"}

iex> EIP55.encode(<<90, 174, 182, 5, 63, 62, 148, 201, 185, 160,
...> 159, 51, 102, 148, 53, 231, 239, 27, 234, 237>>)
{:ok, "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"}
```

Validation:

```elixir
iex> alias FastEIP55, as: EIP55
iex> EIP55.valid?("0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed")
true

iex> EIP55.valid?("0x5AAEB6053f3e94c9b9a09f33669435e7ef1beaed")
false
```

Full documentation can be found at [https://hexdocs.pm/fast_eip_55](https://hexdocs.pm/fast_eip_55).

## Performance

```
Benchmarking :eip55...
Benchmarking :fast_eip55...

Name ips average deviation median 99th %
:fast_eip55 346.97 K 2.88 μs ±641.72% 2.99 μs 4.99 μs
:eip55 2.79 K 357.92 μs ±7.01% 352.99 μs 448.99 μs

Comparison:
:fast_eip55 346.97 K
:eip55 2.79 K - 124.19x slower +355.04 μs

```

## License

FastEIP-55 is released under the MIT License. See [LICENSE](./LICENSE) for further details.