Overview

Bitcoin Coreのウォレットでsegregated witness(segwit)をデフォルトサポートした最初のバージョンである Bitcoin Core 0.16.0のリリースをお知らせします。 このリリースには以下で説明するいくつかの改善とバグフィックスが含まれます。

最新のリリースはダウンロードページからダウンロードできます。

以下のセクションでは今回のリリースの最も重要な変更について説明します。 詳細についてはリリースノートを参照してください。

Segwit ウォレット

Bitcoin Core 0.16.0はウォレットおよびユーザーインターフェースでsegwitを完全にサポートするようになりました。新しく-addresstype引数が追加され、legacy, p2sh-segwit (デフォルト), および bech32 アドレスをサポートします。この引数はgetnewaddressgetaccountaddresscreatemultisigaddressで生成されるアドレスの種類を制御します。-changetypeも同じオプションで追加され、デフォルトも-addresstypeと同じで、おつり用のアドレスの種類を制御します。

新しいaddress_typeパラメータがgetnewaddressaddmultisigaddress RPCに追加され、生成するアドレスの種類を指定します。 change_typeパラメータがfundrawtransaction RPCに追加され、特定のトランザクションの-changetype引数を上書きします。

  • getnewaddress もしくは *multisig で作成された全てのsegwitアドレスは、明示的にそのredeemscriptがウォレットファイルに追加されます。これはウォレットファイルが最新であれば、segwitアドレスを作成した後のダウングレードが機能することを意味します。
  • ウォレット内のsegwitの鍵に暗黙的なredeemscriptが追加され、これらはファイルに書かれることはありません。これは新しいソフトウェアを使用している限り、古いバックアップのリカバリが機能することを意味します。
  • トランザクションで使われているすべてのキープールの鍵は明示的にウォレットファイルに追加されたそのredeemscriptを取得します。これはsegwitアドレスを含むバックアップからのリカバリ後のダウングレードが機能することを意味します。

一部のRPCではまだsegwitアドレスをサポートしていないことに注意してください。特に、signmessage/verifymessageはsegwitアドレスをサポートしておらず、importmultiも現時点ではサポートしていません。これらのRPCのSegwitサポートは今後のバージョンで引き続き追加される予定です。

トランザクションの宛先がP2WPKHもしくはP2WSHのアウトプットの場合、おつり用のアドレスにデフォルトでP2WPKHが使用されるようになりました。これはどちらの場合でもおつり用のアウトプットが他のアウトプットとできるだけ区別が付かないようにするためです。

BIP173 (Bech32) アドレスサポート (“bc1…“から始まるアドレス)

ネイティブsegwitアドレス(BIP173 / Bech32)が完全にサポートされるようになりました。 これにはBIP173アドレス(v0以外のアドレスも含む)への送金および、それらのアドレス(上記のデフォルトアドレスを含む)を生成する機能が含まれます。

segwitアドレスを使用する際に、Bech32アドレスもしくはP2SHでラップしたアドレスのどちらを使用するか選択するためのチェックボックスがGUIに追加されました。 起動時に-addresstype=bech32を付与するとデフォルトでチェックされます。起動時に-addresstype=legacyを付与するとチェックされず無効化されます。

HD-ウォレットがデフォルトに

旧バージョンとの互換性のないウォレットデータベースの変更により、バージョン0.16.0で作成されたウォレットは以前のバージョンでは拒否されます。 また、バージョン0.16.0では階層的決定性(HD)ウォレットしか作成されません。これは新しいウォレットのみに適用され、以前のバージョンで作成されたウォレットはHDウォレットにはアップグレードされません。

GUIでReplace-By-Feeがデフォルトに

送金画面では、-walletrbfに関係なくBIP125のRBFをデフォルトで使用するようになりました。 これに伴いトランザクションを最終のものとマークするチェックボックスが配置されます。

RPCのデフォルトは変更されません。RBFを使用するには、-walletrbf=1で起動するか 個々のトランザクションにreplaceable引数を使用します。

ウォレットディレクトリの設定

Bitcoin Coreはウォレットのディレクトリの場所を柔軟に変更できるようになりました。 これまでのウォレットデータベースファイルは、bitcoinのデータディレクトリの最上位に格納されていました。 この動作が以下のようになります。

  • 新規インストール(データディレクトリが存在しない場合)では、デフォルトでウォレットはデータディレクトリ内の新しいwallets/サブディレクトリに格納されます。
  • 既存のノード(データディレクトリがすでに存在する)場合、ウォレットはデフォルトでデータディレクトリのルートに格納されます。 データディレクトリのルートにすでにwallets/サブディレクトリが存在する場合、ウォレットはデフォルトでwallets/サブディレクトリ内に格納されます。
  • ウォレットディレクトリの場所は-walletdir=<path>オプションを指定することで上書きすることができます。 <path>は、ディレクトリやディレクトリのシンボリックリックへの絶対パスです。

