Like pro.coinbase.com, but BEAM-flavoured
mix deps.get
iex -S mix phx.server
# or
mix phx.server
visit localhost:4000
The applications running behind the scenes are:
# pub-sub channel for broadcasting updating to all websocket clients
{Phoenix.PubSub, [name: CryptoWatch.PubSub, adapter: Phoenix.PubSub.PG2]},
# websocket client configured for the currency pair BTC-EUR
{CryptoWatch.CoinbasePro.WebsocketClient, ["BTC-EUR"]},
# orderbook genserver that maintains the order book updated
CryptoWatch.OrderBook,
# cache for orderbook and past matches
CryptoWatch.Cache,
# HTTP endpoint
CryptoWatchWeb.Endpoint
I am also using Phoenix Channels and Sockets for realtime updates to the client.
websockex for handling the messages coming from the wss://ws-feed.exchange.coinbase.com websocket feed.
The websocket client connects to two channels, one for getting updates to matches.
And one channel connection to get Level2 updates to the order book.
I added a CryptoWatch.CoinbasePro.ApiClient to contact the api.pro.coinbase.com endpoint to get the latest snapshot of the order book.
The updates are broadcasted to all clients via the websocket connection.
The client can choose a currency pair, a filter is set for all incoming updates and only matching ones are updated on the UI.
