Code Monkey home page Code Monkey logo

insight-api's Introduction

Insight-API

Build Status NPM version API stability

A Dash blockchain REST and WebSocket API Service

This is a backend-only service. If you're looking for the web frontend application, take a look at https://github.com/dashevo/insight-ui.

Table of Content

Install

npm install -g @dashevo/dashcore-node
dashcore-node create mynode
cd mynode
dashcore-node install @dashevo/insight-api
dashcore-node start  # to also start the service

The API endpoints will be available by default at: http://localhost:3001/insight-api/

Prerequisites

Note: You can use an existing Dash data directory, however txindex, addressindex, timestampindex and spentindex need to be enabled in dash.conf, as well as a few other additional fields.

Query Rate Limit

To protect the server, insight-api has a built-in query rate limiter. It can be configurable in dashcore-node.json with:

"servicesConfig": {
  "insight-api": {
    "rateLimiterOptions": {
      "whitelist": ["::ffff:127.0.0.1"]
    }
  }
}

With all the configuration options available: https://github.com/dashevo/insight-api/blob/master/lib/ratelimiter.js#L10-17

Or disabled entirely with:

"servicesConfig": {
  "insight-api": {
    "disableRateLimiter": true
  }
}

Usage

Follow the install instructions above, and ...

dashcore-node start

This will start the Insight-API listening on default port 3001.

API HTTP Endpoints

Block

  /insight-api/block/[:hash]
  /insight-api/block/0000000006e7b38e8ab2d351239019c01de9a148b5baef58cfe52dfd9917cedc

Block Index

Get block hash by height

  /insight-api/block-index/[:height]
  /insight-api/block-index/0

This would return:

{
  "blockHash":"00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c"
}

which is the hash of the TestNet Genesis block (0 height)

Raw Block

  /insight-api/rawblock/[:blockHash]

This would return:

{
  "rawblock":"blockhexstring..."
}

Block Summaries

Get block summaries by date:

  /insight-api/blocks?limit=3&blockDate=2017-04-22

Example response:

{
  "blocks": [
    {
      "height": 188928,
      "size": 312,
      "hash": "00000000ee9a976cf459240c2add1147137ca6126b7906fa13ce3d80b5cadcc7",
      "time": 1492905418,
      "txlength": 1,
      "poolInfo": {
        "poolName": "BTCC Pool",
        "url": "https://pool.btcc.com/"
      }
    },{...},{...}
  ],
  "length": 3,
  "pagination": {
    "next":"2017-04-23",
    "prev":"2017-04-21",
    "currentTs":1492905599,
    "current":"2017-04-22",
    "isToday":false,
    "more":true,
    "moreTs":1492905600
  }
}

Transaction

  /insight-api/tx/[:txid]
  /insight-api/tx/ebdca263fe1c75c8609ce8fe3d82a320a0b3ca840f4df995883f5dab1b9ff8d9

  /insight-api/rawtx/[:rawid]
  /insight-api/rawtx/ebdca263fe1c75c8609ce8fe3d82a320a0b3ca840f4df995883f5dab1b9ff8d9

Address

  /insight-api/addr/[:addr][?noTxList=1][&from=&to=]
  /insight-api/addr/ybi3gej7Ea1MysEYLR7UMs3rMuLJH5aVsW?noTxList=1
  /insight-api/addr/yPv7h2i8v3dJjfSH4L3x91JSJszjdbsJJA?from=1000&to=2000

  /insight-api/addrs/[:addrs][?noTxList=1][&from=&to=]
  /insight-api/addrs/ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx
  /insight-api/addrs/ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx?from=1000&to=2000

Address Properties

  /insight-api/addr/[:addr]/balance
  /insight-api/addr/[:addr]/totalReceived
  /insight-api/addr/[:addr]/totalSent
  /insight-api/addr/[:addr]/unconfirmedBalance

  /insight-api/addrs/[:addrs]/balance
  /insight-api/addrs/[:addrs]/totalReceived
  /insight-api/addrs/[:addrs]/totalSent
  /insight-api/addrs/[:addrs]/unconfirmedBalance

The response contains the value in Satoshis.

Unspent Outputs

  /insight-api/addr/[:addr]/utxo

Sample return:

[
  {
    "address":"ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz",
    "txid":"05d70bc1c4cf1c3afefc3250480d733b5666b19cb1f629901ded82cb2d6263d1",
    "vout":0,
    "scriptPubKey":"76a914e22dc8acf5bb5624f4beef22fb2238f8479e183f88ac",
    "amount":0.01194595,
    "satoshis":1194595,
    "height":142204,
    "confirmations":124317
  },{...}
]

Unspent Outputs for Multiple Addresses

GET method:

  /insight-api/addrs/[:addrs]/utxo
  /insight-api/addrs/ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx/utxo

POST method:

  /insight-api/addrs/utxo

POST params:

addrs: ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx

InstantSend Transactions

