Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/gregors/fast_eip_55
- Owner: gregors
- License: other
- Created: 2022-01-29T20:19:52.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-10-24T15:55:15.000Z (about 2 years ago)
- Last Synced: 2024-11-28T10:45:26.737Z (about 1 month ago)
- Topics: eip55, elixir, hex
- Language: Elixir
- Homepage:
- Size: 13.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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 logicI'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")
trueiex> 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 μsComparison:
: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.