nodejs調(diào)用bitcoin轉賬功能

nodejs與btc網(wǎng)絡交互使用bitcoinjs-lib模組
使用BTC測試網(wǎng)進行測試

安裝模組

npm i bitcoinjs-lib

根據(jù)隨機字符構造兩個函數(shù)

function rng () { return Buffer.from('tmd123zzzzzzzzzzzzzzzzzzzzzzzzzz') }
function rng2 () { return Buffer.from('tmd321333zzzzzzzzzzzzzzzzzzzzzzz') }

生成錢包1媒至, 指定測試鏈

const alice = bitcoin.ECPair.makeRandom({network: testnet, rng});
const { address } = bitcoin.payments.p2pkh({ pubkey: alice.publicKey, network: testnet });
// console.log(address);
// console.log(alice.toWIF())
// 地址: mmH6e8tfLyvrrnFF3o1scaNsPXShGY89rb
// 私鑰: L182iNrxy9rSPQfEg5X1P1sR9qAbS1pbxPosguD8Sx5tYauV3bYm

生成錢包2

const bob = bitcoin.ECPair.makeRandom({network: testnet, rng: rng2 });
const { address:address2 } = bitcoin.payments.p2pkh({ pubkey: bob.publicKey, network: testnet });
// console.log(address2);
// console.log(bob.toWIF())
// 地址: miAMpCdoM3SuRMRoEVHp8smFdDAz29WA9g
// 私鑰: L182iNub4Z8Ly6H13jcx7i82jKq3czc7WzFso3z249LuMcMjzQXo
  • 比特幣轉賬需要提取或合并所有未花費的交易中的比特幣蹋艺,才能實現(xiàn)交易厘熟。
  • 描述起來比較復雜脚线,下圖是個例子屎媳,我們從區(qū)塊瀏覽器查到我最近一筆未花費支出脖捻,某個地址轉了0.03個BTC給我,在這一筆交易中阔逼,我有0.03個BTC。
  • 如果我要轉出0.5個BTC給他人地沮,我需要合并其他的交易嗜浮,否則將會余額不足,雖然在我這個地址中有足夠的BTC摩疑。


    1.png

    2.png
單個哈希交易危融。
const transfer1 = async () => {

  // 注意要指定交易對象是測試鏈的
  const txb = new bitcoin.TransactionBuilder(testnet);
  txb.setVersion(1);
  // 在這個交易中, bob在第0個位置雷袋,上圖所示
  txb.addInput('5799a647d6b89a9f73122d75faee6f5a0210bd3cb22c48a70d35eac33ce5d426', 0);
  
  // 這里把btc轉給 alice 的地址吉殃,金額是0.02 但是要*100000000, 也就是2000000,
  // 剩余的金額沒有設置招零地址接收,則被視為手續(xù)費楷怒,被區(qū)塊網(wǎng)絡收取
  // 每一筆交易只有已花費和未花費兩種狀態(tài)蛋勺,不存在消費一部分的狀態(tài),
  // 所以合并多筆交易的話率寡,只要未花費迫卢,都可以合并。
  txb.addOutput('mmH6e8tfLyvrrnFF3o1scaNsPXShGY89rb', 2000000);

  // 簽名交易冶共,0代表索引乾蛤,輸入排序每界,這里只有一個輸入,所以是第0位家卖。
  txb.sign(0, bob);

  // 序列化成一串字符
  const tx = txb.build().toHex();
  console.log(tx);

  // 在一個測試鏈的節(jié)點把交易廣布出去
  const result = await fetch('https://api.blockcypher.com/v1/btc/test3/txs/push',{
    method:'post',
    headers:{'Content-Type':'application/json'},
    body:JSON.stringify({tx})
  });

  // 打印結果
  console.log(result);
};

transfer1();
多筆交易上荡,自動合并趴樱。
const transfer2 = async () => {
  const url = 'https://api.blockcypher.com/v1/btc/test3/addrs/';
  const res = await fetch(url+address2);
  const json = await res.json();
  const balance = json.balance;
  // console.log(balance/100000000);

  const txrefs = json.txrefs;

  // 過濾掉已經(jīng)被花費了的交易,以及自己不在接收列表的交易
  const unspentList = txrefs.filter(item=> !item.spent_by && item.tx_output_n !== -1);
  // 這個地址還可以查詢余額
  // console.log(unspentList);

  // 構建交易對象
  const txb = new bitcoin.TransactionBuilder(testnet);
  txb.setVersion(1);

  // 批量插入未花費交易
  unspentList.forEach(item=>txb.addInput(item.tx_hash, item.tx_output_n));

  // 轉出賬戶
  txb.addOutput('mmH6e8tfLyvrrnFF3o1scaNsPXShGY89rb', 2000000);

  // 設置找零地址酪捡,如果忘記了叁征,就會丟失所有BTC !9滢薄^嗵邸!S婪!F『簟!呢袱!
  // 如果不預留手續(xù)費官扣,交易可能會一直不被打包!
 // 3000 為手續(xù)費
  txb.addOutput('miAMpCdoM3SuRMRoEVHp8smFdDAz29WA9g',balance - 2000000 - 3000);
  
  // 批量簽名羞福,根據(jù)索引即可
  unspentList.forEach((item,index)=>{txb.sign(index, bob)});

  // 序列化交易
  const tx = txb.build().toHex();
  // console.log(tx);

  // 在一個測試鏈的節(jié)點把交易廣布出去
  const result = await fetch('https://api.blockcypher.com/v1/btc/test3/txs/push',{
    method:'post',
    headers:{'Content-Type':'application/json'},
    body:JSON.stringify({tx})
  });

  // 打印結果
  console.log(result);


};

transfer2();

全部代碼

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惕蹄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坯临,更是在濱河造成了極大的恐慌焊唬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看靠,死亡現(xiàn)場離奇詭異赶促,居然都是意外死亡,警方通過查閱死者的電腦和手機挟炬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門鸥滨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谤祖,你說我怎么就攤上這事婿滓。” “怎么了粥喜?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵凸主,是天一觀的道長。 經(jīng)常有香客問我额湘,道長卿吐,這世上最難降的妖魔是什么旁舰? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮嗡官,結果婚禮上箭窜,老公的妹妹穿的比我還像新娘。我一直安慰自己衍腥,他們只是感情好磺樱,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婆咸,像睡著了一般竹捉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擅耽,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天活孩,我揣著相機與錄音物遇,去河邊找鬼乖仇。 笑死,一個胖子當著我的面吹牛询兴,可吹牛的內(nèi)容都是我干的乃沙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼诗舰,長吁一口氣:“原來是場噩夢啊……” “哼警儒!你這毒婦竟也來了?” 一聲冷哼從身側響起眶根,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蜀铲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后属百,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體记劝,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年族扰,在試婚紗的時候發(fā)現(xiàn)自己被綠了厌丑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡渔呵,死狀恐怖怒竿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扩氢,我是刑警寧澤耕驰,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站录豺,受9級特大地震影響朦肘,放射性物質發(fā)生泄漏托嚣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一厚骗、第九天 我趴在偏房一處隱蔽的房頂上張望示启。 院中可真熱鬧,春花似錦领舰、人聲如沸夫嗓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舍咖。三九已至,卻和暖如春锉桑,著一層夾襖步出監(jiān)牢的瞬間排霉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工民轴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留攻柠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓后裸,卻偏偏與公主長得像瑰钮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子微驶,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容