bitcoinjs / indexd

An external bitcoind index management service module

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Basic how-to?

unsystemizer opened this issue · comments

Can someone created a simple Getting Started section in README?

I assume I need to install NodeJS, NPM, then this, and create a custom https://github.com/bitcoinjs/indexd/blob/master/test/index.js-like config file? Does that config file replace the main index.js file, or is it supposed to exist in a separate directory like here?

How to execute?
How to query the index?

@unsystemizer great questions, I think for now as I am time-limited, I will add some examples of how to query the indexes in test/.

Thanks. Can you describe your 2-3 steps what needs to be done, e.g. install a Web server, install this module, run Web server with this module, etc? What is your configuration if I may ask?
I just need a couple of high level pointers.

@unsystemizer I hope to have some examples added by tomorrow soon, but incase that doesn't happen:

  • Build a node.js server (e.g using express)
  • Install this module
  • Copy the code in /test to initialize adapter and listen for new Bitcoin blocks.
  • Add express routes for your desired end-points, calling adapter.* functions to retrieve the data you need.

For example, using an router = express.Router(), typeforce-middleware and body-parser, the following address_transactions route returns an { '$address': [txIds] } object result of transactions for each address, since block 0.

router.post('/address_transactions', bodyParser.json(), typeforceMiddleware([
  bitcoin.address.toOutputScript
]), (req, res) => {
  let addrs = req.body
  let tasks = {}

  addrs.forEach((address) => {
    let script = bitcoin.address.toOutputScript(address)
    let scId = bitcoin.crypto.sha256(script).toString('hex')
    tasks[address] = (next) => indexd.adapter.transactionIdsByScriptId(scId, 0, next)
  })

  parallel(tasks, (err, resultMap2) => {
    if (err) return res.status(400).end()

    let tempMap = {}
    for (let address in resultMap2) {
      Object.assign(tempMap, resultMap2[address])
    }

    res.status(200).json(tempMap)
  })
})

@unsystemizer please see this example using express.