If a Transaction Lock has been observed by Insight API a 'txlock' value of true will be included in the Transaction Object.

Sample output:

{
	"txid": "b7ef92d1dce458276f1189e06bf532eff78f9c504101d3d4c0dfdcd9ebbf3879",
	"version": 1,
	"locktime": 133366,
	"vin": [{ ... }],
	"vout": [{ ... }],
	"blockhash": "0000001ab9a138339fe4505a299525ace8cda3b9bcb258a2e5d93ed7a320bf21",
	"blockheight": 133367,
	"confirmations": 37,
	"time": 1483985187,
	"blocktime": 1483985187,
	"valueOut": 8.998,
	"size": 226,
	"valueIn": 8.999,
	"fees": 0.001,
	"txlock": true
}

Transactions by Block

  /insight-api/txs/?block=HASH
  /insight-api/txs/?block=000000000814dd7cf470bd835334ea6624ebf0291ea857a5ab37c65592726375

Transactions by Address

  /insight-api/txs/?address=ADDR
  /insight-api/txs/?address=yWFfdp9nLUjy1kJczFhRuBMUjtTkTTiyMv

Transactions for Multiple Addresses

GET method:

  /insight-api/addrs/[:addrs]/txs[?from=&to=]
  /insight-api/addrs/ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx/txs?from=0&to=20

POST method:

  /insight-api/addrs/txs

POST params:

addrs: ygwNQgE5f15Ygopbs2KPRYMS4TcffqBpsz,ygw5yCtVkx3hREke4L8qDqQtnNoAiPKTSx
from (optional): 0
to (optional): 20
noAsm (optional): 1 (will omit script asm from results)
noScriptSig (optional): 1 (will omit the scriptSig from all inputs)
noSpent (option): 1 (will omit spent information per output)

Sample output:

{ totalItems: 100,
  from: 0,
  to: 20,
  items:
    [ { txid: '3e81723d069b12983b2ef694c9782d32fca26cc978de744acbc32c3d3496e915',
       version: 1,
       locktime: 0,
       vin: [Object],
       vout: [Object],
       blockhash: '00000000011a135e5277f5493c52c66829792392632b8b65429cf07ad3c47a6c',
       confirmations: 109367,
       time: 1393659685,
       blocktime: 1393659685,
       valueOut: 0.3453,
       size: 225,
       firstSeenTs: undefined,
       valueIn: 0.3454,
       fees: 0.0001,
       txlock: false },
      { ... },
      { ... },
      ...
      { ... }
    ]
}

Note: if pagination params are not specified, the result is an array of transactions.

Transaction Broadcasting

Standard transaction

POST method:

  /insight-api/tx/send

POST params:

  rawtx: "signed transaction as hex string"

  eg

  rawtx: 01000000017b1eabe0209b1fe794124575ef807057c77ada2138ae4fa8d6c4de0398a14f3f00000000494830450221008949f0cb400094ad2b5eb399d59d01c14d73d8fe6e96df1a7150deb388ab8935022079656090d7f6bac4c9a94e0aad311a4268e082a725f8aeae0573fb12ff866a5f01ffffffff01f0ca052a010000001976a914cbc20a7664f2f69e5355aa427045bc15e7c6c77288ac00000000

POST response:

  {
      txid: [:txid]
  }

  eg

  {
      txid: "c7736a0a0046d5a8cc61c8c3c2821d4d7517f5de2bc66a966011aaa79965ffba"
  }

InstantSend transaction

Conditions :

  • Every inputs should have 6 confirmations.
  • Fee are 0.001 per input.
  • Transaction value should be below SPORK_5_INSTANTSEND_MAX_VALUE (see spork route)

POST method:

  /insight-api/tx/sendix

POST params:

  rawtx: "signed transaction as hex string"

POST response:

  {
      txid: [:txid]
  }

Sporks List

GET method:

  /insight-api/sporks

Sample output:

{
  "sporks": {
    "SPORK_2_INSTANTSEND_ENABLED":0,
    "SPORK_3_INSTANTSEND_BLOCK_FILTERING":0,
    "SPORK_5_INSTANTSEND_MAX_VALUE":2000,
    "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT":0,
    "SPORK_9_SUPERBLOCKS_ENABLED":0,
    "SPORK_10_MASTERNODE_PAY_UPDATED_NODES":0,
    "SPORK_12_RECONSIDER_BLOCKS":0,
    "SPORK_13_OLD_SUPERBLOCK_FLAG":4070908800,
    "SPORK_14_REQUIRE_SENTINEL_FLAG":4070908800
  }
}

Proposals Informations

GET method:

  /insight-api/gobject/info

Sample output:

{
  "result":{
    "governanceminquorum":1,
    "masternodewatchdogmaxseconds":7200,
    "proposalfee":5,
    "superblockcycle":24,
    "lastsuperblock":79800,
    "nextsuperblock":79824,
    "maxgovobjdatasize":16384
  },
  "error":null,
  "id":68537
}

