README.md

# 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](https://hex.pm/docs/publish), the package can be installed as:

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

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

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

    ```elixir
    def application do
      [applications: [:graphene_client_ex]]
    end
    ```


## Example

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

```elixir
    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 `Graphene.call`. 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.