diff --git a/docs/guide/insight.md b/docs/guide/insight.md deleted file mode 100644 index 9892846..0000000 --- a/docs/guide/insight.md +++ /dev/null @@ -1,36 +0,0 @@ -title: Insight Explorer -description: Provides an interface to fetch information about the state of the blockchain from a trusted Insight server. ---- -# Insight - -## Description - -`bitcore.transport.explorers.Insight` is a simple agent to perform queries to an Insight blockchain explorer. The default servers are `https://insight.bitpay.com` and `https://test-insight.bitpay.com`, hosted by BitPay Inc. You can (and we strongly suggest you do) run your own insight server. For more information, head to https://github.com/bitpay/insight-api - -There are currently two methods implemented (the API will grow as features are requested): `getUnspentUtxos` and `broadcast`. - -### Retrieving Unspent UTXOs for an Address (or set of) - -```javascript -var insight = new Insight(); -insight.getUnspentUtxos('1Bitcoin...', function(err, utxos) { - if (err) { - // Handle errors... - } else { - // Maybe use the UTXOs to create a transaction - } -}); -``` - -### Broadcasting a Transaction - -```javascript -var insight = new Insight(); -insight.broadcast(tx, function(err, returnedTxId) { - if (err) { - // Handle errors... - } else { - // Mark the transaction as broadcasted - } -}); -``` diff --git a/index.js b/index.js index 9d514f3..a31b588 100644 --- a/index.js +++ b/index.js @@ -49,9 +49,6 @@ bitcore.deps.bs58 = require('bs58'); bitcore.deps.Buffer = Buffer; bitcore.deps.elliptic = require('elliptic'); -// transport -bitcore.transport = require('./lib/transport'); - // Internal usage, exposed for testing/advanced tweaking bitcore._HDKeyCache = require('./lib/hdkeycache'); diff --git a/lib/transport/explorers/index.js b/lib/transport/explorers/index.js deleted file mode 100644 index 2483955..0000000 --- a/lib/transport/explorers/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - Insight: require('./insight') -}; diff --git a/lib/transport/explorers/insight.js b/lib/transport/explorers/insight.js deleted file mode 100644 index 71a41c5..0000000 --- a/lib/transport/explorers/insight.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict'; - -var $ = require('../../util/preconditions'); -var _ = require('lodash'); - -var Address = require('../../address'); -var JSUtil = require('../../util/js'); -var Networks = require('../../networks'); -var Transaction = require('../../transaction'); -var UnspentOutput = Transaction.UnspentOutput; - -var request = require('request'); - -/** - * Allows the retrieval of information regarding the state of the blockchain - * (and broadcasting of transactions) from/to a trusted Insight server. - * @param {string=} url the url of the Insight server - * @param {Network=} network whether to use livenet or testnet - * @constructor - */ -function Insight(url, network) { - if (!url && !network) { - return new Insight(Networks.defaultNetwork); - } - if (Networks.get(url)) { - network = Networks.get(url); - if (network === Networks.livenet) { - url = 'https://insight.bitpay.com'; - } else { - url = 'https://test-insight.bitpay.com'; - } - } - JSUtil.defineImmutable(this, { - url: url, - network: Networks.get(network) || Networks.defaultNetwork - }); - return this; -} - -/** - * @callback Insight.GetUnspentUtxosCallback - * @param {Error} err - * @param {Array.UnspentOutput} utxos - */ - -/** - * Retrieve a list of unspent outputs associated with an address or set of addresses - * @param {Address|string|Array.Address|Array.string} addresses - * @param {GetUnspentUtxosCallback} callback - */ -Insight.prototype.getUnspentUtxos = function(addresses, callback) { - $.checkArgument(_.isFunction(callback)); - if (!_.isArray(addresses)) { - addresses = [addresses]; - } - addresses = _.map(addresses, function(address) { return new Address(address); }); - - this.requestPost('/api/addrs/utxo', { - addrs: _.map(addresses, function(address) { return address.toString(); }).join(',') - }, function(err, res, unspent) { - if (err || res.statusCode !== 200) { - return callback(err || res); - } - unspent = _.map(unspent, UnspentOutput); - - return callback(null, unspent); - }); -}; - -/** - * @callback Insight.BroadcastCallback - * @param {Error} err - * @param {string} txid - */ - -/** - * Broadcast a transaction to the bitcoin network - * @param {transaction|string} transaction - * @param {BroadcastCallback} callback - */ -Insight.prototype.broadcast = function(transaction, callback) { - $.checkArgument(JSUtil.isHexa(transaction) || transaction instanceof Transaction); - $.checkArgument(_.isFunction(callback)); - if (transaction instanceof Transaction) { - transaction = transaction.serialize(); - } - - this.requestPost('/api/tx/send', { - rawtx: transaction - }, function(err, res, body) { - if (err || res.statusCode !== 200) { - return callback(err || body); - } - return callback(null, body ? body.txid : null); - }); -}; - -/** - * Internal function to make a post request to the server - * @param {string} path - * @param {?} data - * @param {function} callback - * @private - */ -Insight.prototype.requestPost = function(path, data, callback) { - $.checkArgument(_.isString(path)); - $.checkArgument(_.isFunction(callback)); - request({ - method: 'POST', - url: this.url + path, - json: data - }, callback); -}; - -module.exports = Insight; diff --git a/lib/transport/index.js b/lib/transport/index.js deleted file mode 100644 index 6e49efa..0000000 --- a/lib/transport/index.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @namespace Transport - */ -module.exports = { - explorers: require('./explorers') -}; diff --git a/package.json b/package.json index 654ed2b..09e7818 100644 --- a/package.json +++ b/package.json @@ -73,15 +73,12 @@ }, "dependencies": { "bn.js": "=0.16.1", - "browser-request": "^0.3.3", "bs58": "=2.0.0", "elliptic": "=0.16.0", "hash.js": "=0.3.2", "inherits": "=2.0.1", "lodash": "=2.4.1", - "request": "^2.51.0", - "sha512": "=0.0.1", - "socks5-client": "^0.3.6" + "sha512": "=0.0.1" }, "devDependencies": { "brfs": "1.2.0", diff --git a/test/transport/explorers/insight.js b/test/transport/explorers/insight.js deleted file mode 100644 index 433370a..0000000 --- a/test/transport/explorers/insight.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -var sinon = require('sinon'); -var should = require('chai').should(); -var expect = require('chai').expect; -var bitcore = require('../../..'); - -var Insight = bitcore.transport.explorers.Insight; -var Address = bitcore.Address; -var Transaction = bitcore.Transaction; -var Networks = bitcore.Networks; - -describe('Insight', function() { - - describe('instantiation', function() { - it('can be created without any parameters', function() { - var insight = new Insight(); - should.exist(insight.url); - should.exist(insight.network); - if (insight.network === Networks.livenet) { - insight.url.should.equal('https://insight.bitpay.com'); - } else if (insight.network === Networks.testnet) { - insight.url.should.equal('https://test-insight.bitpay.com'); - } - }); - it('can be created providing just a network', function() { - var insight = new Insight(Networks.testnet); - insight.url.should.equal('https://test-insight.bitpay.com'); - insight.network.should.equal(Networks.testnet); - }); - it('can be created with a custom url', function() { - var url = 'https://localhost:1234'; - var insight = new Insight(url); - insight.url.should.equal(url); - }); - it('can be created with a custom url and network', function() { - var url = 'https://localhost:1234'; - var insight = new Insight(url, Networks.testnet); - insight.url.should.equal(url); - insight.network.should.equal(Networks.testnet); - }); - it('defaults to defaultNetwork on a custom url', function() { - var insight = new Insight('https://localhost:1234'); - insight.network.should.equal(Networks.defaultNetwork); - }); - }); - - describe('getting unspent utxos', function() { - var insight = new Insight(); - var address = '371mZyMp4t6uVtcEr4DAAbTZyby9Lvia72'; - beforeEach(function() { - insight.requestPost = sinon.stub(); - insight.requestPost.onFirstCall().callsArgWith(2, null, {statusCode: 200}); - }); - it('can receive an address', function(callback) { - insight.getUnspentUtxos(new Address(address), callback); - }); - it('can receive a address as a string', function(callback) { - insight.getUnspentUtxos(address, callback); - }); - it('can receive an array of addresses', function(callback) { - insight.getUnspentUtxos([address, new Address(address)], callback); - }); - it('errors if server is not available', function(callback) { - insight.requestPost.onFirstCall().callsArgWith(2, 'Unable to connect'); - insight.getUnspentUtxos(address, function(error) { - expect(error).to.equal('Unable to connect'); - callback(); - }); - }); - it('errors if server returns errorcode', function(callback) { - insight.requestPost.onFirstCall().callsArgWith(2, null, {statusCode: 400}); - insight.getUnspentUtxos(address, function(error) { - expect(error).to.deep.equal({statusCode: 400}); - callback(); - }); - }); - }); - - describe('broadcasting a transaction', function() { - var insight = new Insight(); - var tx = require('../../data/tx_creation.json')[0][7]; - beforeEach(function() { - insight.requestPost = sinon.stub(); - insight.requestPost.onFirstCall().callsArgWith(2, null, {statusCode: 200}); - }); - it('accepts a raw transaction', function(callback) { - insight.broadcast(tx, callback); - }); - it('accepts a transaction model', function(callback) { - insight.broadcast(new Transaction(tx), callback); - }); - it('errors if server is not available', function(callback) { - insight.requestPost.onFirstCall().callsArgWith(2, 'Unable to connect'); - insight.broadcast(tx, function(error) { - expect(error).to.equal('Unable to connect'); - callback(); - }); - }); - it('errors if server returns errorcode', function(callback) { - insight.requestPost.onFirstCall().callsArgWith(2, null, {statusCode: 400}, 'error'); - insight.broadcast(tx, function(error) { - expect(error).to.equal('error'); - callback(); - }); - }); - }); -});