Proposals Count

GET method:

  /insight-api/gobject/count

Sample output:

{
  "result":"Governance Objects: 47 (Proposals: 7, Triggers: 40, Watchdogs: 0/0, Other: 0; Erased: 0), Votes: 1883",
  "error":null,
  "id":47025
}

Budget Proposal List

GET method:

  /insight-api/gobject/list/proposal (or /insight-api/gobject/list)

Sample output:

[
  {
    Hash: 'b6af3e70c686f660541a77bc035df2e5e46841020699ce3ec8fad786f7d1aa35',
    DataObject: {
      end_epoch: 1513555200,
      name: 'flare03',
      payment_address: 'yViyoK3NwfH5GXRo7e4DEYkzzhBjDNQaQG',
      payment_amount: 5,
      start_epoch: 1482105600,
      type: 1,
      url: 'https://www.dash.org'
    },
    AbsoluteYesCount: 40,
    YesCount: 40,
    NoCount: 0,
    AbstainCount: 0
  }
]

Budget Triggers List

GET method:

  /insight-api/gobject/list/trigger

Sample output:

[
  {
    "Hash":"fa2a7505c52438b2ca3d14def1c2cdcb59d7ccca417920182f04fcb9be968f00",
    "DataObject":{"type":2},
    "AbsoluteYesCount":53,
    "YesCount":53,
    "NoCount":0,
    "AbstainCount":0
  }
]

Budget Proposal Detail

GET method:

  /insight-api/gobject/get/[:hash]
  /insight-api/gobject/get/b6af3e70c686f660541a77bc035df2e5e46841020699ce3ec8fad786f7d1aa35

Sample output:

    [ { Hash: 'b6af3e70c686f660541a77bc035df2e5e46841020699ce3ec8fad786f7d1aa35',
        CollateralHash: '24a71d8f221659717560365d2914bc7a00f82ffb8f8c68e7fffce5f35aa23b90',
       	DataHex: '5b5b2270726f706f73616c222c7b22656e645f65706f6368223a313531333535353230302c226e616d65223a22666c6172653033222c227061796d656e745f61646472657373223a22795669796f4b334e776648354758526f3765344445596b7a7a68426a444e51615147222c227061796d656e745f616d6f756e74223a352c2273746172745f65706f6368223a313438323130353630302c2274797065223a312c2275726c223a2268747470733a2f2f64617368646f742e696f2f702f666c6172653033227d5d5d',
        DataObject: {
          end_epoch: 1513555200,
          name: 'flare03',
          payment_address: 'yViyoK3NwfH5GXRo7e4DEYkzzhBjDNQaQG',
          payment_amount: 5,
          start_epoch: 1482105600,
          type: 1,
          url: 'https://www.dash.org'
        },
        CreationTime: 1482223714,
        FundingResult: {
            AbsoluteYesCount: 40,
            YesCount: 40,
            NoCount: 0,
            AbstainCount: 0
        },
        ValidResult: {
            AbsoluteYesCount: 74,
            YesCount: 74,
            NoCount: 0,
            AbstainCount: 0
        },
        DeleteResult: {
            AbsoluteYesCount: 0,
            YesCount: 0,
            NoCount: 0,
            AbstainCount: 0
        },
        EndorsedResult: {
            AbsoluteYesCount: 0,
            YesCount: 0,
            NoCount: 0,
            AbstainCount: 0
        } } ]

Proposal Check

GET method:

  /insight-api/gobject/check/[:hexData]
  /insight-api/gobject/check/5b5b2270726f706f736[..]

Sample output:

    {"Object status":"OK"}

Proposal Deserialization

GET method:

  /insight-api/gobject/deserialize/[:hexData]
  /insight-api/gobject/deserialize/5b5b2270726f706f736[..]

Sample output:

{
  "result":"[[\"proposal\",{\"end_epoch\":1519848619,\"name\":\"ghijklmnopqrstuvwxyz01234567891519097947\",\"payment_address\":\"yik5HAgVAgjH1oZKjcDfvcf22bwBNbSYzB\",\"payment_amount\":10,\"start_epoch\":1519097947,\"type\":1,\"url\":\"https://www.dashcentral.org/p/test_proposal_1519097947\"}]]",
  "error":null,
  "id":78637
}

Proposal Current Votes

GET method:

  /insight-api/gobject/votes/current/[:hash]
  /insight-api/gobject/votes/current/fbda8cdc1f48917f53b7d63fbce81c85d6dedd3d0e476e979926dfd154b84034

Sample output:

{
  "result":"[[\"proposal\",{\"end_epoch\":1519848619,\"name\":\"ghijklmnopqrstuvwxyz01234567891519097947\",\"payment_address\":\"yik5HAgVAgjH1oZKjcDfvcf22bwBNbSYzB\",\"payment_amount\":10,\"start_epoch\":1519097947,\"type\":1,\"url\":\"https://www.dashcentral.org/p/test_proposal_1519097947\"}]]",
  "error":null,
  "id":78637
}

