Compilation 如何为浏览器编译BitcoinJS

Compilation 如何为浏览器编译BitcoinJS,compilation,browserify,bitcoin,Compilation,Browserify,Bitcoin,我正在尝试编译BitcoinJS库,以便将其包含在浏览器中 <script src="js/bitcoinjs.js"></script> 编译成功(不会发生错误)。 当我尝试在我的网页中使用它时 function NewRandomWallet() { var keyPair = bitcoin.ECPair.makeRandom() // Print your private key (in WIF format) console.log

我正在尝试编译BitcoinJS库,以便将其包含在浏览器中

<script src="js/bitcoinjs.js"></script>
编译成功(不会发生错误)。 当我尝试在我的网页中使用它时

function NewRandomWallet() {

    var keyPair = bitcoin.ECPair.makeRandom()

    // Print your private key (in WIF format)
    console.log(keyPair.toWIF())
    // => Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct

    // Print your public key address
    console.log(keyPair.getAddress())
    // => 14bZ7YWde4KdRb5YN7GYkToz3EHVCvRxkF

}
我在Chrome的控制台中发现以下错误:

意外标记

//因为3分。。。在bitcoinjs.js文件中的(…类型)和元组(…类型)之一中

如果我删除了这些点,我就会得到一个密钥和地址,我的代码就正常工作了。 为什么会出现这些问题

下一个问题是当我尝试创建事务时:

var tx = new bitcoin.TransactionBuilder()

// Add the input (who is paying) of the form [previous transaction hash, index of the output to use]
tx.addInput("aa94ab02c182214f090e99a0d57021caffd0f195a81c24602b1028b130b63e31", 0)

// Add the output (who to pay to) of the form [payee's address, amount in satoshis]
tx.addOutput("1Gokm82v6DmtwKEB8AiVhm82hyFSsEvBDK", 15000)

// Initialize a private key using WIF
var keyPair = bitcoin.ECPair.fromWIF("L1uyy5qTuGrVXrmrsvHWHgVzW9kKdrp27wBC7Vs6nZDTF2BRUVwy")

// Sign the first input with the new key
tx.sign(0, keyPair)

// Print transaction serialized as hex
console.log(tx.build().toHex())
// => 0100000001313eb630b128102b60241ca895f1d0ffca21 ...
我又犯了一个错误

types.each不是一个函数

它指向bitcoinjs.js中的这部分代码

    function tuple(value, strict) {
      return types.every((type, i) => typeforce(type, value[i], strict));
    }

有什么想法吗?库的代码是错误的还是我编译的方法是错误的?

问题是我使用了错误的browserify方法。 我在Windows操作系统的CMD中使用以下命令编译了bitcoinjs库:

cmd> cd:testdir
cmd> npm install bitcoinjs-lib
cmd> npm -g install browserify
cmd> browserify foobar.js -o bitcoinjs.js
foobar.js包含:

Bitcoin = require('bitcoinjs-lib');
要在使用后获得缩小版本,请执行以下操作:

cmd> uglifyjs bitcoinjs.js -c -m -r 'Array,BigInteger,Boolean,Buffer,ECPair,Function,Number,Point,Script' -o bitcoinjs.min.js
如果只想获得缩小版,请使用:

cmd> browserify -r bitcoinjs-lib -s Bitcoin | uglifyjs > bitcoinjs.min.js
现在,如果您想生成钱包,可以通过以下方式进行:

function NewRandomWallet() {
    var keyPair = Bitcoin.ECPair.makeRandom();
    // Print your private key (in WIF format)
    $('#private_key').val(keyPair.toWIF());
    // => Kxr9tQED9H44gCmp6HAdmemAzU3n84H3dGkuWTKvE23JgHMW8gct
    // Print your public key address
    $('#address').val(keyPair.getAddress());
    // => 14bZ7YWde4KdRb5YN7GYkToz3EHVCvRxkF        
}
您可以添加一个函数,在缩小库之前从字符串生成钱包:

ECPair.makeFromString = function (aStr) {
var hash = Bitcoin.crypto.sha256(aStr)
var d = BigInteger.fromBuffer(hash)
return new ECPair(d)
}

为了您的方便,我刚刚为bitcoinjs库提供了一个经过编译的小型分发文件夹

bower为浏览器安装bitcoinjs库#4.0.2——保存

ECPair.makeFromString = function (aStr) {
var hash = Bitcoin.crypto.sha256(aStr)
var d = BigInteger.fromBuffer(hash)
return new ECPair(d)
}