Skip to content

dev-resources/dapp-oracle-examples

 
 

Repository files navigation

DAPP Oracle examples

Examples

Fetch the USD value of EOS using bancor.network API endpoint.

Configure

Add/Modify the .env file

DSP_ENDPOINT='https://dsp.eosn.io'
PRIVATE_KEY='<PRIVATE KEY>'

Javascript

(async () => {
    /**
     * URI for DSP Oracle request
     *
     * protocol = https+json
     * JSON params = data.USD
     * endpoint = api.bancor.network/0.1/currencies/rate?toCurrencyCode=EOS&fromCurrencyCodes=USD
     */
    const uri = 'https+json://data.USD/api.bancor.network/0.1/currencies/rate?toCurrencyCode=EOS&fromCurrencyCodes=USD'

    // EOSIO action
    const action: Action = {
        account: "oraclenation", // [oracle-dapp-service/oracleconsumer] smart contract
        name: "testrnd", // test oracle action
        authorization: [
            {actor: "oraclenation", permission: "ops"}
        ],
        data: {
            uri: Buffer.from(uri, 'utf8'),
        }
    }
    // Push EOSIO transaction
    await transact([action])

})().catch(e => console.error(e));

ConsumerOracle.cpp

#include "../dappservices/oracle.hpp"

#define DAPPSERVICES_ACTIONS() \
  XSIGNAL_DAPPSERVICE_ACTION \
  ORACLE_DAPPSERVICE_ACTIONS
#define DAPPSERVICE_ACTIONS_COMMANDS() \
  ORACLE_SVC_COMMANDS()

#define CONTRACT_NAME() oracleconsumer

CONTRACT_START()
 [[eosio::action]] void testget(std::vector<char>  uri, std::vector<char> expectedfield) {
    eosio::check(getURI(uri, [&]( auto& results ) {
      return results[0].result;
    }) == expectedfield, "wrong data");
  }

  [[eosio::action]] void testrnd(std::vector<char> uri) {
    getURI(uri, [&]( auto& results ) {
      return results[0].result;
    });
  }
CONTRACT_END((testget)(testrnd))

JSON Response

{
   "current_provider": "eosnationdsp",
   "data": "342e383437313933323332363536353139373630383938313832313631303839383738333135393730323039333637353632",
   "package": "oracle1",
   "size": 50,
   "uri": "4935383d3a2f2f2d313537343538393337393a2f2f68747470732b6a736f6e3a2f2f646174612e5553442f6170692e62616e636f722e6e6574776f726b2f302e312f63757272656e636965732f726174653f746f43757272656e6379436f64653d454f532666726f6d43757272656e6379436f6465733d555344"
}

Parse JSON

> Buffer.from("342e383437313933323332363536353139373630383938313832313631303839383738333135393730323039333637353632","hex").toString()
'4.847193232656519760898182161089878315970209367562'

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 74.2%
  • C++ 25.8%