DODOEX / oracle-adapter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Chainlink oracle external adaptor

External Adaptor for Chainlink which aggregates prices of crypto assets from multiple exchanges based on a weighted average of their volume.

Currently Supported Exchanges:

  • Binance
  • Bitfinex
  • Bitstamp (highly rate limited)
  • Bittrex
  • Coinall
  • Coinbase Pro
  • HitBTC
  • Huobi Pro
  • Kraken
  • Gemini
  • ZB

Setup Instructions

Local Install

Make sure Golang is installed.

Build:

make build

Then run the adaptor:

./oracle-adapter -p <port> -t <tickerInterval>
Arguments
Char Default Usage
p 8080 Port number to serve
t 1m0s Ticker interval for the adaptor to refresh supported trading pairs, suggested units: s, m, h

Docker

To run the container:

docker run -it -p 8080:8080 -e PORT=8080 DODOEX/oracle-adapter

Container also supports passing in CLI arguments.

Usage

To call the API, you need to send a POST request to http://localhost:<port>/price with the request body being of the ChainLink RunResult type.

For example:

curl -X POST -H 'Content-Type: application/json' -d '{ "jobRunId": "1234", "data": { "base": "BTC", "quote": "USD" }}' http://localhost:8080/price

Should return something similar to:

{
    "jobRunId": "1234",
    "data": {
        "base": "BTC",
        "quote": "USD",
        "id": "BTC-USD",
        "result": 3836.4042305857843,
        "price": "3836.4042305857843",
        "volume": "131747894.87525243",
        "usdPrice": "3836.4042305857843",
        "exchanges": [
            "HitBTC",
            "Bitfinex",
            "Coinbase",
            "COSS"
        ],
        "warnings": null
    },
    "status": "",
    "error": null,
    "pending": false
}

Or:

curl -X POST -H 'Content-Type: application/json' -d '{ "jobRunId": "1234", "data": { "base": "LINK", "quote": "ETH" }}' http://localhost:8080/price
{
    "jobRunId": "1234",
    "data": {
        "base": "LINK",
        "quote": "ETH",
        "id": "LINK-ETH",
        "result": 0.0031786459052877327,
        "price": "0.0031786459052877327",
        "volume": "797.6642187877999",
        "usdPrice": "0.43956635389465454",
        "exchanges": [
            "Binance",
            "Huobi",
            "COSS"
        ],
        "warnings": null
    },
    "status": "",
    "error": null,
    "pending": false
}

ChainLink Node Setup

To integrate this adaptor with your node, follow the official documentation: https://docs.chain.link/docs/node-operators

Solidity Usage

To use this adaptor on-chain, you can create the following Chainlink request:

Chainlink.Request memory req = buildChainlinkRequest(jobId, this, this.fulfill.selector);
req.add("base", "LINK");
req.add("quote", "BTC");
req.add("copyPath", "price");
req.addInt("times", 100000000);

Allowing you to change base and quote to any trading pair.

About

License:MIT License


Languages

Language:Go 98.5%Language:Dockerfile 0.9%Language:Makefile 0.7%