リリースノート - v0.70.2
v0.70.2
Section titled “v0.70.2”タイトル: 台帳の安全性、同期、APIの信頼性を改善
日付: Not provided
バージョン: v0.70.2
このリリースでは、Dingoノードとライブラリ利用者向けに、台帳検証、同期の復元力、データベースの安全性、トランザクション処理、APIの正確性を改善します。
推奨ネットワーク互換性 ⚠️
Section titled “推奨ネットワーク互換性 ⚠️”| Network | Compatible |
|---|---|
| mainnet | ⛔ |
| preprod-testnet | ✅ |
| preview-testnet | ✅ |
| musashi | ✅ |
-
改善: 通知タイムアウトを超えて停止した通常の購読者を
ErrEventSubscriberStalledとテレメトリ付きで切断し、chainsync、chain update、blockfetchの購読者では損失のないブロッキング動作を維持するようにしました。任意のblock eventの切断は致命的なエラーになりません。 -
是正: Mithril境界で各プールの認証済み運用証明書カウンターをスナップショットから取り込み、境界前の古い履歴を無視しながら連続したローテーション検証を維持するようにしました。
-
強化: ドキュメントのパリティ検出でパスを正規化し、区切り文字を統一して、生成されたworktreeとネストした
.gitまたはnode_modulesの内容を除外することで、プラットフォーム間のチェックを一貫させました。 -
保護: 1つの台帳検証スナップショットから候補トランザクションを選択し、署名前に親チップを再確認することで、ブロック生成を保護しました。
-
制限:
FindIntersectの各リクエストで重複したpointを除去し、接続ごとの検索予算を適用して処理量を制限しました。予算を使い切ったリクエストは既存のIntersectNotFound結果を返します。 -
改良: blob削除が不完全な場合に
ErrBlobDeleteIncompleteを返し、エラーをログに記録して、永続的なメタデータのコミット後にdingo_database_blob_orphans_totalを公開するようにしました。 -
報告: UTxO RPCで保存ブロックを検索して高さ0にフォールバックする代わりに、台帳が認識しているチップの高さを返すようにしました。
-
整合: 報酬パラメータにはperformance epochを使用し、epoch lengthにはcalculation epochを使用するようにして、Previewの報酬ポットを修正しました。applied stake rewardsログのフィールド名も
performance_pparams_typeに変更しました。 -
拒否: peer snapshotのゼロ以外の
NetworkMagicがノードの値と異なる場合に起動を拒否するようにしました。ゼロは引き続きsnapshotの値が未指定であることを示します。 -
復元: epoch 0から1へのmonetary expansion roundを適用し、epoch 0の報酬ポットを初期化するとともに、新しいstakeなしのgenesis snapshotを安全に処理するようにしました。
-
検証: 取得したLeiosトランザクションをキャッシュまたは使用する前に、manifest上の位置、サイズ、ハッシュと照合するようにしました。保持されていた部分取得データも検証します。
-
制限: Genesis復旧スキャンをパスごとのメモ化で制限し、解決できないロールバック経路ではfail closedのChainSyncフォールバックを維持しました。
-
確認: ShelleyからAlonzoまでのTPraosヘッダーについて、署名済みheader bodyのCBORからnonce VRF proofを検証してから受け入れるようにしました。
-
修正: Koiosパリティ検査でプールの存在とプールパラメータのepochを正しく対応させ、パラメータだけの誤った不一致を防ぎました。プールのcostとmarginはstake epochから比較し、生成ブロック数は引き続きparameter epochから比較します。
-
安定化:
txpumpが実効ランタイムgenesisを待機し、呼び出し側が所有するstake keyディレクトリを保持することで、高速化されたDevNetのトランザクション伝播とstake keyのクリーンアップを安定させました。 -
検査: Leios endorser blockのofferとmanifestのサイズを検証し、キャッシュを1エントリあたり16 MiB、全体で256 MiBに制限して決定的に排出するようにしました。サイズ超過のエントリはキャッシュせずに再読み込みします。
-
継続:
IsValid: falseのトランザクションでも構造とvalidity intervalの検証を行い、phase twoの評価はスキップするようにしました。UTxO RPCではPlutusのマッピングエラーを返します。 -
解放: 接続の終了時または置き換え時にnode-to-client chainsyncの状態を解放し、node-to-nodeのクリーンアップを重複して実行しないようにしました。
-
維持: live restoreおよびtruncate処理で設定済みのシャットダウン期限を使用し、監視側が再起動による復旧を必要とするときは
errStorageDrainUnconfirmedへエスカレーションするようにしました。 -
区別: 設定されたネットワーク識別情報を伝播し、共有されたmainnet genesisの識別情報だけに依存しないことで、prime-mainnetとCardano mainnetを区別するようにしました。
-
保護: Leios block builderの機能をコンパイル時に検査し、インターフェースの変更がブロック生成時ではなくビルド時に失敗するようにしました。
-
拒否: 数値変換、削除範囲、SQLiteの符号付き値、asset、UTxOで、ラップするインデックスと範囲外の値を拒否するようにしました。32ビットビルドも正しくコンパイルできます。
-
防止: ガバナンスと寄付の算術オーバーフローを、永続化を部分的に行う前にfail closedとなる加算チェックと期間ガードで防止しました。
-
設定: loadモードで正しいeraのsecurity parameterを、リプレイフックとロールバック検証の前に検証して設定するようにしました。
-
初期化: 複数eraの境界で
ShelleyGenesisHashからByron後のepoch nonceを補い、必要な設定がない場合はfail closedとなるようにしました。 -
追加:
LookupClientが時点のchainsyncクライアント状態スナップショットを返し、cursor hashを独立してコピーしてロールバック状態を同期するようにしました。低速な接続が他のクライアントをブロックしません。呼び出し側は*ChainsyncClientStateではなく*ChainsyncClientStateSnapshotを使用する必要があります。 -
適用: eraごとの報酬引き出し検証を適用し、現在の報酬残高を超える金額を拒否するようにしました。
-
返却:
LeiosFetchでendorser blockまたはtransaction bodyのデータを提供できない場合に型付きエラーを返し、malformed bitmapのエラーを区別するようにしました。任意のvote managerがない場合、LeiosFetchは有効な空のMsgVotesレスポンスを返しますが、単独のLeiosVotesは引き続き利用できません。 -
除外: 暗号検証後に古い、または発行者が不明なOCINアナウンスを記録、処理、公開、リレーせず、接続も切断しないようにしました。新しいアナウンスは従来どおり処理します。
-
拒否: 標準プロファイルで、アクティブステークがゼロ、またはアクティブスロット係数がないか正でないためにリーダー適格性を評価できないブロックを拒否するようにしました。
catch-up処理では、リーダーステークスナップショットを利用できない場合に評価を延期できます。 -
封じ込め: リーダー選択、生成済みブロックの検証、ブロック公開のコールバックで発生したpanicを封じ込め、スタックトレースを記録し、既存のphase failureとして報告するようにしました。回復したpanicを
dingo_forge_panic_recovered_total{phase}で数え、次のforgeサイクルを継続できます。 -
許可: Conway PV10およびPV11のscript-hash報酬引き出しでDRep委任ゲートを適用しないようにしました。key-hashの引き出しでは引き続きこのゲートが必要です。
-
直列化: 起動時のクリーンアップとシャットダウンを直列化し、
Node.Stopが起動失敗後のロールバックと競合したり、コンポーネントを二重に終了したりしないようにしました。 -
修復: Goのledgerおよびmempoolベンチマークのセットアップを修正し、測定前にpanicや失敗が発生しないようにしました。
-
更新: ユーザー向けドキュメントとサンプルの互換性、エンドポイント、バージョン情報を更新し、ルートパッケージ向けのGoDocドキュメントを追加しました。
-
導入: トランザクションを送信せずにCBORを評価し、
spend:0やmint:0などのポインターに対するredeemer実行ユニットを返すPOST /api/v0/utils/txs/evaluateを導入しました。誤ったContent-Typeには415、サイズ超過のbodyには413、空または無効なCBORには400、その他の評価失敗には500を返します。
完全な変更履歴: v0.70.1…v0.70.2
Docs authored by Doc Holiday