defmodule Stellar.Network do
@moduledoc """
Utility that handles Stellar's network configuration.
"""
alias StellarBase.XDR.Hash
@passphrases [
public: "Public Global Stellar Network ; September 2015",
test: "Test SDF Network ; September 2015",
future: "Test SDF Future Network ; October 2022",
standalone: "Standalone Network ; February 2017"
]
@horizon_urls [
public: "https://horizon.stellar.org",
test: "https://horizon-testnet.stellar.org",
future: "https://horizon-futurenet.stellar.org",
local: "http://localhost:8000"
]
@type passphrase :: String.t()
@type url :: String.t()
@type hash :: String.t()
@spec public_passphrase() :: passphrase()
def public_passphrase, do: @passphrases[:public]
@spec testnet_passphrase() :: passphrase()
def testnet_passphrase, do: @passphrases[:test]
@spec futurenet_passphrase() :: passphrase()
def futurenet_passphrase, do: @passphrases[:future]
@spec standalone_passphrase() :: passphrase()
def standalone_passphrase, do: @passphrases[:standalone]
@spec public_horizon_url() :: url()
def public_horizon_url, do: @horizon_urls[:public]
@spec testnet_horizon_url() :: url()
def testnet_horizon_url, do: @horizon_urls[:test]
@spec futurenet_horizon_url() :: url()
def futurenet_horizon_url, do: @horizon_urls[:future]
@spec local_horizon_url() :: url()
def local_horizon_url, do: @horizon_urls[:local]
@spec network_id(passphrase :: passphrase()) :: hash()
def network_id(passphrase), do: :crypto.hash(:sha256, passphrase)
@spec network_id_xdr(passphrase :: passphrase()) :: Hash.t()
def network_id_xdr(passphrase) do
passphrase
|> network_id()
|> Hash.new()
end
end