Current section
Files
Jump to
Current section
Files
lib/sutra/provider/kupogmios/kupogmios.ex
defmodule Sutra.Provider.Kupogmios do
@moduledoc """
Kupo & Ogmios Provider implementation.
"""
@behaviour Sutra.Provider
alias Sutra.Cardano.Transaction
alias Sutra.Data.Cbor
alias Sutra.Provider.Kupogmios.Client
alias Sutra.SlotConfig
defp fetch_env(key), do: Application.get_env(:sutra, :kupogmios)[key]
defp clients do
Client.new(kupo_url: fetch_env(:kupo_url), ogmios_url: fetch_env(:ogmios_url))
end
@impl true
def network, do: fetch_env(:network)
@impl true
def utxos_at_addresses(addresses) do
clients()
|> Client.utxos_at_addresses(addresses)
end
@impl true
def utxos_at_tx_refs(refs) do
clients()
|> Client.utxos_at_tx_refs(refs)
end
@impl true
def datum_of(_datum_hashes) do
%{}
end
@impl true
def protocol_params do
clients()
|> Client.protocol_params()
end
@impl true
def slot_config do
case network() do
n when n in [:mainnet, :preprod, :preview] ->
SlotConfig.fetch_slot_config(n)
_ ->
fetch_env(:slot_config)
end
end
@impl true
def submit_tx(tx_cbor) when is_binary(tx_cbor) do
clients()
|> Client.submit_tx(tx_cbor)
end
def submit_tx(%Transaction{} = tx) do
Transaction.to_cbor(tx)
|> Cbor.encode_hex()
|> submit_tx()
end
@impl true
def tx_cbor(_) do
raise "tx_cbor callback not implemented in Sutra.Provider.Kupogmios"
end
end