ビットコイン公式クライアント「Bitcoin Core」の新バージョン (0.18.0) がリリースされました

Masahiko Hyuga
May 14 · 27 min read

こんにちは!フレセッツ株式会社の日向です。

平成から令和に変わり、10連休もの巨大ゴールデンウィークが終わり、みなさんいかがお過ごしでしょうか?
まだ休みボケが抜けきれない方も多いことと思いますが、そんな令和元年5月2日ごろに公式版ビットコインクライアントの「Bitcoin Core 0.18.0」がリリースされました。
そこで本記事ではこの最新版クライアントのリリースノートの日本語訳を掲載します。
細かいニュアンスの違いなどがある場合があり ますので、英語版の正式なリリースノートと併せてお読みください。

Bitcoin Core v0.18.0 の起動画面

アップグレード方法

古いバージョンを起動している場合には、まずシャットダウンしてください。
完全にシャットダウンするまで待った後(古いバージョンでは数分ほどかかるでしょう)、インストーラを起動する(Windows の場合)、または /Applications/Bitcoin-Qtをコピー (Mac の場合)、または bitcoind/bitcoin-qt をコピー(Linux の場合)してください。

初めて 0.15.0 以上のバージョンを起動する場合には、チェーンステートデータベースが新しいフォーマットに変換されます。マシンの性能にもよりますが、数分から0.5時間で完了するでしょう。

ブロックデータベースのフォーマットもバージョン 0.8.0 で変更されたことに注意してください。
0.8 以前のバージョンからバージョン 0.15.0 以降への自動的な更新コードはありません。0.7.x 以前からブロックチェーンを再ダウンロードせずに直接更新することはサポートされていません。
しかしながらいつものように、古いウォレットのバージョンは依然としてサポートされています。

互換性

Bitcoin Core は以下のようなオペレーティングシステムでサポートされ、広くテストされています: Linux カーネル、macOS 10.10+ および Windows 7 またはそれ以降のバージョン。
サポートされていないシステムで Bitcoin Core を使用することは推奨されません。

Bitcoin Core はその他の Unix ライクなシステムでも動作するはずですが、それほど高頻度にテストが行われている訳ではありません。

0.17.0 以降では macOS 10.10 未満はサポートされなくなりました。0.17.0 は Qt 5.9.x を利用してビルドされていますが、これは macOS 10.10 よりも古いバージョンをサポートしていません。
また、Bitcoin Core は macOS の「ダークモード」が有効された場合の外観の変更がまだ行われません。

以前からサポートされている CPU プラットフォームに加えて、このリリースでのコンパイル済み配布物は RISC-V プラットフォームに対するバイナリを提供しています。

contrib/init/bitcoind.service に置かれているsystemd ユニット設定ファイルをお使いの場合には、~bitcoin/.bitcoin の代わりに/var/lib/bitcoind をデータディレクトリとして使用するようになりました。新しい設定ファイルに切り替える際には、/var/lib/bitcoind が存在し十分な容量があることを確認し(df -h /var/lib/bitcoind を利用してください)、必要であれば既存のデータディレクトリをコピーしてください。詳細については systemd 初期ファイルセクションを参照してください。

既知の問題

ウォレットGUI

(1) コインコントロール機能を有効化しており、(2) 複数のウォレットを読み込み同時に利用している上級ユーザーに対して: コインコントロールの入力セクションダイアログは、ドロップダウンメニューを用いてウォレットを切り替える際に誤って間違ったウォレット状態を保持する可能性があります。
現在のところ、コインコントロール機能を複数のウォレットを読み込んだ状態で利用することは推奨されません。

特筆すべき変更

マイニング

  • getblocktemplate の呼び出しは segwit ルールが指定されていない場合失敗します。
    segwit を指定しない getblocktemplate の呼び出しは、マイナーにとってより低い報酬となってしまいますので、ほぼ確実に設定ミスでしょう。
    失敗した呼び出しは、segwit ルールを有効化するための方法を説明するエラーメッセージを表示します。

設定オプションの変更点

  • 設定ファイルにおいて認識できないセクション名が利用されていた場合には警告が表示されます。
    認識できるセクションは [test][main]、および [regtest] になります。

systemd 初期ファイル

