Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoin Core 0.12.0の追加機能

先月Bitcoin Coreの0.12.0がリリースされてる。

Bitcoin Core :: Bitcoin Core 0.12.0 Released!

追加機能

  1. 署名の検証が7倍高速に
    Bitcion CoreではOpenSSLを使って楕円曲線暗号の署名の検証をしていたけどこの部分を3年前から作り始めたlibsecp256k1に置き換えることで64bitマシンで7倍高速になったみたい。

  2. アップロードトラフィックの制限
    ノードがアップロード及び接続中のピアに配信するデータ量の制限をかける機能を追加。1日あたりの配信量のソフトリミットを指定するパラメータを設定する。

  3. メモリプールの制限によるクラッシュの防止
    旧バージョンでは、メモリプールのサイズの制限が無かったため、RAMの搭載量が少ないノードでは最低手数料のトランザクションを受け付けながらも、メモリのキャパシティオーバーになりクラッシュするということが発生していたし、攻撃者に狙われるポイントでもあった。
    そこで、メモリプールのサイズにデフォルトの制限値が設けられた(ユーザが指定可能)。メモリプールのメモリ量が制限値に達すると、新しいトランザクションの受け入れは引き続き行われるが、メモリプール内のトランザクションの内、一番手数料が少ないトランザクションが削除されるようになる。

  4. 手数料ブーストできるトランザクションのオプションを追加
    トランザクションの手数料があまりに低いとずっと承認されずに、そのトランザクションのUTXOはある意味凍結された状態になる。適切な手数料を計算するのは難しく、だいたい少なく見積もって承認されない状態が続くか、過大に見積もって資産を損失する。
    Opt-in Replace-by-Feeという新しい機能を使うとブロードキャストしたけどまだ承認されてないトランザクションの手数料をより高く設定したトランザクションに置き換えることができる。最初に小額の手数料を設定し承認されればそれで良し、承認されなければ手数料を増やしていくということができる。

  5. Tor*1の自動利用
    ノードがTorが実行中かどうか検出し、実行中の場合は自動的にTorを介して他のノードに接続する。

  6. ZeroMQを使った通知の購読
    今までは外部サービスが新しいブロックやトランザクションを受け取った際の通知を購読するのには制限があったが、ZeroMQと統合されたことでそれが可能になったと。

  7. ウォレットのためのディスク使用量の削減
    Bitcoin Coreをフルノードで動作させると現時点で60GBほどのディスクを使用し、ディスクキャパシティが低い環境だとツラいので、pruned modeで動作する仕組みが導入された。この機能では、ノードは未使用の出力をトラッキングするのにフォーカスし、既に使用済みのブロックや出力を忘れるようになる。これによって2GBほどでフルノードを実行可能になる。

  8. マイナーのための高速なブロックの組み立て
    プロックテンプレートの作成には高い計算時間と多くのメモリを必要としマイナーにとって非常に高価な処理となる。この内、メモリを大量に消費するのは、ブロックの組み立てのためにメモリプール内にある各トランザクションが様々な計算に使われるため常にインメモリに入れられている必要があるため。 0.12.0のリリースで、ブロックを組み立てる際に個々のトランザクションの計算が行われなくなり、メモリプール内にトランザクションがヒットした際に事前に計算されキャッシュされるようになった。これによりメモリ使用量の削減になり計算時間の削減にもなると。

所感

気になったポイント

  • サイズの大きいトランザクションを作ると承認までにえらい時間がかかるのでOpt-in Replace-by-Feeでトランザクションの手数料を変更できるのは便利だなー。
  • ブロックチェーンを利用したアプリケーション作る側にとってはブロックやトランザクションの通知が購読できるのはありがたい。
  • pruned modeでフルノードのディスクが2GBで済むというのはかなり大きな削減。
  • Open Assets Protocolみたいにアセットの発行トランザクションまで遡る必要があるタイプのプロトコルでは、pruned modeは使えない?

*1:Torは自分のIPアドレスを相手に知らせることなく通信する仕組み