Skip to content

Instantly share code, notes, and snippets.

@fanatid
Last active August 29, 2015 14:23
Show Gist options
  • Save fanatid/c6f0fb776428d5f7309c to your computer and use it in GitHub Desktop.
Save fanatid/c6f0fb776428d5f7309c to your computer and use it in GitHub Desktop.
get colored balance for addresses
// npm i git://github.com/fanatid/coloredcoinjs-lib#v0.4.0 git://github.com/chromaway/blockchainjs lodash cb-insight bluebird bitcore
var _ = require('lodash')
var cclib = require('coloredcoinjs-lib')
var bitcore = require('bitcore')
var Promise = require('bluebird')
var Blockchain = require('cb-insight')
var blockchain = new Blockchain('https://insight.bitpay.com')
var blockchainjs = require('blockchainjs')
var connector = new blockchainjs.connector.Chromanode({networkName: 'livenet'})
var addresses = [
'1PzC2vd3EBGsWpaKVX7Cm8zWJx15tnqE2c'
]
var cdefcls = cclib.definitions.EPOBC
var cdefstorage = new cclib.storage.definitions.Memory()
var cdmanager = new cclib.definitions.Manager(cdefstorage)
var cdstorage = new cclib.storage.data.Memory()
var cdata = new cclib.ColorData(cdstorage, cdmanager)
Promise.all([
cdefstorage.ready,
cdstorage.ready,
new Promise(function (resolve) {
connector.on('connect', resolve)
connector.connect()
})
])
.then(function () {
return new Promise(function (resolve, reject) {
blockchain.addresses.unspents(addresses, function (err, response) {
if (err) {
return reject(err)
}
var result = _.chain(response)
.groupBy('txId')
.reduce(function (obj, values, txid) {
obj[txid] = _.pluck(values, 'vout')
return obj
}, {})
.value()
resolve(result)
})
})
})
.then(function (unspents) {
var cachedTx = {}
function getTxFn (txid, cb) {
Promise.try(function () {
if (cachedTx[txid] !== undefined) {
return
}
console.log('gettx: ', txid)
return connector.getTx(txid)
.then(function (rawtx) {
cachedTx[txid] = rawtx
})
})
.then(function () { return cachedTx[txid] })
.asCallback(cb)
}
return Promise.reduce(_.keys(unspents), function (total, txid, index) {
console.log('progress: ' + (index + 1) + ' / ' + _.keys(unspents).length)
return connector.getTx(txid)
.then(function (rawtx) {
var tx = bitcore.Transaction(rawtx)
return cdata.getTxColorValues(tx, unspents[txid], cdefcls, getTxFn)
})
.then(function (result) {
result.outputs.forEach(function (item) {
var desc = item.cdef.getDesc()
unspents[txid].forEach(function (vout) {
if (item.outputs[vout] === null) {
return
}
if (total[desc] === undefined) {
total[desc] = item.outputs[vout]
return
}
total[desc] = total[desc].plus(item.outputs[vout])
})
})
return total
})
}, {})
})
.then(function (result) {
connector.disconnect()
console.log(require('util').inspect(result, {depth: null}))
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment