Corda Enterprise 4.12.1
Corda Enterprise Edition 4.12.1 は、問題の解決に焦点を当てた Corda Enterprise Edition のパッチリリースです。
アップグレードの推奨
Corda Enterprise 4.11以前のバージョンから4.12へのアップグレードに関する注意点については、4.12のリリースノートをご参照ください。
修正された問題
ReceiveFinalityFlow
は、Notaryの署名のない取引を返していました。これは現在修正され、返される取引にはNotaryの署名が含まれています。- これまで
ReceiveTransactionFlow
は、ResolveTransactionFlow
の実行前に、トランザクション上のnetwork parametersが存在することを確認していました。これは、特定のシナリオで問題を引き起こす可能性がありました。例えば、移行されたネットワークの新しいNodeにトップレベルのトランザクションを送信する場合、古いnetwork parametersは新しいNodeには存在しないためです。 この問題は現在修正されています。 - あるコードパスでのパーティ特定において、
wellKnownPartyFromAnonymous
は、X.500名の特定を試みる際に、network parametersからNotaryを考慮していませんでした。このシナリオは、新しく移行されたネットワークに新しいNodeを導入する際、新しいNodeのnetwork mapに古いNotaryが含まれていないために発生する可能性がありました。 この問題は現在修正されています。現在、チェック時にnetwork parametersからNotaryが考慮されます。
Corda Enterprise Edition 4.12リリースノート
Corda Enterprise Edition 4.12リリースでは、JavaとKotlinのバージョンアップと、それに伴うアップグレードサポートが導入されました。JavaとKotlinのアップグレードをサポートする機能以外には、大きな新機能は導入されていません。このリリースでは、Java は Java 8 から Java 17 にアップグレードされ、Kotlin は 1.2.71 から Kotlin 1.9.20 にアップグレードされました。
CorDapp(s)とノードが4.12に正常にアップグレードされると、同じネットワーク上で、4.12と4.11(またはそれ以前)の台帳上の既存のトランザクションを含むノードをシームレスに相互運用することができます。
既存のバックチェーンから旧コントラクトも扱う必要があるために、新しいJavaとKotlinのバージョンをサポートすることがこのCordaバージョンの大きな特徴です。また、JavaとKotlinのアップグレードは、CorDapp開発者にとっても意味があります。
なお、他の変更を加えずにCorda JARを単純に置き換えることはできません。
アップグレード推奨
ノードをCorda 4.12にアップグレードする際には、ノードデータベース上でトランザクションバリデーターユーティリティを実行し、古いノードのトランザクションが4.12ノードと互換性があることを確認することが非常に重要です。
トランザクションの互換性を確保するためには、アップグレードされていない古いノードで、アップグレードされたノードとやり取りする可能性がある場合は、トランザクションバリデーターユーティリティを実行する必要があります。
詳細については、トランザクションバリデーターユーティリティを参照してください。
開発者またはノードオペレータとして、できるだけ早くCordaの最新リリースバージョンにアップグレードする必要があります。最新のCorda Enterpriseリリースノートはこのページにあります。最新のアップグレードガイドはCorda Enterprise Edition 4.11から4.12へのアップグレードガイドを参照してください。
このガイドの手順は、Corda 4.11から4.12への直接アップグレードにのみ有効です。バージョン4.10以下のノードがある場合は、最初に4.11にアップグレードする必要があります。そのためには、該当するリリースのアップグレードドキュメントを参照してください。
プラットフォームバージョン変更
Corda 4.11 はプラットフォームバージョン140を使用しています。
プラットフォームバージョンに関する詳細は、Versioningを参照してください。
新機能、改善点、制限事項
JavaとKotlinのアップグレード
Corda 4.12ではJava 17とKotlin 1.9.20が必要です。すなわち、Corda 4.12と互換性を持たせるために、4.11以前で書かれたレガシーなCorDappsをJava 17とKotlin 1.9.20で動作するように再コンパイルする必要があります。これらのアップグレードはCordaのサポート性とセキュリティを強化します。
Corda SDKのJava 17互換リリース
ベースとなるCordaパッケージには、いくつかのSDKとライブラリが含まれています。これらのSDKとライブラリはJava 17とKotlin 1.9.20と互換性があります
SDK/ライブラリ | Java 17互換リリース |
corda-shell | 4.12 |
r3-libs | 1.4 |
confidential-identities | 1.2 |
accounts | 1.1 |
token-sdk | 1.3 |
reissue-cordapp | 1.1 |
archiving | 1.2 |
ledger-graph | 1.3 |
r3-tools | 4.12 |
Transaction Validator Utility
Corda 4.12では、Corda 4.12へのアップグレード時にマイグレーション後のエラーを回避するために、データベースにコミットされたトランザクションを検証するツールであるTransaction Validator Utility (TVU)が導入されました。詳細はTransaction Validator Utility を参照してください。
署名制約を使用したCorDappsのみサポート
Corda 4.12では署名制約を使用したCorDappsのみがサポートされています。ハッシュ制約はサポートされていません。
署名制約の使用は、CorDappのアップグレードプロセスを容易にするため、Cordaの以前のリリースで推奨されてきました。ハッシュ制約を使用している4.11のCorDappsがある場合は、4.12にアップグレードする前に4.11の署名制約に移行する必要があります。
Corda4.11と4.12のCorDappsは同じキーセットで署名する必要がある
Java 17とKotlin 1.9.20用に4.12のCorDappsを再コンパイルした際には、4.11のCorDappで使われたのと同じキーセットを使って署名する必要があります。
明示的な契約のアップグレードはサポートされない
Corda 4.12では、明示的なコントラクトのアップグレードはサポートされていません。
toLedgerTransaction.verify
が旧トランザクションで動作しない
CorDappsを見直して、以下のような呼び出しをしていないかチェックしてください。
SignedTransaction.toLedgerTransaction().verify()
WireTransaction.toLedgerTransaction().verify()
TransactionBuilder.toLedgerTransaction().verify()
上記の呼び出しを行うCorDappsは旧トランザクションでは動作しません。これらのCorDappsを互換性のあるものにするには、SignedTransaction.verify()
に変更してください。
CordaノードエクスプローラがJava 17に対応していない
ノードエクスプローラはJava 17を使用するように変換されておらず、リリースパックでは提供されていません。ノードエクスプローラを使いたい場合、現在の唯一の選択肢は4.11ノードエクスプローラを使用し、4.12ノードに接続することです。
サンプル Kotlin と Java のサポート
以下の2つのパブリックリポジトリで様々なCorDappのサンプルを提供しています(ブランチ: release/4.12):
ほとんどのサンプルはJava 17、Kotlin 1.9.20、Gradle 7.6.4に変換されています。
サンプルはCorda Open Sourceで動作するように作られています。サンプルをCorda Enterpriseで動作するように変換するには、最低でもエンタープライズアーティファクトがインストールされているリポジトリを指定する必要があります。また、ENT(com.r3
)のアーティファクトグループ名はOS(net.corda
)と異なる必要があります。たとえば、net.corda:corda-node-driver:4.12
(Corda OS)はcom.r3.corda:corda-node-driver:4.12
(Corda ENT)に置き替えてください。
以下の依存関係はサンプルで使用されており、Corda OSからCorda Enterpriseに切り替えることができます:
- corda
- corda-confidential-identities
- corda-core-test-utils
- corda-finance-workflows
- corda-jackson
- corda-node
- corda-node-api
- corda-node-driver
- corda-rpc
- corda-shell
- corda-test-utils
- corda-testserver-impl
以下のサンプルはJava 17とKotlin 1.9.20に変換され、テストされています:
CorDapp type | CorDapp |
Accounts | obligation-accounts |
sharestatewithaccount | |
supplychain | |
worldcupticketbooking | |
Advanced | duediligence-cordapp |
negotiation-cordapp | |
obligation-cordapp | |
superyacht-cordapp | |
syndicated-lending | |
Basic | cordapp-example |
flow-database-access | |
flow-http-access | |
opentelemetry-cordapp-example | |
ping-pong | |
tutorial-applestamp | |
tutorial-jarsigning | |
tutorial-networkbootrstrapper | |
Features | attachment-blacklist |
attachment-sendfile | |
confidentialIdentity-whistleblower | |
contractsdk-recordplayers | |
cordaService-autopayroll | |
customlogging-yocordapp | |
customquery-carinsurance | |
dockerform-yocordapp | |
encumbrance-avatar | |
multioutput-transaction | |
notarychange-iou | |
observableStates-tradereporting | |
oracle-primenumber | |
postgres-cordapp | |
queryableState-carinsurance | |
referenceStates-sanctionsBody | |
schedulableState-heartbeat | |
state-reissuance | |
Tokens | bikemarket |
dollartohousetoken | |
fungiblehousetoken | |
stockpaydividend | |
tokentofriend |
KotlinとJavaのCorDappテンプレート
以下のKotlinとJavaのCorDappテンプレートはJava 17、Kotlin 1.9.20、Gradle 7.6.4に変換されました。これらはCorda Community EditionとCorda Open Source Edition (branch: release/4.12) で動作するように書かれています:
オプションのゲートウェイプラグインリリースパックはない
オプションのゲートウェイプラグインリリースパックには、CENMゲートウェイサービスで使用されるフローおよびノード管理プラグインが含まれています。これらのプラグインはGUIベースのフローおよびノード管理機能を提供します。CENM はまだ Java 17 を使用するように変換されていないため、これらのプラグインは 4.12 リリースには含まれていません。CENM とプラグインの変換後、将来のリリースで追加される予定です。もしフローおよびノード管理機能を使いたいのであれば,4.11optional-gateway-plugins
リリースパックからプラグインを入手して,CENM ゲートウェイサービスで使うことができます.
内部APIやリフレクティブアクセスを使うCorDapp
CorDappが内部APIやリフレクティブアクセスを使っている場合、コマンドラインで明示的にモジュールを開く必要がある可能性があります。Cordaを起動する時に、1つ以上の-add-opens
オプションを追加することで、これを行うことができます。
修正された問題
ノード起動時にフローが再開された場合の Thread.contextClassLoader の設定
以前は、ノード起動時にフローが再開された場合、スレッドコンテキストクラスローダーが設定されず、CorDappクラスのClassNotFound
問題を引き起こす可能性がありました。これは現在修正されています。
既知の問題
ロギングレベルがTRACE
のとき、余分なスタックトレースを出力する
コマンドラインオプション--logging-level=TRACE
によってトレースに設定されたログレベルでノードを開始すると、ArtemisのバグによりLog4jからいくつかのUnable to format stack trace
出力が表示されます。これらは無視でき、ノードの操作には影響しません。これらは、org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl
ロガーからのトレース出力を削除するカスタムlog4j.xmlによって削除することができます。
Log4jの起動時のWarning
デフォルトのLog4jでノードを起動すると、次のメッセージが表示されます:main WARN The use of package scanning to locate plugins is deprecated and will be removed in a future release.
これは単なるWarningであり、安全に無視できます。現在、代替手段を調査中です。
notaryhealthcheck-client
が起動しない
Corda 4.12のnotaryhealthcheck-client
が起動に失敗します。これは将来のパッチリリースで修正される予定です。代替手段として、Corda 4.11リリースで提供されているnotaryhealthcheck-client
を使用することができます。
deployNodes
実行時のBouncy Castleからの断続的なWarning
GradleタスクのdeployNodes
を実行すると、以下のような警告メッセージが表示されることがあります:
exception in disposal thread: org/bouncycastle/util/dispose/DisposalDaemon$3
これは現在使用しているBouncy CastleのLTSバージョンからの警告メッセージであり、ユーザーへの影響はありません。ネイティブコードによる参照の廃棄に関連して引き起こされます。将来のパッチリリースで修正される予定です。
サードパーティコンポーネントのアップグレード
以下の表は、4.11と4.12 Enterprise Editionの間の依存関係のバージョン変更の一覧です:
Dependency | Name | Version 4.11 Enterprise | Version 4.12 Enterprise |
com.google.guava:guava | Guava | 28.0-jre | 33.1.0-jre |
co.paralleluniverse:quasar-core | Quasar | 0.7.16_r3 | 0.9.0_r3 |
org.bouncycastle | Bouncy Castle | jdk18on:1.75 | lts8on:2.73.6 |
pro com.guardsquare:proguard-gradle | ProGuard | 6.1.1 | 7.3.1 |
org.yaml:snakeyaml | SnakeYAML | 1.33 | 2.2 |
com.github.ben-manes.caffeine:caffeine | Caffeine | 2.9.3 | 3.1.8 |
io.netty:netty-tcnative-boringssl-static | TC Native | 2.0.48.Final | 2.0.65.Final |
org.apache.commons:commons-configuration2 | Commons Configuration2 | 2.10.0 | 2.10.1 |
co.paralleluniverse:capsule | Capsule | 1.0.3 | 1.0.4_r3 |
org.ow2.asm:asm | ASM | 7.1 | 9.5 |
org.apache.activemq:* | Artemis | 2.19.1 | 2.32.0 |
com.fasterxml.jackson.* | Jackson XML | 2.13.5 | 2.17.0 |
org.eclipse.jetty.ee10:jetty-ee10-* | Jetty | 9.4.53.v20231009 | 12.0.7 |
org.glassfish.jersey.* | Jersey | 2.25 | 3.1.6 |
javax.validation:validation-api | Validation | - | 2.0.1.Final |
org.slf4j:* Simpe | Log4J | 1.7.30 | 2.0.12 |
org.apache.logging.log4j:* | Log4j | 2.17.1 | 2.23.1 |
com.squareup.okhttp3:okhttp | OK HTTP | 3.14.9 | 4.12.0 |
io.netty:* | Netty | 4.1.77.Final | 4.1.109.Final |
org.apache.commons:commons-fileupload2-jakarta | File Upload | 1.4 | 2.0.0-M1 |
com.esotericsoftware:kryo | Kryo | 4.0.2 | 5.5.0 |
org.mockito:mockito-core | Mockito | 2.28.2 | 5.5.0 |
org.mockito.kotlin:mockito-kotlin | Mockito for Kotlin | 1.6.0 | 5.2.1 |
org.jetbrains.dokka:dokka-gradle-plugin | Dokka for Gradle | 0.10.1 | 1.8.20 |
net.i2p.crypto:eddsa | EddSA | 0.3.0 | - |
com.zaxxer:HikariCP | Hikari | 3.3.1 | 5.1.0 |
org.iq80.snappy:snappy | Snappy | 0.4 | 0.5 |
commons-io:commons-io | Commons I/O | 2.6 | 2.7 |
org.javassist:javassist | Java Assist | 3.27.0-GA | 3.29.2-GA |
org.jooq:joor | Joor | - | 0.9.15 |
org.apache.curator:* | Apache Curator | 5.1.0 | 5.6.0 |
org.apache.zookeeper:zookeeper | Apache Zookeeper | - | 3.8.3 |
org.apache.commons:commons-dbcp2 | Apache Commons | - | 2.12.0 |