Corda 4.4 リリース

Riku Nakazawa
Corda japan
Published in
12 min readMar 27, 2020

____________________________________________________
<お知らせ>
SBI R3 Japanブログは、MediumからSBI R3 Japanのポータルサイトに引っ越ししました。引っ越し先で、mediumの過去記事も閲覧可能です。今までとは異なる新しいコンテンツも発信してまいりますので、お気に入り登録をぜひお願いします!

____________________________________________________

Cordaの新しいバージョンである4.4がリリースされました。リリースノートの全文訳を掲載いたします。

リリースノート序文

Corda 4.4リリースノートへようこそ。このリリースで何が新しくなったのか、また、その機能がどのように役立つのかを理解するために、これらを注意深く読んでください。これまでのリリースでは、APIの後方互換性が保証されていましたが、Corda 4.4ではそれと同じ保証が付いています。Corda 3.0で有効だった状態やアプリは、Corda 4.4でも使用できます。

Corda 4.4

Corda 4.4は、Cordaコードベースの新しいオープンコアアプローチの基礎を築きました。これにはCordaの主要な機能コンポーネントのリファクタリングが含まれています。CorDapp開発への実際の影響の概要についてはcordapp-overview.rstを参照してください。

さらに、Corda 4.4 では、Flowフレームワーク API の改善、新しい診断ServiceHub呼び出し、多くのセキュリティ強化が導入されました。

開発者向けの変更点

Flow APIの改善

Corda 4.4では、新しいFlowLogic.await APIが導入されました。これにより、CorDapp開発者は、ユーザー定義のロングランオペレーション(外部サービスへのコールアウトなど)を実行しているときに、Flowを一時停止することができます。これにより、これらのロングランオペレーションがFlowスレッドをブロックすることを防ぎ、他のFlowがその間に処理を進めることができます。以前は、これらの操作は同期的に実行され、Flowスレッドをブロックしていました。

CorDapp開発者は、これらの非同期Flow操作を専用のスレッドプールで実行するか、スレッド処理を直接行うかを決定できます。

以前と同様に、Flowフレームワークは、特定の操作(例えば、カウンターパーティからのメッセージを受信するのを待っているときなど)に対して自動的に中断することに注意してください。これらの中断は、明示的に引き起こされる必要はありません。

ノードオペレータは、外部操作に割り当てるスレッドプールのスレッド数を設定することができます。

Corda 4.4では、新しいHospitalizeFlowException例外タイプも導入されました。この例外タイプは、スローされるとFlowの実行を停止し、flow hospitalに自分自身を送って観察します。Flowは、次のノードの開始時に自動的に再試行されます。

この例外は、既知の断続的な障害が発生した場合に、最後のチェックポイントからFlowを再試行する方法をユーザーコードに提供します。

新しいユーティリティAPI

Corda 4.4では、CorDapp開発者がアクセスできるようにするための新しいコール(ServiceHub.DiagnosticsService)を導入しています。

・実行している Corda のエディション (例: オープンソース、エンタープライズ)
・パッチ番号を含む実行中の Corda のバージョン (例: 3.2.20190215)

Corda 4.4では、コールバック (AppServiceHub.register) も提供しており、ノードが完全に起動したら実行するカスタムアクションを Corda サービスが登録できるようにしています。このパターンは、サービスがまだ初期化されていないノードの一部にすぐにアクセスしようとすることによる問題を防ぎます。

セキュリティの強化

Node shellの SSH サーバが更新され、時代遅れの弱い暗号やアルゴリズムが削除されました。
・スタンドアロンシェルにSSHする機能が削除されました。
・新しい読み取り専用のRPCユーザロールテンプレートがNode shellに文書化されました。

統合テストの変更点

Driver DSL (Integration testingを参照) を通して生成された “out-of-process” ノードは、アプリケーションのクラスパスに誤ってCorDappsが含まれてしまうことはなくなります。自動的にフィルタリングされる項目のリストには、以下のものが含まれます。

・ディレクトリ(通常のファイルのみ使用可能)
・Jars with Mavenのクラス分けテストまたはテスト
・マニフェストに Cordapp 属性を持つ jar (Building and installing a CorDappに記載されているもの、または Target-Platform-Version と Min-Platform-Version の両方が存在する場合はそれらのいずれか)
・jarのマニフェストに Corda-Testing 属性が含まれています。以下のアーティファクトのマニフェストが更新され、Corda-Testing 属性が含まれるようになりました。
-corda-node-driver
-corda-test-utils
-corda-test-common
-corda-test-db
-corda-mock
・名前が corda-mock, junit, testng, mockito で始まるファイル

既存の統合テストの中には、暗黙のうちに上記のファイルの存在に依存しているものがあるかもしれませんので、Corda のバージョンをアップグレードする際には、このことを念頭に置いてください。

プラットフォームのバージョン変更

新しい API が追加されたことを受けて、Corda 4.4のプラットフォームバージョンが5 から6にバンプアップされました。これは、Corda 4.4を使用しているCorDappsがホストできないノードにデプロイされるのを防ぐためです。最小プラットフォームバージョンは変更されていないことに注意してください — これは、古いCordaノードがCorda 4.4ノードと相互運用できることを意味します。追加されたAPIはワイヤプロトコルに影響を与えず、ゾーンレベルでの影響もないため、Corda 4.4ノードが最小プラットフォームバージョンが4のネットワーク上で動作していても、アプリケーションはこれらの新しいプラットフォームバージョン6の機能を利用することができます。

