# The Earendil Cli
Cli app written in Elixir to ease the interaction with Elrond Smart Contracts
## Requirements
* `erdpy` - installed and added to the path
* `erlang` - installed and added to the path
* `elixir` - installed and added to the path
## Running
* Clone this repository
* Run `mix deps.get`
* Run `mix earendil run <path_to_steps_json>`
## Steps
The steps that are to be run are to be defined inside a json file. Here's an example of how one such file might look like:
```json
{
"config": {
"pem": "~/devnet-wallet.pem",
"proxy": "https://testnet-api.elrond.com",
"chain": "T"
},
"steps": [
{
"type": "deploy",
"options": {
"path": "~/src/nerds/carpathian/raffle",
"arguments": "0x0000000000000000000100000000000000000000000000000000000010ffffff",
"gas_limit": 600000000,
"delay": 10000
}
},
{
"type": "transaction",
"options": {
"gas_limit": 20000000,
"function": "pause",
"delay": 10000
}
},
{
"type": "transaction",
"options": {
"arguments": "0x623a315b",
"gas_limit": 20000000,
"function": "setNewDeadline",
"delay": 10000
}
},
{
"type": "transaction",
"options": {
"gas_limit": 20000000,
"function": "unpause",
"delay": 10000
}
},
{
"type": "query",
"options": {
"function": "getWinners"
}
},
{
"type": "test",
"options": {
"path": "~/test-module.ex"
}
}
]
}
```
## Tests
Using a `test` step allows writing custom tests using [ExUnit]("https://hexdocs.pm/ex_unit/1.12/ExUnit.html"). Getting the context can be done using the `Context.get()` function, with the `Context` module being injected at runtime. An example test could look like this:
```elixir
defmodule TestModule do
use ExUnit.Case
test "Proxy is correct" do
assert Context.get()[:proxy] == "https://testnet-api.elrond.com"
end
test "Chain id is correct" do
assert Context.get()[:chain] == "T"
end
end
```