Governance Budget

GET method:

  /insight-api/governance/budget/[:blockIndex]
  /insight-api/governance/budget/79872

Sample output:

{
    "result":"60.00",
    "error":null,
    "id":75619
}

Submit Proposal

POST method:

  /insight-api/gobject/submit

Example input:

{
  "parentHash":"abc",
  "revision":1,
  "time":10009,
  "dataHex":"abc",
  "feeTxId":"abc"
}

Sample output:

{
    "result":"60.00",
    "error":null,
    "id":75619
}

Masternodes List

  deprecated until full support for v0.13 deterministic masternode list

Validate Masternode

  deprecated until full support for v0.13 deterministic masternode list

Historic Blockchain Data Sync Status

  /insight-api/sync

Live Network P2P Data Sync Status

  /insight-api/peer

Status of the Dash Network

  /insight-api/status?q=xxx

Where "xxx" can be:

  • getInfo
  • getDifficulty
  • getBestBlockHash
  • getBestChainLock
  • getLastBlockHash

Utility Methods

  /insight-api/utils/estimatefee[?nbBlocks=2]

Web Socket API

The web socket API is served using socket.io.

The following are the events published by Insight:

tx: new transaction received from network, txlock boolean is set true if a matching txlock event has been observed. This event is published in the 'inv' room. Data will be a app/models/Transaction object.

Sample output:

{
  "txid":"00c1b1acb310b87085c7deaaeba478cef5dc9519fab87a4d943ecbb39bd5b053",
  "txlock": false,
  "processed":false
  ...
}

txlock: InstantSend transaction received from network, this event is published alongside the 'tx' event when a transaction lock event occurs. Data will be a app/models/Transaction object. Sample output:

{
  "txid":"00c1b1acb310b87085c7deaaeba478cef5dc9519fab87a4d943ecbb39bd5b053",
  "processed":false
  ...
}

block: new block received from network. This event is published in the inv room. Data will be a app/models/Block object. Sample output:

{
  "hash":"000000004a3d187c430cd6a5e988aca3b19e1f1d1727a50dead6c8ac26899b96",
  "time":1389789343,
  ...
}

<dashAddress>: new transaction concerning received from network. This event is published in the <dashAddress> room.

status: every 1% increment on the sync task, this event will be triggered. This event is published in the sync room.

Sample output:

{
  blocksToSync: 164141,
  syncedBlocks: 475,
  upToExisting: true,
  scanningBackward: true,
  isEndGenesis: true,
  end: "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943",
  isStartGenesis: false,
  start: "000000009f929800556a8f3cfdbe57c187f2f679e351b12f7011bfc276c41b6d"
}

Example Usage

The following html page connects to the socket.io insight API and listens for new transactions.

<html>
<body>
  <script src="http://<insight-server>:<port>/socket.io/socket.io.js"></script>
  <script>
    eventToListenTo = 'tx'
    room = 'inv'

    var socket = io("http://<insight-server>:<port>/");
    socket.on('connect', function() {
      // Join the room.
      socket.emit('subscribe', room);
    })
    socket.on(eventToListenTo, function(data) {
      if (data.txlock) {
        console.log("New InstantSend transaction received: " + data.txid)
      } else {
        console.log("New transaction received: " + data.txid)
      }
    })
  </script>
</body>
</html>

Notes on Upgrading from v0.3

The unspent outputs format now has satoshis and height:

[
  {
    "address":"mo9ncXisMeAoXwqcV5EWuyncbmCcQN4rVs",
    "txid":"d5f8a96faccf79d4c087fa217627bb1120e83f8ea1a7d84b1de4277ead9bbac1",
    "vout":0,
    "scriptPubKey":"76a91453c0307d6851aa0ce7825ba883c6bd9ad242b48688ac",
    "amount":0.000006,
    "satoshis":600,
    "confirmations":0,
    "ts":1461349425
  },
  {
    "address": "mo9ncXisMeAoXwqcV5EWuyncbmCcQN4rVs",
    "txid": "bc9df3b92120feaee4edc80963d8ed59d6a78ea0defef3ec3cb374f2015bfc6e",
    "vout": 1,
    "scriptPubKey": "76a91453c0307d6851aa0ce7825ba883c6bd9ad242b48688ac",
    "amount": 0.12345678,
    "satoshis: 12345678,
    "confirmations": 1,
    "height": 300001
  }
]

The timestamp property will only be set for unconfirmed transactions and height can be used for determining block order. The confirmationsFromCache is nolonger set or necessary, confirmation count is only cached for the time between blocks.

There is a new GET endpoint or raw blocks at /rawblock/<blockHash>:

Response format:

{
  "rawblock": "blockhexstring..."
}

