使用bitcore-explorer与bitcore-lib(Bitcore)时出错

时间:2017-12-05 04:01:41

标签: node.js bitcoin blockchain bitcore bitpay

我正在尝试使用bitcore-lib生成比特币地址并使用bitcore-explorer获取未使用的事务。 这里生成地址的代码是:

var bitcore = require('bitcore-lib');
var rand_buffer = bitcore.crypto.Random.getRandomBuffer(32);
var rand_number = bitcore.crypto.BN.fromBuffer(rand_buffer);
var privateKay = new bitcore.PrivateKey(rand_number);
var privateKeyWif = privateKay.toWIF();
var address = privateKay.toAddress('testnet');
console.log({
  rand_buffer:rand_buffer,
  rand_number_hex:rand_number,
  rand_number_dec:rand_number.toString(),
  privateKey:privateKay,
  privateKeyWif: privateKeyWif,
  address:address,
});

哪个工作正常...输出是:

{ rand_buffer: <Buffer 55 8b 27 c4 51 87 97 17 9a 7d 1d 72 48 26 e5 83 95 74 5b 3b b1 b4 b5 b6 a7 1c df 9f 18 e6 97 2e>,
  rand_number_hex: <BN: 558b27c4518797179a7d1d724826e58395745b3bb1b4b5b6a71cdf9f18e6972e>,
  rand_number_dec: '38692458332424984226826540178179935156087120588336482991409403810055901845294',
  privateKey: <PrivateKey: 558b27c4518797179a7d1d724826e58395745b3bb1b4b5b6a71cdf9f18e6972e, network: livenet>,
  privateKeyWif: 'Kz5zkBwfiYNkyswsKjot4wWmxHWUZdVMmxf65Z5wLk29ufhxnnQT',
  address: <Address: msTDjA4PmyePSWx2VcaQWoWoQ7gWzU2Kqx, type: pubkeyhash, network: testnet> }

在生成的地址上执行任何交易后, 我需要使用bitcore-explorers 所以我需要bitcore-explorers 这是代码:

var Insight = require('bitcore-explorers').Insight;
var insight = new Insight('testnet');
insight.getUnspentUtxos(address1,(error,utxos)=>{
  if(error) return console.log(error);
  console.log(utxos)
});

问题是,当我需要bitcore-explorers时,它会给我以下错误:

D:\RAHEEL\Projects\gateway\node_modules\bitcore-explorers\node_modules\bitcore-lib\index.js:12
    throw new Error(message);
    ^

Error: More than one instance of bitcore-lib found. Please make sure to require bitcore-lib and check that submodules do not
also include their own bitcore-lib dependency.
    at Object.bitcore.versionGuard (D:\RAHEEL\Projects\gateway\node_modules\bitcore-explorers\node_modules\bitcore-lib\index.
js:12:11)
    at Object.<anonymous> (D:\RAHEEL\Projects\gateway\node_modules\bitcore-explorers\node_modules\bitcore-lib\index.js:15:9)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (D:\RAHEEL\Projects\gateway\node_modules\bitcore-explorers\lib\models\addressinfo.js:3:15)

3 个答案:

答案 0 :(得分:2)

这里有一个临时解决方案。

〜/ bitcore-探险/ node_modules / bitcore-LIB / index.js

第7行:

bitcore.versionGuard = function(version) {

将其更改为:

bitcore.versionGuard = function(version) { return;

但是,对于目前尚未修复的主分支,应该修复此问题。您可以查看此here

答案 1 :(得分:1)

是的。目前,这似乎仍在进行中(有争议)。 它在github

中被多次提出

我遇到了相同的问题,尽管要求稍有不同:我正在使用bitocore-p2p npm软件包;当前版本为1.1.2,并且需要bitcore-lib版本0.14.0作为依赖项。

我宁愿不打补丁bitcore-p2p/node_modules/bitcore-lib/index.js(此处和 github位核心问题中的另一个答案)。 相反,在我项目的package.json中,我维护了一个bitocore-p2p依赖项,然后引用 (唯一的)v0.14.0 bitcore-lib依赖项:< / p>

var p2p     = require('bitcore-p2p');                           //p2p exports
var p2pMod  = require.cache[require.resolve('bitcore-p2p')];    //p2p module
var bitcore = p2pMod.require('bitcore-lib');                    //p2p/bitcore-lib exports

或者可以使用一种更脆弱的方法:

var p2p     = require('bitcore-p2p');                           //p2p exports    
var bitcore = require('bitcore-p2p/node_modules/bitcore-lib');  //p2p/bitcore-lib exports


就我而言,这没有问题。但是很明显,如果我要说的是0.16.0 bitcore-lib版本,我通常希望直接依赖于我的项目,然后遇到麻烦。

答案 2 :(得分:0)

我通过

解决了此问题

var bitcore = require('bitcore-explorers/node_modules/bitcore-lib');

因此,它现在不会产生任何错误。