Packages
kujira
0.1.45
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Elixir interfaces to Kujira dApps, for building indexers, APIs and bots
Current section
Files
Jump to
Current section
Files
README.md
# Kujira
Elixir interfaces to Kujira dApps, for building indexers, APIs and bots
**N.B. This is currently a work in progress, as we begin to componentise & open source the infrastructure that powers the Kujira dApps**
## Installation
Add `kujira` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:kujira, "~> 0.1.31"}
]
end
```
## Connect to a node
Create a `MyApp.Node` module, configure the application's pubsub and [CometBFT subscriptions](https://docs.cometbft.com/v0.38/core/subscription)
```elixir
defmodule MyApp.Node do
use Kujira.Node,
otp_app: :my_app,
pubsub: MyApp.PubSub,
subscriptions: ["tm.event='NewBlock'"]
end
```
Configure the Node connection `config/*`
```elixir
config :my_app, MyApp.Node,
host: "127.0.0.1",
port: 9090,
websocket: "wss://rpc-kujira.starsquid.io"
```
Add the Node process to your `application.ex`
```elixir
@impl true
def start(_type, _args) do
children = [
#...
MyApp.Node
]
# ...
end
```
## And start querying!
```elixir
defmodule MyAppWeb.PageController do
alias Cosmos.Base.Tendermint
use MyAppWeb, :controller
import Tendermint.V1beta1.Service.Stub
def index(conn, _params) do
{:ok, %{block: block}} =
get_latest_block(
MyApp.Node.channel(),
Tendermint.V1beta1.GetLatestBlockRequest.new()
)
conn |> assign(:block, block) |> render("index.html")
end
end
```
CometBFT Events can be subscribed to for realtime applications
```elixir
defmodule MyAppWeb.PageLive do
use MyAppWeb, :live_view
alias Cosmos.Base.Tendermint
import Tendermint.V1beta1.Service.Stub
alias Tendermint.V1beta1.GetLatestBlockRequest, as: LatestBlock
alias Tendermint.V1beta1.GetBlockByHeightRequest, as: Block
def mount(_params, _session, socket) do
MyApp.Node.subscribe("tendermint/event/NewBlock")
{:ok, %{block: block}} = get_latest_block(MyApp.Node.channel(), LatestBlock.new())
{:ok, assign(socket, :block, block)}
end
def handle_info(%{block: %{header: %{height: height}}}, socket) do
{:ok, %{block: block}} =
get_block_by_height(
MyApp.Node.channel(),
Block.new(height: String.to_integer(height))
)
{:noreply, assign(socket, :block, block)}
end
end
```
Docs can be found at <https://hexdocs.pm/kujira>.