Packages
kujira
0.1.67
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
lib/kujira/token.ex
defmodule Kujira.Token do
@moduledoc """
Metadata for tokens on the Kujira Blockchain
"""
use Memoize
defstruct [:denom, :trace, :meta]
@type t :: %__MODULE__{
denom: String.t(),
trace: __MODULE__.Trace.t() | nil,
meta: __MODULE__.Meta.t()
}
@doc """
Fetches token information for a specific denom.
Will fetch and cache the trace from the chain directly, then query and cache the chain-registry for
all other token information
"""
@spec from_denom(GRPC.Channel.t(), String.t()) ::
{:ok, Kujira.Token.t()} | {:error, GRPC.RPCError.t()}
defmemo from_denom(channel, %{"native" => denom}) do
from_denom(channel, denom)
end
defmemo from_denom(channel, "ibc/" <> hash = denom) do
Memoize.Cache.get_or_run(
{__MODULE__, :from_denom, [denom]},
fn ->
with {:ok, trace} <- __MODULE__.Trace.from_hash(channel, hash),
token = %__MODULE__{denom: "ibc/#{hash}", trace: trace},
{:ok, meta} <- __MODULE__.Meta.from_token(channel, token) do
{:ok, %__MODULE__{token | meta: meta}}
end
end
)
end
defmemo from_denom(channel, denom) do
Memoize.Cache.get_or_run(
{__MODULE__, :from_denom, [denom]},
fn ->
token = %__MODULE__{denom: denom, trace: nil}
with {:ok, meta} <- __MODULE__.Meta.from_token(channel, token) do
{:ok, %__MODULE__{token | meta: meta}}
else
err -> err
end
end
)
end
end