BCH Library

最近想做一些使用網頁進行的遊戲或小工具,結合中的加密貨幣的Bitcoin Cash。一開始尋找協助開發的的套件時,找到Bitcoin.com Link,由手機上滿好用的BCH錢包App開發的SDK,但不知為何使用時一直無法正確連線。後來再找到一個叫minimal-slp-wallethttps://www.npmjs.com/package/minimal-slp-wallet)的套件,使用起來還不錯,在此分享一下心得與簡易教學。

建立錢包

import BchWallet from 'minimal-slp-wallet'

const words = "{BIP-39 words}"
const options = {
    "interface": "consumer-api",
    "restURL": "https://free-bch.fullstack.cash",
    "hdPath": "m44/0/0/0/0"
}
async function getWallet() {
    const wallet = new BchWallet(words, options)
    await bch.walletInfoPromise
    return wallet
}

這邊有個要注意的是第七行的hdPath,在NPM網站上的範例寫著HdPath,可是不起作用,也不符合駝峰式寫法,應該作者是筆誤了,改成hdPath才會生效。在不指定words的時候,會自動產生一個新的錢包,如果沒有將新錢包的words記錄下來,下次重開就會消失了喔!

關於BIP-39

順便提一下BIP-39是什麼,他是在加密貨幣錢包中規範的助憶詞。它是由2048個英文單字組成一個集合,再從中挑選12個或更多個單字成為錢包的種子,助憶詞讓錢包主人更方便記錄錢包。如果好奇是哪2048個單字,可以參考GitHub上這篇。有趣的是根據bip-0039-wordlists.md的介紹看來,還有日文字、韓文字、繁體中文字、簡體中文字的版本呢。

助憶詞與衍生路徑

基本上掌握助憶詞就等於擁有了錢包,但是我在測試時發現同一組助憶詞在Bitcoin.com錢包上與Minimal-SLP-Wallet上看到的內容不一樣,研究一下發現是HD Path差太多的關係。由一組助憶詞就可以展開中多個錢包公鑰與私鑰,展開的樹狀結構由HD Path表達,在Bitcoin.com App裡面稱為衍生路徑。看來這個HD Path差異太大時,就算有同一組助憶詞也不太容易發現錢包內擁有的真正財產數量呢。