There are a few changes to the GET endpoint for /addr/[:address]:

  • The list of txids in an address summary does not include orphaned transactions
  • The txids will be sorted in block order
  • The list of txids will be limited at 1000 txids
  • There are two new query options "from" and "to" for pagination of the txids (e.g. /addr/[:address]?from=1000&to=2000)

Some additional general notes:

  • The transaction history for an address will be sorted in block order
  • The response for the /sync endpoint does not include startTs and endTs as the sync is no longer relevant as indexes are built in dashd.
  • The endpoint for /peer is no longer relevant connection to dashd is via ZMQ.
  • /tx endpoint results will now include block height, and spentTx related fields will be set to null if unspent.
  • /block endpoint results does not include confirmations and will include poolInfo.

Notes on Upgrading from v0.2

Some of the fields and methods are not supported:

The /tx/<txid> endpoint JSON response will not include the following fields on the "vin" object:

  • doubleSpentTxId // double spends are not currently tracked
  • isConfirmed // confirmation of the previous output
  • confirmations // confirmations of the previous output
  • unconfirmedInput

The /tx/<txid> endpoint JSON response will not include the following fields on the "vout" object.

  • spentTs

The /status?q=getTxOutSetInfo method has also been removed due to the query being very slow and locking dashd.

Plug-in support for Insight API is also no longer available, as well as the endpoints:

  • /email/retrieve
  • /rates/:code

Caching support has not yet been added in the v0.3 upgrade.

Resources

Contributing

Feel free to dive in! Open an issue or submit PRs.

License

MIT © Dash Core Group, Inc.

insight-api's People

Contributors

abbshr avatar alex-werner avatar antouhou avatar bechi avatar braydonf avatar cmgustavo avatar cofresi avatar eordano avatar eveiv avatar fanatid avatar gasteve avatar ionux avatar isocolsky avatar jl2035 avatar kamuelafranco avatar kleetus avatar koirikivi avatar ktechmidas avatar lordhelmut avatar maraoz avatar martindale avatar matiu avatar nmarley avatar pnagurny avatar rhoop avatar shumkov avatar snogcel avatar strophy avatar thephez avatar updatesthepoolist avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

insight-api's Issues

Missing poolInfo in Block Summaries!!

According to the document
api

/insight-api-dash/blocks?limit=3&blockDate=2016-04-22

response

{
  "blocks": [
    {
      "height": 408495,
      "size": 989237,
      "hash": "00000000000000000108a1f4d4db839702d72f16561b1154600a26c453ecb378",
      "time": 1461360083,
      "txlength": 1695,
      "poolInfo": {
        "poolName": "BTCC Pool",
        "url": "https://pool.btcc.com/"
      }
    }
  ],
  "length": 1,
  "pagination": {
    "next": "2016-04-23",
    "prev": "2016-04-21",
    "currentTs": 1461369599,
    "current": "2016-04-22",
    "isToday": true,
    "more": true,
    "moreTs": 1461369600
  }
}

But my response is like this

{
    "blocks": [
        {
            "height": 457601,
            "size": 457,
            "hash": "000000000012e41fc2c563525070f13474b49cf43dfc44eb843d25084d0f91a3",
            "time": 1461369261,
            "txlength": 2,
            "poolInfo": {}
        },
        {
            "height": 457600,
            "size": 232,
            "hash": "0000000000136043492b017c642a5c2e86275bcfb7db7dcda42e11f7e21740d2",
            "time": 1461369211,
            "txlength": 1,
            "poolInfo": {}
        },
        {
            "height": 457599,
            "size": 1797,
            "hash": "0000000000056e20c5f3d62a83e4db783629fdcf4ba2ae1d1f18a5360bb4d91f",
            "time": 1461369167,
            "txlength": 6,
            "poolInfo": {}
        }
    ],
    "length": 3,
    "pagination": {
            "next": "2016-04-23",
            "prev": "2016-04-21",
            "currentTs": 1461369599,
            "current": "2016-04-22",
            "isToday": false,
            "more": true,
            "moreTs": 1461369600
     }
}

proxy behind NGINX [ solved ] $real_ip

insight-api and insight-ui behind a nginx proxy

to set the rate limit ( 200 ) and block the IP over limit you need the
real_ip of the client. If somebody configures the nginx proxy and put the
api and ui behind you get only the IP of localhost.

THIS FIXES THE ISSUE

server {
  listen 80;
  server_name yourserrvername.xyz;

  root /your/home/insight;
  access_log /opt/insight-log/livenet-access.log;
  error_log /opt/insight-log/livenet-error.log;
  
   ## if somebody wants to redirect ##
   rewrite ^/$ /insight/ redirect;
    

  location / {
    proxy_pass http://localhost:3001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header CF-Connecting-IP $remote_addr;
    proxy_set_header X-Real-IP $remote_addr;    
    proxy_pass_header X-XSRF-TOKEN;
    proxy_cache_bypass $http_upgrade;
  }
}

