比特幣是一種全球性的去中心化數字貨幣,它的交易數據保存在一條公共的區塊鏈中,任何人都可以查詢和驗證交易的合法性。在javascript中,我們可以使用各種庫和API來處理比特幣的交易和區塊鏈數據。
一個比特幣交易通常包含輸入、輸出和手續費三個部分。輸入是指之前已有的、屬于自己的比特幣,這些比特幣會用于本次交易的支出;輸出則是指轉賬到別人賬戶的比特幣,可以有多個輸出地址,每個輸出地址可以指定不同的比特幣金額;手續費是指交易者為了獲得交易確認而支付給礦工的小費。
// 一個簡單的比特幣交易
{
"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中,我們可以使用比特幣節點的API獲取區塊鏈數據和交易信息。一個比特幣節點通常運行了一個完整的比特幣核心客戶端,并支持RPC協議,我們可以使用這個協議與節點交互。以下是一個獲取指定交易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();
除了獲取數據外,我們還可以使用一些庫來構造、簽名和發送比特幣交易。以下是一個使用bitcoinjs-lib庫構造比特幣交易的例子:
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();
除了傳統的比特幣,還有一些派生的數字貨幣,比如萊特幣、狗狗幣等,它們的交易和區塊鏈數據與比特幣類似。以下是一個使用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提供了豐富的工具來處理比特幣和其它數字貨幣的交易和區塊鏈數據,我們可以使用這些工具來構建區塊鏈應用、進行數字貨幣交易。