systemd 初期ファイル (contrib/init/bitcoind.service) は ~bitcoin/.bitcoin の代わりに/var/lib/bitcoind をデータディレクトリとして使うように変更されました。
この変更により Bitcoin Core は他のサービスに対してより一貫性を持ち、systemd 初期ファイルは既存の Upstart および OpenRC 設定に対してより一貫性を持つようになりました。

設定、PID、データディレクトリは、これらの生成や権限設定を管理する systemd によって完全に管理されることになりました。

contrib/init 以下にある提供されている初期ファイルを利用する際に、 datadir オプションを /etc/bitcoin/bitcoin.conf で書き換えるのは効果がなくなりました。これは /etc/bitcoin/bitcoin.conf で設定されているオプションに対し、初期ファイルで設定されているコマンドライン引数が優先されるからです。

ドキュメンテーション

  • JSON-RPC インタフェースに関する短いドキュメントには、ウォレット状態や mempool 状態など、RPCの結果に異なるサブシステムからのデータ間の不整合が含まれる可能性がある場合が記載されています。
    REST インタフェースのドキュメントには同じルールが適用される旨が追記されています。

ビルドシステムの変更点

  • 新しい --disable-bip70 オプションを ./configure に渡すことで Bitcoin-Qt を BIP70 支払いプロトコルおよび libssl へのリンクがない状態でビルドできるようになりました。
    支払いプロトコルにより Bitcoin Core は libssl の過去の脆弱性に晒されていましたが、BIP70 のサポートが不要なビルダーについてはこのオプションを指定することで将来的な脆弱性へ晒されることを減らすことが推奨されます。

新しい RPC

  • getnodeaddresses このノードの知るピアのアドレスを取得します。DNS シーダを利用せずに接続先ノードを発見することができます。

RPCの更新点

注意: いくつかの低レベルな RPC の変更は、主にテストに有用であり、これらは以下の低レベル変更点のセクションに記載されています。

  • getpeerinfo は、ピアの BIP133 料金フィルタに設定された追加の minfeefilter フィールドを返すようになりました。
    これを使用して、デフォルトの最小リレー料金を下回るトランザクションを受け入れても構わないと思っているピアがあることを検出できます。

廃止予定または削除された RPC

  • signrawtransaction はバージョン 0.17.0 で廃止予定および特別な設定オプションによって隠された後に削除されました。

RESTの変更

  • 新しい /rest/blockhashbyheight/ エンドポイントは、その高さ (ジェネシスブロックの後に何ブロックあるか) に基づいて、現在最良のブロックチェーン内のブロックのハッシュを取得するために追加されています。

グラフィカルユーザインタフェース (GUI)

  • 新しいウィンドウメニューが、既存のファイル、設定、およびヘルプメニューと一緒に追加されます。
    新しいウィンドウを開くような他のメニューのいくつかの項目は、この新しいウィンドウメニューに移動しました。

ツール

  • 新しい bitcoin-wallet ツールが Bitcoin Core の他の実行ファイルと一緒に配布されています。
    RPC を使用しなくても、このツールを使えばいまのところ、新しいウォレットファイルを作成したり、ウォレットが暗号化されているかどうか、HD シードを使用しているかどうか、トランザクションの数、アドレス帳のエントリがいくつなのかなど、既存のウォレットに関する基本情報を表示できます。

予定されている変更

このセクションでは他のビットコインソフトウェアやサービスに対して影響を与えるであろう Bitcoin Core の予定されている変更について説明しています。

  • バージョン 0.16.0 以降、 Bitcoin Core の内蔵ウォレットはデフォルトで、ユーザーが支払いを受けたいときに P2SH でラップされた segwit アドレスを生成します。
    これらのアドレスは、広く使用されているすべてのソフトウェアと下位互換性があります。 Bitcoin Core 0.20 (0.18から約1年後に予定) から、 Bitcoin Core はデフォルトでネイティブの segwit アドレス (bech32) を使用するようになり、追加の手数料節約やその他の利点がもたらされます。
    現在、多くのウォレットやサービスがすでに bech32 アドレスへの送金をサポートしています。
    Bitcoin Core プロジェクトで十分な追加での普及が確認された場合は、代わりに Bitcoin Core 0.19 で bech32 形式の受け取りアドレスがデフォルトになります (2019年11月頃)。ユーザーが GUI または RPC で要求した場合、 P2SH でラップされた segwit アドレスは引き続き提供され、更新を望まない人はだれでもデフォルトのアドレスタイプを設定できます。 (同様に、今すぐデフォルトを変更したいと思っている先駆的なユーザは、 0.16.0 以上の任意の Bitcoin Core リリースで addresstype=bech32設定オプションを設定することもできます。)

