Packages
stellar_sdk
0.9.2
0.23.0
0.22.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Elixir SDK for the Stellar network.
Current section
Files
Jump to
Current section
Files
lib/horizon/order_books.ex
defmodule Stellar.Horizon.OrderBooks do
@moduledoc """
Exposes functions to interact with OrderBooks in Horizon.
You can:
* Retrieve an order book’s bids and asks
Horizon API reference: https://developers.stellar.org/api/aggregations/order-books/object/
"""
alias Stellar.Horizon.{Error, OrderBook, Request, RequestParams}
@type args :: Keyword.t()
@type resource :: OrderBook.t()
@type response :: {:ok, resource()} | {:error, Error.t()}
@endpoint "order_book"
@doc """
Retrieve order books
## Parameters
* `selling_asset`: :native or [code: `selling_asset_code`, issuer: `selling_asset_issuer` ]
* `buying_asset`: :native or [code: `buying_asset_code`, issuer: `buying_asset_issuer` ]
## Options
* `limit`: The maximum number of records returned
## Examples
# Retrieve order books
iex> OrderBooks.retrieve(selling_asset: :native, buying_asset: :native)
{:ok, %OrderBook{bids: [%Price{}...], asks: [%Price{}...], ...}
# Retrieve with more options
iex> OrderBooks.retrieve(selling_asset: :native,
buying_asset: [
code: "BB1",
issuer: "GD5J6HLF5666X4AZLTFTXLY46J5SW7EXRKBLEYPJP33S33MXZGV6CWFN"
],
limit: 2
)
{:ok, %OrderBook{bids: [%Price{}...], asks: [%Price{}...], ...}
"""
@spec retrieve(args :: args()) :: response()
def retrieve(args \\ []) do
selling_asset = RequestParams.build_assets_params(args, :selling_asset)
buying_asset = RequestParams.build_assets_params(args, :buying_asset)
params =
args
|> Keyword.take([:limit])
|> Keyword.merge(selling_asset)
|> Keyword.merge(buying_asset)
:get
|> Request.new(@endpoint)
|> Request.add_query(params, extra_params: allowed_query_options())
|> Request.perform()
|> Request.results(as: OrderBook)
end
@spec allowed_query_options() :: list()
defp allowed_query_options do
[
:selling_asset_type,
:buying_asset_type,
:selling_asset_issuer,
:selling_asset_code,
:buying_asset_issuer,
:buying_asset_code
]
end
end