ウォレットディレクトリの場所を選択する際は注意が必要で、操作中に使用できなくなった場合、資金が失われる可能性があります。

プルーニングノードのシグナリングをサポート (BIP159)

プルーニングノードは、将来のバージョンでBIP159を完全にサポートする準備として、service bitsを使ってBIP159のNODE_NETWORK_LIMITEDを通知できるようになりました。 これによりプルーニングノードも直近のブロックを提供できるようになります。ただし、今回の変更ではこれらのプルーニングノードへの接続はまだサポートしていません。

パフォーマンス: SHA256アセンプリがデフォルトで有効に

サポートされたハードウェア上でSHA256を〜50%スピードアップするSSE4をサポートするアーキテクチャのSHA256ハッシュ最適化(これにより同期およびブロックの検証が~5%高速に)がデフォルトで有効になりました。 以前のバージョンでは、ビルド時に--enable-experimental-asmフラグを使用すれば有効になっていましたが、現在はデフォルトになり、もう実験的ではありません。

GUIの変更

  • GUIで”µBTC”を使用するとBIP176で定義されている”bits”表記で表示されるようになります。
  • 以前使用したアドレスを再利用するオプションが削除されました。これはインボイスを再送信するために必要でしたが、現在はリクエストの履歴があるため必要なくなりました。
  • アドレスとラベル以外に、TXIDによる検索がサポートされました。
  • コインの送金ダイアログに、ウォレットの全ての残高をトランザクションのアウトプットにセットする”利用可能な残高を使用”オプションが追加されました。
  • パスワードダイアログのパスワードフィールドで入力されたパスワードをアンブラインドするトグルが追加されました。

新しい rescanblockchain RPC

手動でブロックチェーンの再スキャンを実行する新しいRPCrescanblockchainが追加されました。 このRPCは再スキャンの開始および終了のブロック高の引数をサポートし、マルチウォレット環境で実行時にブロックチェーンの再スキャンをするのに使用できます。

新しい savemempool RPC

クラッシュや停電時にメモリプールのデータが失われるのを避けるため、現在のメモリプールをディスクに保存する新しいsavemempool RPCが追加されました。

セーフモードがデフォルトで無効に

セーフモードがデフォルトで無効になり、使用したい場合は(-disablesafemode=0で)手動で有効にする必要があります。 セーフモードは、ネットワークで特定の問題や条件が検出された際に、自動的にウォレットと送信に関連するRPCのサブセットを無効にする機能です。 しかし、開発者はこれらのチェックは自動的に実行するには十分な信頼性がないと考えてきました。 セーフモードを無効にしても、今までどおりgetneworkinfo RPCのwarningsには警告が表示され、-alertnotifyコマンドが起動します。

JSON-RPC credentialを作成するスクリプトのリネーム

share/rpcuser/rpcuser.pyスクリプトはshare/rpcauth/rpcauth.pyにリネームされました。 このスクリプトはJSON-RPCユーザーのrpcauth credentialを作成するのに使われます。

validateaddress の改善

validateaddress RPCのアウトプットはいくつかの新しいフィールドで拡張され、segwitアドレス(P2SHとBech32の両方)をサポートします。具体的には

  • P2WPKHとP2WSHアドレスであれば新しいフィールドiswitnessがTrueになります。P2SHでラップしたsegwitアドレスはTrueにはなりません(以下参照)。
  • 既存のisscriptフィールドはP2WSHアドレスに対してTrueと報告するようになりました。
  • スクリプトが知られていて既知のアドレスと合致する全てのスクリプトアドレスに対して新しいembeddedフィールドが表示されるようになります。これは特にP2SH-P2WPKHアドレスやP2SH-P2WSHアドレスにあてはまります。embeddedフィールドの値には、埋め込みアドレスに直接validateaddressを実行した場合に報告される情報が表示されます。
  • マルチシグスクリプトの場合、(既知の場合)スクリプトに含まれる全ての公開鍵を報告する新しいpubkeysフィールドが追加されました。これは既存のaddressesフィールド(同じ情報を報告しますがP2PKHアドレスとしてエンコードされています)を置き換えるもので、より便利で混乱のない方法で表現されています。addressesフィールドは非segwitアドレスと後方互換のため残されます。
  • 既知の鍵を持つ単一鍵のアドレス(P2SHもしくはP2WSHでラップされている場合でも)には、pubkeyフィールドが表示されます。特にこれはアドレスの種類がP2SH-P2WPKHであっても、getnewaddressのアウトプットに対してvalidateaddressを実行すると常にpubkeyが表示されることを意味します。

