Corda Community Edition 4.11
Corda Enterprise Edition 4.11 には、いくつかの新機能、改善点、および修正が含まれています。
プラットフォームバージョン変更
Corda 4.11 はプラットフォームバージョン13を使用しています。
プラットフォームバージョンに関する詳細は、Versioningを参照してください。
新機能と改善点
JDK Azul および Oracle JDK アップグレード
Corda は現在、JDK Azul 8u382 および Oracle JDK 8u381 をサポートしています。
Ledger Recovery
Corda 4.11 リリースの一環として、Ledger Recoveryが導入されました。これは、標準化された Corda ネットワークの運用バックアップおよびリカバリプロセスを補完します。
詳細については、Ledger Recovery を参照してください。
Two Phase Finality
Two Phase Finality プロトコル(FinalityFlow および ReceiveFinalityFlow サブフロー)が追加され、Finality を使用する CorDapps の耐障害性と回復性を向上させました。既存の CorDapps では、この新しい改良されたプロトコルを利用するための変更は必要ありません。
詳細については、Two Phase Finalityを参照してください。
依存関係のアップグレード
以下の依存関係がアップグレードされ、重大なセキュリティの脆弱性に対処しています。
Hibernateが5.4.32.Finalから5.6.14.Finalにアップグレードされました。
H2が1.4.197から2.2.214にアップグレードされました。
H2データベースは、既知の脆弱性に対処するために、バージョン2.2.224にアップグレードされました。H2はサポートされていない本番データベースであり、開発およびテスト目的でのみ使用する必要があります。H2バージョン1.4.197(Cordaの以前のバージョンで使用されていたバージョン)と、4.11で実装された新しいH2バージョン2.2.224の違いに関する詳細は、H2ドキュメントを参照してください。最も重要な違いは次のとおりです。
- エンティティの命名 H2バージョン2.2.224は、データベース内のテーブルと列の命名に関する厳格なルールを実装しています。SQLのキーワードの使用はもはや許可されていません。CorDappスキーマがテーブルまたは列に予約された名前を使用している場合、CorDappのフローはテーブルと対話しようとしたときに失敗し、関連するSQL例外が発生します。
- 後方互換性
この問題の解決策は、問題のあるテーブルまたは列の名前を予約されていない名前に変更することです。この名前変更プロセスは、CorDappの移行スクリプトとCorDappコード内のJPAエンティティ定義で実装する必要があります。
H2バージョン2.xは、古いバージョンと後方互換性がありません。H2データベースURLにMODE=LEGACYを追加することで、限られた後方互換性を実現できます。詳細については、H2 FeaturesページのLEGACY Compatibility Modeセクションを参照してください。
H2 2.xは、古いH2バージョンで作成されたデータベースファイルを読み取ることができません。古いデータベースをアップグレードするための推奨されるアプローチは、データをエクスポートしてそれを新しいバージョン2.xデータベースに再インポートすることです。このプロセスの詳細については、H2 Migration to 2.0ページに記載されています。
Liquibaseが3.6.3から4.20.0にアップグレードされました。
- API
- ログ このLiquibaseのバージョンでは、すべてのINFOレベルのログがSTDERRに向けられ、STDOUTはSQLクエリのログに使用されます。Liquibaseを使用した独自のデータベースマイグレーションコードを実装しているユーティリティは、カスタムロガーを確立してLiquibaseの情報ログをキャプチャできます。Liquibase APIは、カスタムロガーを統合するために使用できるクラスを提供しています。
このLiquibaseのバージョンには、前のバージョンとはわずかに異なるAPIがあります。Liquibaseを使用した独自のデータベースマイグレーションコードを実装しているCorDappsは、新しいAPIに合わせて更新する必要があります。
vault_stateテーブルに追加された消費トランザクションID
Stateがトランザクションによって消費されると、Cordaはvault_stateテーブルのconsuming_tx_id列に消費トランザクションのIDを追加します。Cordaは新しいトランザクションのためにのみこのデータベース列を更新します。すでに台帳に存在する消費されたStateに対しては、consuming_tx_idの値はnullです。
AMQPデータのデシリアライズ性能向上
このリリースでは、AMQPデータのデシリアライズのパフォーマンスが向上しており、これによりLedgerGraph、Archiving、および他のCorDappsのパフォーマンス向上が期待されます。
拡張されたSendTransactionFlow
SendTransactionFlowは、複数のセッションに送信できるように拡張されました。SendTransactionFlowの呼び出し元は、新しいコンストラクタ引数を使用して、送信先のセッションの種類を示すことができます。新しいコンストラクタ引数は以下の通りです:
participantSessions: Set<FlowSessions>
observerSessions: Set<FlowSession>これらのパラメータは、送信者側に格納する回復メタデータの種類を推論および構築するためにも使用されます。
参加者セッションは、StatesToRecordの値がONLY_RELEVANTにデフォルトで設定されます。
参加者セッションは、StatesToRecordの値がALL_VISIBLEにデフォルトで設定されます。
新しい暗号化サービス
AESキーの実装が使用され、ピア間での共有および永続性のために配布レコード回復メタデータを暗号化および復号化するために使用されます。
DJVMの削除
DJVMのベータ機能が削除されました。DJVMの削除の結果、DriverParametersクラスからdjvmBootstrapSourceおよびdjvmCordaSourceの2つのコンストラクタパラメータが削除されました。DriverParametersを使用するクライアントコードは、再コンパイルが必要です。
解消された問題
このリリースには、4.10.3以降の次の修正が含まれています。
- PostgreSQL 9.6および10.10は、PostgreSQL自体によってサポートされなくなったため、サポートマトリックスから削除されました。
- log4j2.xmlは、ロールオーバー戦略の構成で診断およびチェックポイントログ用の正しいファイルを削除します。
- 前のパッチリリースでは、SSL証明書の処理を強化する一環として、失敗したSSLハンドシェイクに関連する特定のログメッセージが意図せず追加されました。これらのメッセージは、トラフィックロードバランサーやシステムモニタリングの接続性テスト中にログに頻繁に表示されました。ログのノイズを減少させるために、これらの特定のログメッセージを無効にしました。
データベーススキーマの変更
すべてのデータベーステーブルの詳細な説明については、データベーステーブルを参照してください。
以下のデータベース変更が適用されました:
- vault_stateテーブルには、新しい- consuming_tx_id列が追加されました。この新しい列は、次のマイグレーションスクリプトで追加されました:- vault-schema.changelog-v14.xml。
- Two Phase Finalityは、メインのDbTransactionテーブル内に追加のデータフィールドを導入しました。
@Column(name = "signatures")
val signatures: ByteArray?Two Phase Finality は、回復メタデータの配布レコードを格納するための新しいデータベーステーブルを2つ導入します:
@Entity
@Table(name = "${NODE_DATABASE_PREFIX}sender_distr_recs")
data class DBSenderDistributionRecord(
        @EmbeddedId
        var compositeKey: PersistentKey,
        /** states to record: NONE, ALL_VISIBLE, ONLY_RELEVANT */
        @Column(name = "sender_states_to_record", nullable = false)
        var senderStatesToRecord: StatesToRecord,
        /** states to record: NONE, ALL_VISIBLE, ONLY_RELEVANT */
        @Column(name = "receiver_states_to_record", nullable = false)
        var receiverStatesToRecord: StatesToRecord
)
@Entity
@Table(name = "${NODE_DATABASE_PREFIX}receiver_distr_recs")
data class DBReceiverDistributionRecord(
        @EmbeddedId
        var compositeKey: PersistentKey,
        /** Encrypted recovery information for sole use by Sender **/
        @Lob
        @Column(name = "distribution_list", nullable = false)
        val distributionList: ByteArray,
        /** states to record: NONE, ALL_VISIBLE, ONLY_RELEVANT */
        @Column(name = "receiver_states_to_record", nullable = false)
        val receiverStatesToRecord: StatesToRecord
)上記のテーブルは同じ永続的な複合キータイプを使用します:
@Embeddable
@Immutable
data class PersistentKey(
        @Column(name = "transaction_id", length = 144, nullable = false)
        var txId: String,
        @Column(name = "peer_party_id", nullable = false)
        var peerPartyId: Long,
        @Column(name = "timestamp", nullable = false)
        var timestamp: Instant,
        @Column(name = "timestamp_discriminator", nullable = false)
        var timestampDiscriminator: Int
)配布リストのプライバシー情報(暗号キーを含む)を保持するための2つの追加のテーブルがあります:
@Entity
@Table(name = "${NODE_DATABASE_PREFIX}recovery_party_info")
data class DBRecoveryPartyInfo(
        @Id
        /** CordaX500Name hashCode() **/
        @Column(name = "party_id", nullable = false)
        var partyId: Long,
        /** CordaX500Name of party **/
        @Column(name = "party_name", nullable = false)
        val partyName: String
)
@Entity
@Table(name = "${NODE_DATABASE_PREFIX}aes_encryption_keys")
class EncryptionKeyRecord(
        @Id
        @Type(type = "uuid-char")
        @Column(name = "key_id", nullable = false)
        val keyId: UUID,
        @Column(name = "key_material", nullable = false)
        val keyMaterial: ByteArray
)サードパーティコンポーネントのアップグレード
以下の表は、4.10.3と4.11 Enterprise Editionsの間での依存関係のバージョン変更をリストアップしています:
| 依存関係 | 名前 | バージョン 4.1.2 Enterprise | バージョン 4.11 Enterprise | 
| org.bouncycastle | Bouncy Castle | 1.70 | 1.75 | 
| co.paralleluniverse:quasar-core | Quasar | 0.7.15_r3 | 0.7.16_r3 | 
| org.hibernate | Hibernate | 5.4.32.Final | 5.6.14.Final | 
| com.h2database | H2 | 1.4.197 | 2.2.2241 | 
| org.liquibase | Liquibase | 3.6.3 | 4.20.0 | 
Log4jパッチ
2021年12月のLog4jの脆弱性に対処するすべてのパッチはこちらをクリックしてください。
