主页 > imtoken靓号地址软件 > 查比特币账户 新博客中的大脑
查比特币账户 新博客中的大脑
在本教程中,我们将学习如何使用 Bitconjs-lib 开发库来开发一个简单的 JavaScript 版本的比特币应用程序。我们要实现的功能包括:离线创建比特币私钥和地址、账户充值、离线构建转账裸交易并广播到比特币网络等。
Node.js区块链开发相关推荐教程:
1、安装BitcoinJS-lib
BitcoinJS-lib 是一个 npm 包,可以在 node.js 或浏览器 javascript 环境中使用。您可以使用 npm 或 yarn 安装 BitcoinJS-lib 开发包:
npm install bitcoinjs-lib
2、介绍BitcoinJS-lib
首先介绍bitcoinjs-lib开发库:
const Btc = require('bitcoinjs-lib')
比特币的主链和测试链有不同的网络参数。为了简单和安全起见,我们使用测试链来开发本教程中的应用,所以介绍测试链网络参数:
const TestNet = Btc.networks.testnet
3、用 BitcoinJS 创建一个比特币地址
每个比特币地址对应一对密钥(私钥和公钥),所以我们首先用BitcoinJS创建一个密钥对,并从密钥对中推导出地址:
let keyPair = Btc.ECPair.makeRandom({ network: TestNet })
let address = keyPair.getAddress()
let wifKey = keyPair.toWIF()
console.log(`Address: ${address} \n WifKey: ${wifKey}`)
@ >
在上面的代码中,我们首先使用BitcoinJS的ECPair类的静态方法makeRandom()生成随机密钥对,然后使用密钥对的getAddress()方法推导出对应的比特币地址,使用toWif()获取WIF格式的私钥,最后以WIF格式显示获取到的地址和私钥。
代码运行结果如下(你的结果应该不一样):
Address: mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1
WifKey: cTEAh2DsC7KE4mzY5YFTYommzr7czbdiBfLPsXZrF6o3zSQLLw9Q
4、使用 BitcoinJS 密钥导入私有 WIF
如果你有其他钱包的WIF格式的私钥,也可以导入BitcoinJS并导出对应的地址,例如:
let wifKey = 'cTEAh2DsC7KE4mzY5YFTYommzr7czbdiBfLPsXZrF6o3zSQLLw9Q'
let keyPair = new Btc.ECPair.fromWIF(privKey, TestNet)
console.log("Address:", keyPair.getAddress())
结果类似如下:
Address: mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1
5、为私钥使用密码辅助记忆
有点麻烦,我们可以用密码来辅助推导出私钥,这样就可以进一步推导出公钥和地址了。以下代码使用BitcoinJS和nodejs大数计算库bigi实现:
const BigInteger = require('bigi')
let passphrase = 'J@vaScr1pt'
let keyPair = generateAddressFromSHA256Hash(passphrase);
console.log('Address: ', keyPair.getAddress())
function generateAddressFromSHA256Hash(passphrase) {
let hash = Btc.crypto.sha256(passphrase);
let d = BigInteger.fromBuffer(hash);
let keyPair = new Btc.ECPair(d, null, { network: TestNet });
return keyPair;
}
结果如下:
Address: mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1
p>
现在使用 generateAddressFromSHA256Hash() 函数,我们可以随时使用密码 J@VaSc1pt 发送地址 mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1 及其对应的密钥对。
6、使用测试链Faucet给账户充值
在继续之前,我们需要为我们创建的比特币地址充值。网上有一些比特币测试链的水龙头,可以用来为任意指定的比特币地址存一些比特币查比特币账户,用于开发和测试。我用这个查比特币账户,当然你可以搜索更多这个水龙头。
让Faucet为我们的测试地址充值如下:
酷,现在我们有1.3个比特币可以继续测试了!
7、查询比特币地址详情
查询一个比特币地址的余额、UTXO等信息有两种方式:使用自己的节点,或者使用第三方API。为简单起见,本教程我们使用第三方API查询指定比特币地址的余额和UTXO:
onst request = require('request');
let addr = 'mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1'
let apiUrl = 'https://testnet.blockexplorer.com/api/addr/'
// log unspent transactions
request.get(apiUrl + addr + '/utxo', (err, req, body) => {
console.log('utxo => ', JSON.parse(body))
}
);
// log balance
request.get(apiUrl + addr + '/balance', (err, req, body) => {
console.log('balance => ', JSON.parse(body))
}
);
结果如下:
utxo => [{
address: 'mqVKYrNJcMkdK2QHFNEd1P6Qfc1Sqs3hu1',
txid: '2d742aa8409ee4cd8afcb2f59aac6ede47b478fafbca2335c9c04c6aedf94c9b',
vout: 0,
scriptPubKey: '76a9146d622b371423d2e450c19d98059867d71e6aa87c88ac',
amount: 1.3,
satoshis: 130000000,
height: 1180957,
confirmations: 14
}]
balance => 130000000 // 1.3 BTC = 130000000 satoshis
8、用BitcoinJS构造一个比特币转账裸交易
构建比特币裸交易有点复杂,我们需要自己组织交易的输入和输出。
首先用BitcoinJS交易构造器TransactionBuider创建一个交易对象:
let tx = new Btc.TransactionBuilder(TestNet)