Overview
- Segwit ウォレット
- BIP173 (Bech32) アドレスサポート (“bc1…“から始まるアドレス)
- HD-ウォレットがデフォルトに
- GUIでReplace-By-Feeがデフォルトに
- ウォレットディレクトリの設定
- プルーニングノードのシグナリングをサポート (BIP159)
- パフォーマンス: SHA256アセンプリがデフォルトで有効に
- GUIの変更
- 新しい rescanblockchain RPC
- 新しい savemempool RPC
- セーフモードがデフォルトで無効に
- JSON-RPC credentialを作成するスクリプトのリネーム
- validateaddress の改善
- 低レベルの変更
- その他の変更されたコマンドラインオプション
- テストの変更
- 検証用のハッシュ
Bitcoin Coreのウォレットでsegregated witness(segwit)をデフォルトサポートした最初のバージョンである Bitcoin Core 0.16.0のリリースをお知らせします。 このリリースには以下で説明するいくつかの改善とバグフィックスが含まれます。
最新のリリースはダウンロードページからダウンロードできます。
以下のセクションでは今回のリリースの最も重要な変更について説明します。 詳細についてはリリースノートを参照してください。
Segwit ウォレット
Bitcoin Core 0.16.0はウォレットおよびユーザーインターフェースでsegwitを完全にサポートするようになりました。新しく-addresstype
引数が追加され、legacy
, p2sh-segwit
(デフォルト), および bech32
アドレスをサポートします。この引数はgetnewaddress
、getaccountaddress
、createmultisigaddress
で生成されるアドレスの種類を制御します。-changetype
も同じオプションで追加され、デフォルトも-addresstype
と同じで、おつり用のアドレスの種類を制御します。
新しいaddress_type
パラメータがgetnewaddress
とaddmultisigaddress
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
が表示されることを意味します。
低レベルの変更
- 廃止予定のRPC
getinfo
が削除されました。より具体的なRPCを使用するのをお勧めします。getblockchaininfo
getnetworkinfo
getwalletinfo
getmininginfo
- ウォレットのRPC
getreceivedbyaddress
は、ウォレットに含まれていないアドレスで呼び出された場合エラーを返します。 - ウォレットのRPC
addwitnessaddress
が廃止され、バージョン0.17で削除されます。 代わりにgetnewaddress
の引数にaddress_type
をセットするか、オプション-addresstype=[bech32|p2sh-segwit]
をセットしてください。 dumpwallet
はダンプファイル内ウォレットからの16進エンコードされたスクリプトを含むようになり、importwallet
はこれらのスクリプトをインポートするようになりましたが、対応するアドレスが正しく追加されない、 もしくは関連するトランザクションを見つけるために手動再スキャンが必要な場合があります。getblockchaininfo
RPCにerrors
フィールドが含まれるようになりました。getrawtransaction
RPCに新しいblockhash
パラメータが追加されました。これは-txindex
が有効になっていなくても、既知の場合に特定のブロックからrawトランザクションを取り出すことを可能にします。decoderawtransaction
RPCとfundrawtransaction
RPCが、必要に応じてヒューリスティックな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.