Current section
Files
Jump to
Current section
Files
fireblocks_contract
README.md
README.md
# Fireblocks Contract
An Elixir library for reading Solidity ABI JSON files and turning them into
Elixir modules with proper documentation on each method, built on top of the
[Fireblocks SDK](https://github.com/csokun/fireblocks_sdk).
## Installation
Add `fireblocks_contract` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:fireblocks_contract, "~> 0.1"},
{:fireblocks_sdk, "~> 0.2"}
]
end
```
## Usage
### 1. Define a contract module
Point `use Fireblocks.Evm.Contract` at your ABI file:
```elixir
defmodule MyApp.Contracts.ERC20 do
use Fireblocks.Evm.Contract,
abi_file: "priv/abi/erc20.json"
end
```
You can also supply a default deployed address and a default Fireblocks base
asset ID so you don't have to repeat them on every call:
```elixir
defmodule MyApp.Contracts.ERC20 do
use Fireblocks.Evm.Contract,
abi_file: "priv/abi/erc20.json",
default_address: "0xA0b8...FeAb",
default_base_asset_id: "ETH"
end
```
### 2. Reading contract state
Every ABI function becomes a snake\_cased Elixir function that returns an
`%Fireblocks.Evm.Contract.Call{}` struct. Pipe it into `Fireblocks.Evm.Contract.read/2`:
```elixir
# Read the token name
MyApp.Contracts.ERC20.name()
|> Fireblocks.Evm.Contract.read(
baseAssetId: "ETH",
contractAddress: "0xA0b8...FeAb"
)
# {:ok, ["My Token"]}
# Read a token balance
MyApp.Contracts.ERC20.balance_of("0x...")
|> Fireblocks.Evm.Contract.read(
baseAssetId: "ETH",
contractAddress: "0xA0b8...FeAb"
)
# {:ok, [raw_balance]}
```
### 3. Writing contract state
Use `Fireblocks.Evm.Contract.write/2` for state-changing functions. The call is
executed as a Fireblocks on-chain transaction and returns a transaction ID:
```elixir
MyApp.Contracts.ERC20.transfer("0xDest...", 1_000_000)
|> Fireblocks.Evm.Contract.write(
baseAssetId: "ETH",
contractAddress: "0xA0b8...FeAb",
vaultAccountId: "1",
feeLevel: :medium,
note: "monthly distribution",
useGasless: false
)
# {:ok, %{"txId" => "4514c3e5-6520-400d-8980-1a1b940a0cb0"}}
```
## License
MIT