# Elixir client for Bitshares/Graphene 2.0 websocket API

Provides an interface to Bitshares/ Graphene 2.0 JSONRPC protocol. Graphene_client_ex is a supervised application, so don't forget to add it to applications in mix.exs

## Installation

If [available in Hex](, the package can be installed as:

  1. Add `graphene_client_ex` to your list of dependencies in `mix.exs`:

    def deps do
      [{:graphene_client_ex, "~> 0.4.0"}]

  2. Ensure `graphene_client_ex` is started before your application:

    def application do
      [applications: [:graphene_client_ex]]

## Example

First, add a websockets url for the graphene daemon, for example, `wss://` to the config.

    config :graphene_client_ex,
      url: "GRAPHENE_URL",
      activate_stage_sup: true

If you want to activate GenStage blocks producer, use `activate_stage_sup: true` in the config file.

# GenStage

It's easy to subscribe to new blockchain events with consumers that implement GenStage specification for handling and exchanging events among Elixir/Erlang processes.   

If `activate_stage_sup` is enabled, following GenStage processes are started and registered:

* Graphene.Stage.Blocks.Producer which, perhaps unsurprisingly, produces new block events
* Graphene.Stage.Ops.ConsumerProducer [planned]
* Graphene.Stage.TransformedOps.ConsumerProducer [planned]

The main module function is ``. It will block the calling process and return a success tuple with a "result" data from the JSONRPC call response. JSONRPC call ids are handled automatically.