比特幣是一種全球性的去中心化數(shù)字貨幣,它的交易數(shù)據(jù)保存在一條公共的區(qū)塊鏈中,任何人都可以查詢和驗(yàn)證交易的合法性。在javascript中,我們可以使用各種庫和API來處理比特幣的交易和區(qū)塊鏈數(shù)據(jù)。
一個(gè)比特幣交易通常包含輸入、輸出和手續(xù)費(fèi)三個(gè)部分。輸入是指之前已有的、屬于自己的比特幣,這些比特幣會(huì)用于本次交易的支出;輸出則是指轉(zhuǎn)賬到別人賬戶的比特幣,可以有多個(gè)輸出地址,每個(gè)輸出地址可以指定不同的比特幣金額;手續(xù)費(fèi)是指交易者為了獲得交易確認(rèn)而支付給礦工的小費(fèi)。
// 一個(gè)簡單的比特幣交易
{
"inputs": [
{
"prev_tx": "1f2e...",
"vout": 1,
"scriptSig": "...",
"n": 0
}
],
"outputs": [
{
"value": 0.01,
"scriptPubKey": "...",
"n": 0
},
{
"value": 0.02,
"scriptPubKey": "...",
"n": 1
}
],
"txid": "d8b7...",
"version": 1,
"locktime": 0,
"size": 225,
"vsize": 140,
"weight": 560
}
在javascript中,我們可以使用比特幣節(jié)點(diǎn)的API獲取區(qū)塊鏈數(shù)據(jù)和交易信息。一個(gè)比特幣節(jié)點(diǎn)通常運(yùn)行了一個(gè)完整的比特幣核心客戶端,并支持RPC協(xié)議,我們可以使用這個(gè)協(xié)議與節(jié)點(diǎn)交互。以下是一個(gè)獲取指定交易ID的交易信息的例子:
const bitcoin = require('bitcoin-core');
const client = new bitcoin({ host: 'localhost', network: 'mainnet' });
const txid = 'd8b7...';
const getTransaction = async () => {
const tx = await client.getTransaction(txid);
console.log(tx);
}
getTransaction();
除了獲取數(shù)據(jù)外,我們還可以使用一些庫來構(gòu)造、簽名和發(fā)送比特幣交易。以下是一個(gè)使用bitcoinjs-lib庫構(gòu)造比特幣交易的例子:
const bitcoin = require('bitcoinjs-lib');
const privateKey = 'xprv9...';
const fromAddress = '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2';
const toAddress = '3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy';
const valueSatoshis = 1000000; // 0.01 BTC in satoshis
const buildTransaction = () => {
const privateKeyBuffer = bitcoin.bip32.fromBase58(privateKey).privateKey;
const tx = new bitcoin.TransactionBuilder();
tx.addInput('prev_tx', 0); // use a previous transaction's output
tx.addOutput(toAddress, valueSatoshis); // send 0.01 BTC to the recipient
tx.sign(0, privateKeyBuffer); // sign the first input with the private key
const txHex = tx.build().toHex();
console.log(txHex);
}
buildTransaction();
除了傳統(tǒng)的比特幣,還有一些派生的數(shù)字貨幣,比如萊特幣、狗狗幣等,它們的交易和區(qū)塊鏈數(shù)據(jù)與比特幣類似。以下是一個(gè)使用litecoin-api庫獲取萊特幣交易信息的例子:
const litecoin = require('litecoin-api');
const client = new litecoin({ host: 'localhost', username: 'user', password: 'pass' });
const txid = 'fb13793e83cec99a29e1616c0293f3b3906babb9d964b1d75adff9c3368db0c1';
const getTransaction = async () => {
const tx = await client.getTransaction(txid);
console.log(tx);
}
getTransaction();
總之,javascript提供了豐富的工具來處理比特幣和其它數(shù)字貨幣的交易和區(qū)塊鏈數(shù)據(jù),我們可以使用這些工具來構(gòu)建區(qū)塊鏈應(yīng)用、進(jìn)行數(shù)字貨幣交易。