プラットフォームバージョンの詳細については、Versioningを参照してください。CorDappをプラットフォームバージョン5にアップグレードする際の詳細については、Upgrading CorDapps to newer Platform Versionsを参照してください。

既知の問題

元帳の完全性を高めるためにCorda 4.4で導入された変更により、データベーストランザクションに関する制限が強調されました。データベーストランザクションがコミットに失敗したり、コミット前の永続例外が発生した後にFlowが処理を継続しないようにするために、追加のデータベースフラッシュが追加されました。これらの追加フラッシュにより、以前は発生しなかった例外が発生する可能性があります(Corda 4.3や以前のバージョンと比較して、異なるタイプの例外が発生する可能性があります)。一般的に、CorDappの開発者は、データベーストランザクション中にスローされた例外をキャッチして、同じFlowの一部としてさらにDB操作を続けることは期待してはいけません。より安全なパターンは、Flowを失敗させて再試行することです。

バグ修正

以下のバグが修正されました

  • 初期登録中に Doorman からの応答が失敗すると、クラスキャスト例外が発生する [CORDA-2744]
  • 回復不可能なRPCエラーの例外を追加 [CORDA-3192]
  • 誤解を招くFlowが待機中のメッセージを修正 [CORDA-3197]
  • ClassLoader全体をインストルメントから除外できるようにQuasarエージェントを更新 [CORDA-3228]
  • H2を使用している場合、liquibaseのエラーで失敗しないように修正 [CORDA-3302]
  • ラップしていないvaultObserverに例外がスローされると、重大な問題が発生する可能性がある [CORDA-3329]
  • PostgreSQLのCorda 3.xから4.xへの移行には手動での回避策が必要 [CORDA-3348]
  • DJVMライブラリ1.0リリース用の準備 [CORDA-3377]
  • ノード構成のオーバーライドに関するドキュメントの改善 [CORDA-3386]
  • EvolutionSerializerでプリミティブ型がNullableになるのを処理できるように修正 [CORDA-3390]
  • ローカルAMQPSerializerのキャッシングを修正 [CORDA-3392]
  • BlobInspectorのNPEを修正 [CORDA-3396]
  • DJVMの使用を設定できるようにDemoBenchを更新 [CORDA-3406]
  • トランザクション検証のコンテキストでカスタムシリアライザのスキャンが壊れている [CORDA-3464]
  • EvolutionSerializerで箱型がプリミティブになるのを処理できるように修正[CORDA-3469]
  • カスタムCordaServicesからトランザクション処理を実行するためのインターフェイスを作成する [CORDA-3471]
  • ノードデータベーステーブルのドキュメントのタイプミスを修正 [CORDA-3476]
  • ノードデータベースページの修正 [CORDA-3477]
  • NODE_TRANSACTIONSテーブルにタイムスタンプ列を追加 [CORDA-3479]
  • 新しい必須フィールドの追加とオプションの削除をサポート [CORDA-3489]
  • ネットワークビルダへのリンクを修正[CORDA-3495]
  • クラスパススキャンを行わずにカスタムシリアライザを指定できるオプションを提供 [CORDA-3501]
  • GracefulReconnect を使用すると、CordaRPCClientConfiguration が尊重されない [CORDA-3507]
  • ユーザーがこのFlowの使用を許可されていない場合にShellCli経由でFlowを開始する際の接続失敗エラーとしてFlowを開始できなかった問題を修正 [CORDA-3513]
  • DJVM内部のホワイトリストとカスタムシリアライザをサポート[CORDA-3523]
  • 実行時の警告を回避するために、DJVMシリアライゼーションタイプをより正確にロードする [CORDA-3536]
  • 再接続の再試行間隔と再接続の最大試行回数には構成値を使用[CORDA-3542]
  • SSHメモリリークとセキュリティ[CORDA-3520]
  • SSHから時代遅れの暗号とアルゴリズムのサポートを削除[CORDA-3550]
  • DJVMを使用したデシリアライゼーションで、SerializerFactoryオブジェクトが多すぎる[CORDA-3552]
  • 初期登録エラーの伝播を許可して、ノードが失敗コードで終了するように修正 [CORDA-3558]
  • man runの参照を削除[CORDA-3559]
  • driverSerializationEnvをビルドする際には、必ずTestCordappsをクラスパスに追加するようにする [CORDA-3566]
  • RPCクライアントを再接続するときは、connectionMaxRetryIntervalの設定を使用 [CORDA-3576]
  • X500名とSSHホストキーのドキュメントを更新 [CORDA-3585]
  • hashLookupコマンドのヘルプでスペルミスを修正 [CORDA-3587]
  • シャットダウン時にInteractiveShellを終了するコマンド [CORDA-3593]

翻訳記事は以上となります。

以下に本記事に関連する内容のリンクを貼り付けておきます。
興味がある方は、是非ご覧になってください。

翻訳元ドキュメント(英語)
Corda Enterprise 4.4 リリースノート翻訳(日本語)
Corda Enterprise Network Manager 1.2 リリースノート翻訳(日本語)

--

--

Riku Nakazawa
Corda japan

SBI R3 Japanで働く、ラクロスプレイヤーです