in the configfile of dashcore-node

{
  "network": "livenet",
  "port": 3001,
  "services": [
    "dashd",
    "web",
    "@dashevo/insight-api-dash",
    "@dashsevo/insight-ui-dash"
  ],
  "servicesConfig": {
    "dashd": {
      "connect": [
        {
          "rpchost": "127.0.0.1",
          "rpcport": 8999,
          "rpcuser": "username",
          "rpcpassword": "rpcpwd",
          "zmqpubrawtx": "tcp://127.0.0.1:18332"
        }
      ]
    },
    "@dashevo/insight-api-dash": {
      "routePrefix": "insight-api-dash",
      "rateLimiterOptions": {
        "whitelist": [
          "1.2.3.4",
          "127.0.0.1"
        ],
        "whitelistLimit": 9999999,
        "limit": 200,
        "interval": 60000,
        "banInterval": 3600000
      }
    }
  }
}

this is a quickfix and not well tested -> maybe somebody can proof the concept
Thanks a lot

Testnet Insight API returning wrong payloads

When querying https://testnet-insight.dashevo.org/insight-api/blocks?limit=1, we are sometimes getting a payload with no blocks. This is breaking for us. Such as the one below

{
  "blocks": [],
  "length": 0,
  "pagination": {
    "current": "2021-11-24",
    "currentTs": 1637798399,
    "isToday": true,
    "more": false,
    "next": "2021-11-25",
    "prev": "2021-11-23"
  }
}

Perhaps related is the fact that https://testnet-insight.dashevo.org/insight-api/status often returns a payload where the blocks value is a number that is far behind.

{
  "info": {
    "blocks": 616345,
    "connections": 11,
    "difficulty": 0.002247077821617921,
    "errors": "Warning: unknown new rules activated (versionbit 3)",
    "insightversion": "3.1.1",
    "network": "testnet",
    "protocolversion": 70219,
    "relayfee": 1.0e-5,
    "timeoffset": -1,
    "version": 170003
  }
}

We got this response on Wed, 24 Nov 2021 09:53:38 GMT, a time where the actual tip of the DASH testnet was 618900.

We were only able to reproduce this through programmatic calls. On the browser we always get the right response.
Are we somehow getting answers from a node that is stuck?

deprecated masternodes/list : how to get a masternode list?

Hi devs,
At first : thank you all for you commitment to the Dash network!

I'm playing with the libs and I'm looking for a way to have a masternode list with insight-api.

For the moment at insight-api/masternodes/list we can find:
"This endpoint has been deprecated and will be replaced with a new endpoint compatible with the deterministic masternode list introduced in v0.13"

Although when you look at https://insight.dash.org/api/masternodes/list we still have a JSON answer (a good answer?).
Am I using the wrong branch? is the dash.org insight an old version?

Thank you in advance for your answers!

Prototype pollution

Summary:
Prototype Pollution is a vulnerability affecting JavaScript. Prototype Pollution refers to the ability to inject properties into existing JavaScript language construct prototypes, such as objects. JavaScript allows all Object attributes to be altered, including their magical attributes such as proto, constructor and prototype. An attacker manipulates these attributes to overwrite, or pollute, a JavaScript application object prototype of the base object by injecting other values. Properties on the Object.prototype are then inherited by all the JavaScript objects through the prototype chain. When that happens, this leads to either denial of service by triggering JavaScript exceptions, or it tampers with the application source code to force the code path that the attacker injects, thereby leading to remote code execution.

Title - Prototype pollution attack[CVE-2019-10768]

Vulnerable URL:-https://explorer.dash.org/insight/

Steps To Reproduce:
1.Create/signup your account and check angularjs
2.Open console and put this payload
angular.merge({}, JSON.parse('{"proto": {"xxx": "polluted"}}'));
console.log(({}).xxx);

References:-
https://security.snyk.io/vuln/SNYK-JS-ANGULAR-534884
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10768

Impact:-
Then it will let the attacker get access to sensitive information by polluting the scope with the isAdmin property. If the attacker changes some existing attribute to an unexpected return type (say toString attribute to return type integer) it will cause your application to crash (Denial of Service) or if you are using your server for code execution like node.js exec or eval then it might even lead to Remote code execution(RCE)

Fix:
Freeze the prototype— use Object.freeze (Object.prototype).

Require schema validation of JSON input.

Avoid using unsafe recursive merge functions.

Consider using objects without prototypes (for example, Object.create(null)), breaking the prototype chain and preventing pollution.

As a best practice use Map instead of Object.

Command failed: git checkout add-devnet-quorum

It appears the latest update broke the install. See my command output below.

Specifically: error: pathspec 'add-devnet-quorum' did not match any file(s) known to git.

ubuntu@fe4eacf6771c:~/mynode$ dashcore-node install @dashevo/insight-api
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm ERR! code 1
npm ERR! Command failed: git checkout add-devnet-quorum
npm ERR! error: pathspec 'add-devnet-quorum' did not match any file(s) known to git.
npm ERR! 

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/ubuntu/.npm/_logs/2020-10-26T16_54_46_126Z-debug.log
/home/ubuntu/.nvm/versions/node/v12.19.0/lib/node_modules/@dashevo/dashcore-node/lib/cli/main.js:87
          throw err;
          ^

Error: There was an error installing service: @dashevo/insight-api
    at ChildProcess.<anonymous> (/home/ubuntu/.nvm/versions/node/v12.19.0/lib/node_modules/@dashevo/dashcore-node/lib/scaffold/add.js:56:19)
    at ChildProcess.emit (events.js:314:20)
    at maybeClose (internal/child_process.js:1021:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)

Coinbase addresses from some blocks not logged

I am working on some things using the bitcore and insight APIs and have set up insight-ui-dash, insight-api-dash, and bitcore-node-dash in an Ubuntu virtual machine on my laptop so that I don't abuse the explorer here: https://insight.dash.siampm.com/

Everything seems to have gone fine on install and the explorer ui and api both seem to be working nicely. However, as I've been building out methods, I encountered an issue that I can't resolve.

If I query the API for coinbase address histories, many addresses do not appear to have been indexed. This does not seem to be an issue for addresses with more than 1 block mined, such as those controlled by pools. The block explorer mentioned about on siampm.com does not seem to have this issue, so I was wondering if there is some kind of flag I need to tweak or patch to apply to fix my issue.

Transaction broadcast failed

I have send transaction signed (with rawtx) but get error Second argument must be numeric (maxfeerate) and no longer supports a boolean. To allow a transaction with high fees, set maxfeerate to 0.. Code:-8.
Please let me know if isight-api have any updates!

How to use this api together with docker-dashd

Hi I can't figure it out how should be set the dash.conf to listen to the daemon from a docker image (https://github.com/dashpay/docker-dashd)

I have like this

addressindex=1
txindex=1
listen=1
server=1
daemon=1
timestampindex=1
spentindex=1

and dashcore-node.json

It's like this

{
  "network": "livenet",
  "port": 3001,
  "services": [
    "@dashevo/insight-api",
    "dashd",
    "web"
  ],
  "servicesConfig": {
    "dashd": {
      "spawn": {
        "datadir": "/dashcore-node/dash-data",
        "exec": "/dashcore-node/dash-data/dashd"
      }
    }
  }
}

I've installed dashcore-node outside of the docker image (as i am kind new to docker development)
when a run
./bin/dashcore-node start

it says

"starting dashd"

and then it fails with error

RPCError: Dash JSON-RPC: Request Error: connect ECONNREFUSED 127.0.0.1:9998

I have placed a question in SO but i'm on a deadline and nobody has answered, so please any help thank you

Accessing transactions broken into pages

I noticed that the insight-api breaks transactions into pages, with each page containing up to 10 transactions.
Take block #1460000 for example:
https://explorer.dash.org/insight/block/00000000000000009891170e922835b046a48dcb738f6c2287f144ad7d65c249
which has 34 transactions.
The api query only returns the first 10 transactions
https://explorer.dash.org/insight-api/txs/?block=00000000000000009891170e922835b046a48dcb738f6c2287f144ad7d65c249
and has a “pagesTotal:4”. How do you query the rest of the pages?

insight.dash.org rejecting ipv6 packets

insight.dash.org has a AAAA DNS record (ipv6) registered, but is ONLY listening on the A (ipv4) address (or the firewall is just dropping ipv6 traffic entirely).

This causes a timeout for people who are on Comcast, Cox and other networks which use IPv6 by default when available.

Fail:
Error: connect ETIMEDOUT 2600:1f14:14c:4006:8c85:66c2:e136:f339:443
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16)

IPv4 for insight.dash.org

dig A @8.8.8.8 insight.dash.org
insight.dash.org.    300    IN    CNAME    mainnet-insight.dashevo.org.
mainnet-insight.dashevo.org. 60    IN    A    52.42.236.28
mainnet-insight.dashevo.org. 60    IN    A    44.230.102.204

IPv6 for insight.dash.org

dig AAAA @8.8.8.8 insight.dash.org
;; ANSWER SECTION:
insight.dash.org.	300	IN	CNAME	mainnet-insight.dashevo.org.
mainnet-insight.dashevo.org. 60	IN	AAAA	2600:1f14:14c:4006:8c85:66c2:e136:f339
mainnet-insight.dashevo.org. 60	IN	AAAA	2600:1f14:14c:4004:5c06:e588:6ad1:59d3
ping6 insight.dash.org
# hangs

Workaround

Disable IPv6 on your computer... 🤦‍♀️

Screen Shot 2022-12-21 at 11 52 42 AM

Not able to install bitcore-node-dash globally.

