Node.jsで参照することはできた。
暗号通貨を使うのに必要なライブラリだと思う。でも何をするためのもので、どう使うのかさっぱりわからなかった。他の関連パッケージも知る必要がありそう。
ブツ
情報源
bitcoinjs-libのREADMEを読む
ブラウザでも使える?
bitcoinjs-libはブラウザでも使えるっぽい。browserによるとbrowserifyとやらを使えば可能らしい。
使用例
bitcoinjs-libのドキュメントは使用例しかないらしい。コードだったが、さっぱりわからなかった。
試す
とりあえず最小限のコードを書いてみた。
プロジェクト作成
NAME=try-bitcoinjs-lib
mkdir $NAME
cd $NAME
npm init -y
プロジェクト名は適当にtry-bitcoinjs-lib
とした。
インストール
npm install bitcoinjs-lib
npm install ecpair bip32
READMEにはこう書いてあった。でも私が今回試したいのはbitcoinjs-lib
だけなんだけど。
コード作成
vim index.js
const bitcoin = require('bitcoinjs-lib');
console.log(bitcoin)
インポートして、それを標準出力するだけ。使い方がまだわからないのでこれが限界。
実行
node index.js
{
address: {
fromBase58Check: [Function: fromBase58Check],
fromBech32: [Function: fromBech32],
toBase58Check: [Function: toBase58Check],
toBech32: [Function: toBech32],
fromOutputScript: [Function: fromOutputScript],
toOutputScript: [Function: toOutputScript]
},
crypto: {
ripemd160: [Function: ripemd160],
sha1: [Function: sha1],
sha256: [Function: sha256],
hash160: [Function: hash160],
hash256: [Function: hash256],
taggedHash: [Function: taggedHash]
},
networks: {
bitcoin: {
messagePrefix: '\x18Bitcoin Signed Message:\n',
bech32: 'bc',
bip32: [Object],
pubKeyHash: 0,
scriptHash: 5,
wif: 128
},
regtest: {
messagePrefix: '\x18Bitcoin Signed Message:\n',
bech32: 'bcrt',
bip32: [Object],
pubKeyHash: 111,
scriptHash: 196,
wif: 239
},
testnet: {
messagePrefix: '\x18Bitcoin Signed Message:\n',
bech32: 'tb',
bip32: [Object],
pubKeyHash: 111,
scriptHash: 196,
wif: 239
}
},
payments: {
embed: [Getter],
p2ms: [Getter],
p2pk: [Getter],
p2pkh: [Getter],
p2sh: [Getter],
p2wpkh: [Getter],
p2wsh: [Getter]
},
script: {
OPS: [Getter],
isPushOnly: [Function: isPushOnly],
compile: [Function: compile],
decompile: [Function: decompile],
toASM: [Function: toASM],
fromASM: [Function: fromASM],
toStack: [Function: toStack],
isCanonicalPubKey: [Function: isCanonicalPubKey],
isDefinedHashType: [Function: isDefinedHashType],
isCanonicalScriptSignature: [Function: isCanonicalScriptSignature],
number: { decode: [Function: decode], encode: [Function: encode] },
signature: { decode: [Function: decode], encode: [Function: encode] }
},
Block: [Getter],
Psbt: [Getter],
opcodes: [Getter],
Transaction: [Getter]
}
で?
結局bitcoinjs-libでは何ができるの?
- アドレス作成?
- 送金?
それはどうやるの?
標準出力されたメソッド名から察するに暗号化を担うライブラリなのかな?
それぞれどの場面でどう使うのかわからんけど。たぶん送金するときの署名に使うのかな?
examplesを見ろというが
READMEにはexamplesを見ろと書いてある。しかもそれが「非常に理解しやすいはず」とのこと。マジか。このわけわからんコード山盛りでわかりやすいのか。レベル高すぎる。とりあえず見てみよう。
初っ端のTaproot
とかいう輩からしてさっぱりわからんのでググった。
Taprootは、Bitcoinスクリプトの操作方法を変更し、プライバシー、スケーラビリティ、セキュリティの向上を目的としています。
はぁ。わからんけどまあいいや。Taproot
のコードを見てみよう。
Buffer.from()
って何? 最初のほうに出てくるコードからして謎。このBuffer
とかいうのはどこから湧いてきたの? ググったところBufferはNode.jsの標準ライブラリらしい。そういえば前に見たことある気がする。
さらにbitcoinjs-lib
以外にもcrypto
, bip32
, regtest-client
, tiny-secp256k1
といったパッケージを使っている。
シンプルにbitcoinjs-lib
の動作例だけみたいのだけど。ほかのパッケージと併用するものなのか?
結論
bitcoinjs-lib
を理解するためには他のパッケージも理解する必要がありそう。
まず送金処理の全体像を把握したい。それをコードから推測するためには関連するパッケージも理解していないとダメそう。なら次はほかのパッケージも見てみよう。
所感
一体いつになったら送金処理を書けるようになるやら。まあMpurse APIならsendAsset
で一発なんだけど、Mpurseが使えないElectronで送金したいわけで。