Skip to content
MSFTserver edited this page Jun 7, 2018 · 7 revisions

Code Examples to Utilize the API!


Javascript/Node.js

API

Get Block Winner Addresses, sometimes there are more than 1!

let needle = require('needle');
var previousHeight = 123456;
needle.get('https://ravencoin.network/api/txs?block=' + previousHeight, function(error, response) {
if (error || response.statusCode !== 200) {
    console.log('Explorer Api Not Available!')
} else {
    var winners = getWinner(response.body, previousHeight);
    console.log(winners);
}

function getWinner(array, previousHeight) {
    var winner = [];
    var winnerAddys = [];
    var count = 0;
    for (var i = 0; i < array.txs.length; i++) {
        var position = i++
        if (array.txs[position].hasOwnProperty('isCoinBase')){
            winner.push(array.txs[position]);
        }
    }
    for (var l = 0; l < winner[0].vout.length; l++) {
        var addys = winner[0].vout[l].scriptPubKey.addresses
        if (addys){
            winnerAddys.push(addys)
        }
    }
    var previousBlockWinner = winnerAddys.join('<br>');
    return previousBlockWinner
}

Socket.io

Get Pools that won blocks

let socketClient = require('socket.io-client');

exports.custom = ['socketBlocks'];

exports.socketBlocks = function(bot) {
  let eventToListenTo = 'raven/block';
  let room = 'raven';
  let socket = socketClient('https://ravencoin.network/');
  socket.on('connect', function() {
    socket.emit('subscribe', room);
  });
  socket.on(eventToListenTo, function(data) {
    var poolName = data.block.poolInfo.poolName;
    var poolUrl = data.block.poolInfo.url;
    var blockHeight = data.block.height;
    var blockHash = data.block.hash;
    let dt = new Date();
    let timestamp = moment()
      .tz('America/Los_Angeles')
      .format('MM-DD-YYYY hh:mm::ss a');
    if (poolName) {
      console.log('Won by ' +
          poolName +
          ' (' +
          poolUrl +
          ')\n (' +
          SocketUrl +
          '/block/' +
          blockHash +
          ')');
    }
  });
};

Get txs not including coinbase

let socketClient = require('socket.io-client');

exports.custom = ['socketBlocks'];

exports.socketBlocks = function(bot) {
  let eventToListenTo = 'raven/tx';
  let room = 'raven';
  let socket = socketClient('https://ravencoin.network/');
  socket.on('connect', function() {
    socket.emit('subscribe', room);
  });
  socket.on(eventToListenTo, function(data) {
    if (!data.isRBF){
      var vinAddresses = [];
      var voutAddresses = [];
      console.log(data.txid);
      console.log(data.valueOut);
      var vin = data.vin;
      var vout = data.vout;
      for (i=0; i < vin.length; i++) {
        vinAddy = new Object();
        vinAddy['address'] = vin[i].address
        vinAddresses.push(vinAddy);
      }
      console.log(countDuplicates(vinAddresses));
      for (l=0; l < vout.length; l++) {
        voutAddy = new Object();
        voutAddy['address'] = vout[l].address
        voutAddy['amount'] = vout[l].value
        voutAddresses.push(voutAddy);
      }
      console.log(voutAddresses);
    }
  });
  function countDuplicates(names){
    const result = [...names.reduce( (mp, o) => {
      if (!mp.has(o.address)) mp.set(o.address, Object.assign(o, { inputs: 0 }));
      mp.get(o.address).inputs++;
      return mp;
    }, new Map).values()];
    return result;
  }
};
Clone this wiki locally