低レベルの変更

  • 廃止予定のRPCgetinfoが削除されました。より具体的なRPCを使用するのをお勧めします。
    • getblockchaininfo
    • getnetworkinfo
    • getwalletinfo
    • getmininginfo
  • ウォレットのRPCgetreceivedbyaddressは、ウォレットに含まれていないアドレスで呼び出された場合エラーを返します。
  • ウォレットのRPCaddwitnessaddressが廃止され、バージョン0.17で削除されます。 代わりにgetnewaddressの引数にaddress_typeをセットするか、オプション-addresstype=[bech32|p2sh-segwit]をセットしてください。
  • dumpwalletはダンプファイル内ウォレットからの16進エンコードされたスクリプトを含むようになり、 importwalletはこれらのスクリプトをインポートするようになりましたが、対応するアドレスが正しく追加されない、 もしくは関連するトランザクションを見つけるために手動再スキャンが必要な場合があります。
  • getblockchaininfo RPCにerrorsフィールドが含まれるようになりました。
  • getrawtransaction RPCに新しいblockhashパラメータが追加されました。これは-txindexが有効になっていなくても、既知の場合に特定のブロックからrawトランザクションを取り出すことを可能にします。
  • decoderawtransactionRPCとfundrawtransactionRPCが、必要に応じてヒューリスティックなwitnessチェックを無効にするオプションiswitnessパラメータを持つようになりました。
  • walletpassphraseのタイムアウトの最大設定が2^30秒になりました。
  • createmultisig RPCでアドレスを使うのが廃止され、将来のバージョンでは削除されます。アドレスの代わりに公開鍵を使用します。
  • ブロックチェーンの再スキャンでは、再スキャンの全プロセスでウォレットをロックしなくなりました。そのため再スキャン中も他のRPCを使用することができます(再スキャンが完了するまで残高やトランザクションの結果は不正確もしくは不完全かもしれません)。
  • logging RPCが公開されるようになりました。
  • getblockchaininfo RPCにinitialblockdownloadのbooleanが追加され、ノードが現在IBD中かどうか示すようになりました。
  • getmempoolinfoのアウトプットにminrelaytxfeeが含まれるようになりました。

その他の変更されたコマンドラインオプション

  • 別のデバッグログファイルを指定するのに-debuglogfile=<file>が使えます。
  • bitcoin-cliにRPCのパスワードを標準入力から読み取れるようにする-stdinrpcpassが追加されました。
  • -usehdオプションが削除されました。
  • bitcoin-cliは、今回削除されたgetinfo RPCと似たアウトプットを返す-getinfoフラグをサポートするようになりました。

テストの変更

  • regtestのJSON-RPCのデフォルトポートが18443に変更され、testnetのデフォルトポート18332との競合が回避されました。
  • segwitはデフォルトでregtestモードで常にアクティブになりました。このためregtestノードをアップグレードする場合は、regtestのbitcoin.confに-reindexを付与するか、vbparams=segwit:0:999999999999を付与して旧ルールを使用する必要があります。これを行わないと、次のようなCheckBlockIndex()アサーションエラーが発生します: Assertion `(pindexFirstNeverProcessed != nullptr) == (pindex->nChainTx == 0)’ failed.

検証用のハッシュ

f51392e0cbf7940627944602a64890ed65cf44838fc4795d493cf12aafe37012  bitcoin-0.16.0-aarch64-linux-gnu.tar.gz
59f95da96f40b3a9acfeda9085e6389f2075ee40ef1fe7f023031f86c946c3ea  bitcoin-0.16.0-arm-linux-gnueabihf.tar.gz
d7c173e2921e39df3631b7cd652ae7330c2735b0b221f9dc8f7c899887b4fb59  bitcoin-0.16.0-i686-pc-linux-gnu.tar.gz
ade85a8e39de8c36a134721c3da9853a80f29a8625048e0c2a5295ca8b23a88c  bitcoin-0.16.0-osx64.tar.gz
df0036bae9f40536095908c9944ed66c0946f178ae8ef07639caf25a390b2ee7  bitcoin-0.16.0-osx.dmg
8cbec0397d932cab7297a8c23c918392f6eebd410646b4b954787de9f4a3ee40  bitcoin-0.16.0.tar.gz
7558249b04527d7d0bf2663f9cfe76d6c5f83ae90e513241f94fda6151396a29  bitcoin-0.16.0-win32-setup.exe
60d65d6e57f42164e1c04bb5bb65156d87f0433825a1c1f1f5f6aebf5c8df424  bitcoin-0.16.0-win32.zip
6d93ba3b9c3e34f74ccfaeacc79f968755ba0da1e2d75ce654cf276feb2aa16d  bitcoin-0.16.0-win64-setup.exe
42706da1a95b2db8c5808529f73c2063a0dd770f71e0c8506bfa86dc0f3403ef  bitcoin-0.16.0-win64.zip
e6322c69bcc974a29e6a715e0ecb8799d2d21691d683eeb8fef65fc5f6a66477  bitcoin-0.16.0-x86_64-linux-gnu.tar.gz