Below is the error i am getting while installing bitcore-node-dash

sudo npm install -g bitcore-node-dash
\
> [email protected] preinstall /usr/local/lib/node_modules/bitcore-node-dash
> ./scripts/download

sh: 1: ./scripts/download: Permission denied
npm ERR! Linux 3.16.0-30-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "bitcore-node-dash"
npm ERR! node v4.0.0
npm ERR! npm  v2.14.2
npm ERR! code ELIFECYCLE

npm ERR! [email protected] preinstall: `./scripts/download`
npm ERR! Exit status 126
npm ERR! 
npm ERR! Failed at the [email protected] preinstall script './scripts/download'.
npm ERR! This is most likely a problem with the bitcore-node-dash package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     ./scripts/download
npm ERR! You can get their info via:
npm ERR!     npm owner ls bitcore-node-dash
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/afzal/npm-debug.log

Second argument must be numeric (maxfeerate) and no longer supports a boolean. To allow a transaction with high fees, set maxfeerate to 0.. Code:-8

"tx": "0100000001256b8b0e9a1bc3c51fbfe3b1ac38566c4aea81ff3226d699f1f426874aaeac9d000000006a473044022072f8d25e3cf3d6e984d38cf75b8732a71039d2a62ee9d60b429a191adbd2a58d0220100d6c7bd0f38b9f764514b63d541416a0e407118a719142334cb4734e9b872b01210229c046f3c4c40c851b330fb9c05a1231e557bcc30bdcb1ee2cbb6be6ae9ab082ffffffff02e1a40800000000001976a9140b43da111c21708bd49cb60ff8fda24358ec1f0b88ac10270000000000001976a91499b1ab02d70e7c6913693e993343749822ed054688ac00000000"

empty uxto array for live transactions

It appears that if a transaction occurs while the server is running and the address is checked before the first confirmation is sent (and maybe after as well) then the uxto endpoint returns an empty array rather than showing the uxto with 0 confirmations (or any confirmations) after the first confirmation is received.

Steps to reproduce:

  1. Create a raw transaction
  2. Check, for example http://104.236.12.147:3001/insight-api-dash/addr/XwZ3CBB97JnyYi17tQdzFDhZJYCenwtMU8/utxo
  3. Check, for example http://104.236.12.147:3001/insight-api-dash/addr/XwZ3CBB97JnyYi17tQdzFDhZJYCenwtMU8
  4. Note that both endpoints show data
  5. Wait for a confirmation
  6. Refresh both endpoints
  7. See that the uxto endpoint has an empty array even though the addr endpoint shows transactions

Cannot get balance, using library.

Hi, devs!

I've been trying to solve a problem with a balance request from a test node via a https://github.com/dashevo/insight-api library for several days. Together with the guys from the discord channel 'https://discord.gg/wq5suh' (Dash Devs), I came to the following conclusions:

  1. Testnet node receives data from the blockchain 1 second after it appears in the explorer (like so: https://blockexplorer.one/dash/testnet)
  2. Testnet node receives the right amount of address balance.
  3. https://github.com/dashevo/insight-api library can't provide balance info after the balance change. The library doesn't update address balance.

My flow is so:

  1. docker container with https://github.com/dashevo/insight-api image
  2. remote testnet node
  3. my project, which make requests to https://github.com/dashevo/insight-api docker container.

What I do:

  1. run https://github.com/dashevo/insight-api docker container using docker run --rm --net="host" -p 3001:3001 dash-insight:v1 command
  2. execute getBalance command from my project code: axios.get(http://localhost:3001/insight-api/addr/ygsU7azZDDPCKtPoNd7gnNZDiXTPdzwLaX/balance)
  3. The step above is correctly executed only once per https://github.com/dashevo/insight-api docker container session (until docker container reload). The first time, the command from step 2 will initiate these commands on the testnet node:
	2020-10-13 13:16:16 Received a POST request for / from 78.81.164.236:46700
	2020-10-13 13:16:16 ThreadRPCServer method=getaddressbalance
	2020-10-13 13:16:16 Received a POST request for / from 78.81.164.236:46698
	2020-10-13 13:16:16 ThreadRPCServer method=getaddresstxids
	2020-10-13 13:16:16 Received a POST request for / from 78.81.164.236:46702
	2020-10-13 13:16:16 ThreadRPCServer method=getaddressmempool
  1. In all other cases, step 2 runs only these commands in the testnet node:
2020-10-13 13:24:10 Received a POST request for / from 78.81.164.236:46888
2020-10-13 13:24:10 ThreadRPCServer method=getaddressmempool

The "method = getaddressbalance" request is missing.
My question is: why is this so? What is the problem and how can I solve it? Maybe it's something in https://github.com/dashevo/insight-api config and I need to change that?

voteraw api?

Are there Dash-specific APIs? Like voteraw, masternode, etc?

I don't see documentation for those sorts of things.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.