廃止された P2P メッセージ

  • BIP 61 リジェクトメッセージは現在非推奨です。
    リジェクトメッセージは P2P ネットワークでは使用例がなく、ほとんどのネットワークノードによるデバッグのためにログに記録されるだけです。 さらに、それらは帯域幅を増加させ、プライバシーとセキュリティにとって有害になる可能性があります。
    v0.17 以降、 -enablebip61=0 オプションを使用して BIP 61 メッセージを無効にすることが可能です。
    完全に削除される前に、 BIP 61 メッセージは将来のバージョンでデフォルトで無効にされる予定です。

低レベルの変更

このセクションでは主にテストで有用で、本番環境にとってはほとんど関係のない RPC の変更点について解説しています。変更は完全性のために言及されています。

RPC

  • submitblock RPC は以前では、はじめにブロックが処理された際に拒否されたブロックが無効であった理由を返しており、その後同じブロックを処理したときには一般的な「重複」拒否メッセージを返していました。
    現在では無効なブロックを拒否する基本的な理由を常に返し、すでに受け入れられている有効なブロックに対してのみ「重複」を返します。

設定

  • -usehd 設定オプションはバージョン 0.16 で削除されました。
    このバージョン以降、作成されたすべての新しいウォレットは、階層的決定性ウォレットです。 このリリースでは、-usehd を指定すると無効な設定オプションとなります。

ネットワーク

  • このリリースでは、未使用の incoming 接続スロットがある場合、不正な動作(無効なデータの送信など)でノードが自動的に切断されたピアは、ノードに再接続できます。
    スロットがいっぱいになると、過去に問題がないノードのためのスペースを空けるために、不正な動作を行ったノードは切断されます(ただし、他の方法、例えばピアを豊富に持たないネットワーク部分に接続するなどして自分のノードを助けているのでなければ)。
    以前は、 Bitcoin Core は、不正なピアの IP アドレスを一定期間 (デフォルトは1日) 禁止していました。
    これは複数の IP アドレスを持つ攻撃者によって簡単に回避することができました。
    setban RPCを使用するなどして手動でピアを禁止した場合、そのピアからの接続はすべて拒否されます。

ウォレット

  • HD シードが最初に利用可能になった際には、鍵メタデータをアップグレードする必要があります。
    暗号化されていないウォレットの場合、これはウォレットのロード時に発生します。
    暗号化されたウォレットの場合、これはウォレットが初めてロック解除されたときに発生します。

セキュリティ

  • このリリースでは、OpenSSL のものを利用していた乱数生成器(RNG)が Bitcoin Core 自身の実装に変更されていますが、一方で Bitcoin Core によって収集されたエントロピーは OpenSSL に送り出され、プログラムが強い乱雑性を必要とするときに読み戻されます。
    これにより、 Bitcoin Core は OpenSSL に依存する必要がなくなり、過去にセキュリティ問題を引き起こしていた依存関係がなくなりました。
    新しい実装では、 rdseed CPU 命令をサポートするハードウェアを含む複数のソースからエントロピーを収集します。

特定のプラットフォームに対する変更

  • macOS では、 Bitcoin Core は最初のブロックチェーンのダウンロード中、現在のチェーンチップの後ろの 100 ブロックを超えて追いついたとき、またはチェーンデータのインデックスを再作成するときに、アプリケーションの CPU スロットル ( “app nap”) を止めます。
    これにより、オペレーティングシステムが電力を節約しようとしているために、これらの操作に時間がかかりすぎるのを防ぐことができます。

・お知らせ

■ブロックチェーンエンジニア集中講座開講中!
HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。
ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント

詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Masahiko Hyuga

Written by

GBEC Tech Blog

This Blog is for all Blockchain Engineer

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade