insight-api
Advanced tools
Comparing version 0.0.0 to 0.3.0
{ | ||
"name": "insight-api", | ||
"version": "0.0.0" | ||
"description": "A Bitcoin blockchain REST and web socket API service for Bitcore Node.", | ||
"version": "0.3.0", | ||
"repository": "git://github.com/bitpay/insight-api.git", | ||
"contributors": [ | ||
{ | ||
"name": "Gustavo Cortez", | ||
"email": "cmgustavo83@gmail.com" | ||
}, | ||
{ | ||
"name": "Ivan Socolsky", | ||
"email": "jungans@gmail.com" | ||
}, | ||
{ | ||
"name": "Juan Ignacio Sosa Lopez", | ||
"email": "bechilandia@gmail.com" | ||
}, | ||
{ | ||
"name": "Manuel Araoz", | ||
"email": "manuelaraoz@gmail.com" | ||
}, | ||
{ | ||
"name": "Matias Alejo Garcia", | ||
"email": "ematiu@gmail.com" | ||
}, | ||
{ | ||
"name": "Mario Colque", | ||
"email": "colquemario@gmail.com" | ||
}, | ||
{ | ||
"name": "Patrick Nagurny", | ||
"email": "patrick@bitpay.com" | ||
}, | ||
{ | ||
"name": "Braydon Fuller", | ||
"email": "braydon@bitpay.com" | ||
} | ||
], | ||
"bugs": { | ||
"url": "https://github.com/bitpay/insight-api/issues" | ||
}, | ||
"homepage": "https://github.com/bitpay/insight-api", | ||
"license": "MIT", | ||
"keywords": [ | ||
"insight", | ||
"insight api", | ||
"blockchain", | ||
"bitcoin api", | ||
"blockchain api", | ||
"json", | ||
"bitcore" | ||
], | ||
"engines": { | ||
"node": ">=0.12.0" | ||
}, | ||
"scripts": { | ||
"test": "NODE_ENV=test mocha -R spec --recursive" | ||
}, | ||
"main": "lib", | ||
"bitcoreNode": "lib", | ||
"dependencies": { | ||
"async": "*", | ||
"bitcore-lib": "^0.13.7", | ||
"bitcore-message": "^1.0.1", | ||
"lodash": "^2.4.1", | ||
"request": "^2.64.0" | ||
}, | ||
"devDependencies": { | ||
"chai": "*", | ||
"mocha": "~1.16.2", | ||
"proxyquire": "^1.7.2", | ||
"should": "^2.1.1", | ||
"sinon": "^1.10.3" | ||
} | ||
} |
345
README.md
@@ -1,2 +0,343 @@ | ||
Insight API | ||
=========== | ||
# Insight API | ||
A Bitcoin blockchain REST and web socket API service for [Bitcore Node](https://github.com/bitpay/bitcore-node). | ||
This is a backend-only service. If you're looking for the web frontend application, take a look at https://github.com/bitpay/insight. | ||
## Getting Started | ||
```bash | ||
npm install -g bitcore-node@latest | ||
bitcore-node create mynode | ||
cd mynode | ||
bitcore-node add insight-api | ||
bitcore-node start | ||
``` | ||
The API endpoints will be available by default at: `http://localhost:3001/insight-api/` | ||
## Prerequisites | ||
- [Bitcore Node 0.2.x](https://github.com/bitpay/bitcore-node) | ||
**Note:** You can use an existing Bitcoin data directory, however `txindex` needs to be set to true in `bitcoin.conf`. | ||
## 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 bitcoind. | ||
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. | ||
## API HTTP Endpoints | ||
### Block | ||
``` | ||
/api/block/[:hash] | ||
/api/block/00000000a967199a2fad0877433c93df785a8d8ce062e5f9b451cd1397bdbf62 | ||
``` | ||
### Block Index | ||
Get block hash by height | ||
``` | ||
/api/block-index/[:height] | ||
/api/block-index/0 | ||
``` | ||
This would return: | ||
``` | ||
{"blockHash":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"} | ||
``` | ||
which is the hash of the Genesis block (0 height) | ||
### Transaction | ||
``` | ||
/api/tx/[:txid] | ||
/api/tx/525de308971eabd941b139f46c7198b5af9479325c2395db7f2fb5ae8562556c | ||
/api/rawtx/[:rawid] | ||
/api/rawtx/525de308971eabd941b139f46c7198b5af9479325c2395db7f2fb5ae8562556c | ||
``` | ||
### Address | ||
``` | ||
/api/addr/[:addr][?noTxList=1&noCache=1] | ||
/api/addr/mmvP3mTe53qxHdPqXEvdu8WdC7GfQ2vmx5?noTxList=1 | ||
``` | ||
### Address Properties | ||
``` | ||
/api/addr/[:addr]/balance | ||
/api/addr/[:addr]/totalReceived | ||
/api/addr/[:addr]/totalSent | ||
/api/addr/[:addr]/unconfirmedBalance | ||
``` | ||
The response contains the value in Satoshis. | ||
### Unspent Outputs | ||
``` | ||
/api/addr/[:addr]/utxo[?noCache=1] | ||
``` | ||
Sample return: | ||
``` json | ||
[ | ||
{ | ||
"address": "n2PuaAguxZqLddRbTnAoAuwKYgN2w2hZk7", | ||
"txid": "dbfdc2a0d22a8282c4e7be0452d595695f3a39173bed4f48e590877382b112fc", | ||
"vout": 0, | ||
"ts": 1401276201, | ||
"scriptPubKey": "76a914e50575162795cd77366fb80d728e3216bd52deac88ac", | ||
"amount": 0.001, | ||
"confirmations": 3 | ||
}, | ||
{ | ||
"address": "n2PuaAguxZqLddRbTnAoAuwKYgN2w2hZk7", | ||
"txid": "e2b82af55d64f12fd0dd075d0922ee7d6a300f58fe60a23cbb5831b31d1d58b4", | ||
"vout": 0, | ||
"ts": 1401226410, | ||
"scriptPubKey": "76a914e50575162795cd77366fb80d728e3216bd52deac88ac", | ||
"amount": 0.001, | ||
"confirmation": 6, | ||
"confirmationsFromCache": true | ||
} | ||
] | ||
``` | ||
### Unspent Outputs for Multiple Addresses | ||
GET method: | ||
``` | ||
/api/addrs/[:addrs]/utxo | ||
/api/addrs/2NF2baYuJAkCKo5onjUKEPdARQkZ6SYyKd5,2NAre8sX2povnjy4aeiHKeEh97Qhn97tB1f/utxo | ||
``` | ||
POST method: | ||
``` | ||
/api/addrs/utxo | ||
``` | ||
POST params: | ||
``` | ||
addrs: 2NF2baYuJAkCKo5onjUKEPdARQkZ6SYyKd5,2NAre8sX2povnjy4aeiHKeEh97Qhn97tB1f | ||
``` | ||
### Transactions by Block | ||
``` | ||
/api/txs/?block=HASH | ||
/api/txs/?block=00000000fa6cf7367e50ad14eb0ca4737131f256fc4c5841fd3c3f140140e6b6 | ||
``` | ||
### Transactions by Address | ||
``` | ||
/api/txs/?address=ADDR | ||
/api/txs/?address=mmhmMNfBiZZ37g1tgg2t8DDbNoEdqKVxAL | ||
``` | ||
### Transactions for Multiple Addresses | ||
GET method: | ||
``` | ||
/api/addrs/[:addrs]/txs[?from=&to=] | ||
/api/addrs/2NF2baYuJAkCKo5onjUKEPdARQkZ6SYyKd5,2NAre8sX2povnjy4aeiHKeEh97Qhn97tB1f/txs?from=0&to=20 | ||
``` | ||
POST method: | ||
``` | ||
/api/addrs/txs | ||
``` | ||
POST params: | ||
``` | ||
addrs: 2NF2baYuJAkCKo5onjUKEPdARQkZ6SYyKd5,2NAre8sX2povnjy4aeiHKeEh97Qhn97tB1f | ||
from (optional): 0 | ||
to (optional): 20 | ||
``` | ||
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 }, | ||
{ ... }, | ||
{ ... }, | ||
... | ||
{ ... } | ||
] | ||
} | ||
``` | ||
Note: if pagination params are not specified, the result is an array of transactions. | ||
### Transaction Broadcasting | ||
POST method: | ||
``` | ||
/api/tx/send | ||
``` | ||
POST params: | ||
``` | ||
rawtx: "signed transaction as hex string" | ||
eg | ||
rawtx: 01000000017b1eabe0209b1fe794124575ef807057c77ada2138ae4fa8d6c4de0398a14f3f00000000494830450221008949f0cb400094ad2b5eb399d59d01c14d73d8fe6e96df1a7150deb388ab8935022079656090d7f6bac4c9a94e0aad311a4268e082a725f8aeae0573fb12ff866a5f01ffffffff01f0ca052a010000001976a914cbc20a7664f2f69e5355aa427045bc15e7c6c77288ac00000000 | ||
``` | ||
POST response: | ||
``` | ||
{ | ||
txid: [:txid] | ||
} | ||
eg | ||
{ | ||
txid: "c7736a0a0046d5a8cc61c8c3c2821d4d7517f5de2bc66a966011aaa79965ffba" | ||
} | ||
``` | ||
### Historic Blockchain Data Sync Status | ||
``` | ||
/api/sync | ||
``` | ||
### Live Network P2P Data Sync Status (Bitcoind runs in the same process) | ||
``` | ||
/api/peer | ||
``` | ||
### Status of the Bitcoin Network | ||
``` | ||
/api/status?q=xxx | ||
``` | ||
Where "xxx" can be: | ||
* getInfo | ||
* getDifficulty | ||
* getBestBlockHash | ||
* getLastBlockHash | ||
### Utility Methods | ||
``` | ||
/api/utils/estimatefee[?nbBlocks=2] | ||
``` | ||
## Web Socket API | ||
The web socket API is served using [socket.io](http://socket.io). | ||
The following are the events published by insight: | ||
'tx': new transaction received from network. This event is published in the 'inv' room. 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, | ||
... | ||
} | ||
``` | ||
'<bitcoinAddress>': new transaction concerning <bitcoinAddress> received from network. This event is published in the '<bitcoinAddress>' 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 | ||
``` | ||
<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) { | ||
console.log("New transaction received: " + data.txid) | ||
}) | ||
</script> | ||
</body> | ||
</html> | ||
``` | ||
## License | ||
(The MIT License) | ||
Permission is hereby granted, free of charge, to any person obtaining | ||
a copy of this software and associated documentation files (the | ||
'Software'), to deal in the Software without restriction, including | ||
without limitation the rights to use, copy, modify, merge, publish, | ||
distribute, sublicense, and/or sell copies of the Software, and to | ||
permit persons to whom the Software is furnished to do so, subject to | ||
the following conditions: | ||
The above copyright notice and this permission notice shall be | ||
included in all copies or substantial portions of the Software. | ||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, | ||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Wildcard dependency
QualityPackage has a dependency with a floating version range. This can cause issues if the dependency publishes a new major version.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
633697
24
0
5290
1
1
344
5
5
2
2
+ Addedasync@*
+ Addedbitcore-lib@^0.13.7
+ Addedbitcore-message@^1.0.1
+ Addedlodash@^2.4.1
+ Addedrequest@^2.64.0
+ Addedajv@6.12.6(transitive)
+ Addedasn1@0.2.6(transitive)
+ Addedassert-plus@1.0.0(transitive)
+ Addedasync@3.2.6(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedbcrypt-pbkdf@1.0.2(transitive)
+ Addedbitcore-lib@0.13.19(transitive)
+ Addedbitcore-message@1.0.4(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addedcore-util-is@1.0.2(transitive)
+ Addeddashdash@1.14.1(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addedecc-jsbn@0.1.2(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedextsprintf@1.3.0(transitive)
+ Addedfast-deep-equal@3.1.3(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@2.3.3(transitive)
+ Addedgetpass@0.1.7(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjsbn@0.1.1(transitive)
+ Addedjson-schema@0.4.0(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedlodash@2.4.2(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedpsl@1.9.0(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedqs@6.5.3(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsshpk@1.18.0(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedtweetnacl@0.14.5(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addeduuid@3.4.0(transitive)
+ Addedverror@1.10.0(transitive)