defmodule Circlex.Api.Stablecoins do
@moduledoc """
API Client to the Stabecoins API.
Reference: https://developers.circle.com/reference/getstablecoins
"""
import Circlex.Api.Tooling
@doc ~S"""
Retrieves total circulating supply for supported stablecoins across all chains.
Reference: https://developers.circle.com/reference/getstablecoins
## Examples
iex> host = Circlex.Test.start_server()
iex> Circlex.Api.Stablecoins.get_stablecoins(host: host)
{
:ok,
[
%{
chains: [
%{amount: "1050479.52", chain: "ETH", update_date: "2022-07-18T01:29:29.950788Z"}
],
name: "Euro Coin",
symbol: "EUROC",
total_amount: "1050479.52"
},
%{
chains: [
%{
amount: "252665756155.330491",
chain: "ALGO",
update_date: "2022-07-18T01:29:30.526357Z"
},
%{
amount: "6323082119.02",
chain: "AVAX",
update_date: "2022-07-18T01:29:30.560738Z"
},
%{
amount: "309009160808.08",
chain: "ETH",
update_date: "2022-07-18T01:29:30.285124Z"
},
%{
amount: "2768511837.06",
chain: "FLOW",
update_date: "2022-07-18T01:29:30.461867Z"
},
%{
amount: "5522363273.65",
chain: "HBAR",
update_date: "2022-06-22T14:40:57.074283Z"
},
%{
amount: "22068229341.84",
chain: "SOL",
update_date: "2022-07-18T01:29:30.159087Z"
},
%{
amount: "1117948763.83",
chain: "TRX",
update_date: "2022-07-18T01:29:30.202047Z"
},
%{
amount: "3524683080.1912893",
chain: "XLM",
update_date: "2022-07-18T01:29:30.244743Z"
}
],
name: "USD Coin",
symbol: "USDC",
total_amount: "602999735379.0017803"
}
]
}
"""
def get_stablecoins(opts \\ []) do
with {:ok, stablecoins} <-
api_get("/v1/stablecoins", opts) do
{:ok,
Enum.map(stablecoins, fn %{
"name" => name,
"symbol" => symbol,
"chains" => chains,
"totalAmount" => total_amount
} ->
%{
name: name,
symbol: symbol,
chains:
Enum.map(chains, fn %{
"amount" => amount,
"chain" => chain,
"updateDate" => update_date
} ->
%{
amount: amount,
chain: chain,
update_date: update_date
}
end),
total_amount: total_amount
}
end)}
end
end
end