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で送金したいわけで。

経緯