コンテンツにスキップ

リリースノート - v0.70.9

タイトル: stake計算、APIのセキュリティ、ノードの信頼性を改善

日付: Not provided

バージョン: v0.70.9

リリース: v0.70.9

このリリースでは、委任stakeの計算、トランザクション送信、APIのデプロイ時のセキュリティ、Koios parity、ledger検証、Dingoノードとライブラリ利用者の復旧動作を改善します。

NetworkCompatible
mainnet
preprod-testnet
preview-testnet
musashi
  • 改善: address payload type 4と5のpointer address UTxOの計算で、migration v13を通じてpointer certificateの位置を保持し、de-registrationを処理しながらShelleyからBabbageまでstakeを解決し、過去と現在のsnapshotおよびMark計算にpointer stakeを含めるようにしました。Mithril gap ingestionでcertificate depositを渡し、過少だったdelegated stakeとpool leader thresholdを修正します。既存のデータベースではutxo_pointerを作成するために再同期または再構築が必要です。metadata interfaceではTransactionStore.SetGapBlockTransactionからcertDepositsを渡し、StakeSnapshotStore.GetPointerStakeInputsForPoolsからpointer inputを取得できます。

  • 修正: TxSubmissionの応答をトランザクションhashで照合し、不明または重複したbodyを拒否してから、検証済みトランザクションをmempool投入前に要求順へ戻すようにしました。peerの応答順が入れ替わっても、依存関係とFIFO順序が維持されます。

  • 検証: CIとmake config-parityで、埋め込みCardano network設定とcontainer imageに同梱された設定の一致を確認し、upstreamの差分を定期的に検出するようにしました。

  • 削除: 公開Blockfrost、Mesh、UTxO-RPC APIでbearer認証を不要にし、個別の--api-bind-addrAPIBindAddr、API認証設定を削除しました。これらのAPIは既定値0.0.0.0の共通--bind-addrを使用し、TLSは引き続き任意で利用できます。Midnightのremote plaintextには以前のopt-in gateが不要になりました。組み込みAPI認証に依存するデプロイは、privateなbind addressまたは外部gatewayを使用し、必要に応じてTLSを設定する必要があります。

  • 追加: koiosParity.baseUrlDINGO_KOIOS_PARITY_BASE_URL--koios-parity-base-urlKOIOS_URL--koios-urlでKoios v1のカスタムhostを設定できるようにし、任意のinsecure HTTP設定、URL検証、credential秘匿、cache provenanceの無効化に対応しました。

  • 洗練: Leios ledger applyで、アプリケーションが読み取らないbest-effort endorser referenceによって処理をブロックしないようにしました。必須のwaitはbounded windowを共有し、CIP waitにはbounded grace phaseを設け、mandatory fetchにはconcurrencyを予約し、Prometheusのwait metricでarrived、timeout、cancelled、unavailableを分類します。

  • 保持: 各pool registrationが保持するdepositを保存し、POOLREAPでその金額を返金するようにしました。migration v12でlegacy recordを補完し、中断したcolumn追加を安全に再実行できます。不明なdepositはNULLのまま残り、legacyのdeposit_amount fallbackを使用します。

  • 明確化: Koios parityで、chain positionにおけるpending rewardの差分をhard divergenceではなくreference_lagに分類し、accountとpoolの比較をそろえました。

  • 修正: UTxO-RPCで大きな負のPlutus integerを、入力値を変更せずにCBOR tag 3の(-1-n) magnitudeとして正しくエンコードするようにしました。

  • 強化: ledgerとforgingの検証をfail closedにし、Mithrilがカバーするslotを除く過去headerの暗号検証を強制し、forged blockの自己検証を既定で有効にしました。欠落または空のPlutus cost modelと不正なKES genesis設定を拒否し、過去処理で該当するphase 2 validationを省略せず、Byron protocol magicを確認し、block bodyの正確なサイズを強制します。

  • 整合: Leios fetch deadlineをcallerが開始した1つのtimerにそろえ、parentのdeadlineがchildと同じか早い場合はparent cancellationを再利用することで、peer cooldownの誤分類を防ぎました。

  • 一元化: chainとledgerのrollback公開をatomicにし、hashを持つslot-zero pointを検証し、truncation後のledger rollback失敗に専用のhard-failure identityを付けました。

  • 安定化: Midnight indexerの起動と再構築で設定を共有し、現在永続化されているledger tipを使用し、最初に発生したfatal shutdown causeを保持するようにしました。

  • 更新: plutigo dependencyをv0.6.1に更新し、PlutusV4 BLS multi-scalar builtinで範囲外の不正なscalarをcardano-nodeと一貫して拒否するようにしました。

  • 保持: Koios parityのCORE modeで、通常のcleanup boundを適用せずreward_account_outputを保持し、live restoreとtruncateの後もaccount比較が恒久的に失敗しないようにしました。以前にpruneされたデータはbackfillされません。

  • 明確化: EventBusのinline deliveryとordered deliveryを文書化し、deterministic testにはordered lane barrierを推奨するようにしました。

  • 解決: continuation auditでLeios endorser-block producerを解決し、pending referenceをmissingではなくinconclusiveとして報告し、schedulingに上限を設け、outcome metricを追加しました。

  • 制限: ledger schedulerとslot-clockのtestで、壊れやすいreal-time windowの代わりにstate confirmationとbounded waitを使用しました。この変更はtestのみを対象とします。

  • 分離: block-by-hash metricのtestを独立したsubprocessで実行し、共有counterのraceを防ぎました。この変更はtestのみを対象とします。

  • 確保: Badger-backed test databaseにbounded disk reservationを使用し、CIの信頼性を改善しました。この変更はtestのみを対象とします。

  • 算出: Mithril bootstrap boundaryからKoios parityで比較可能な最も早いepochを求め、backlogとcheckに上限を設け、記録されたboundaryが不正な場合はfail closedにしました。

  • 文書化: 不明なpool depositがNULLのまま残り、legacyのrefund fallbackを使用することを文書化してtestで確認しました。

  • 緩和: 使い捨てのmigration test databaseではSQLite durabilityを緩和し、CIの実行時間を短縮しました。この変更はtestのみを対象とします。

  • 防止: restore contextがcancelされた場合もproviderのshutdown完了までrestore blob cleanupを継続し、Badger directory lockのraceを防ぎました。

  • 維持: testからshared ChainSync state restorationを削除しながら、immutability assertionを維持しました。この変更はtestのみを対象とします。

  • 追加: AcquireSpecificPointによるpoint-aware LocalStateQueryに対応し、要求されたpointが現在のchain上にあることを検証して、GetPoolDistr2/PoolStakeDistribution、live tip epoch内のGetCurrentProtocolParamsGetEpochNoで使用するようにしました。無効なfork pointはErrPointNotOnChainを返し、利用できない、または未対応の過去データはErrHistoricalStateUnavailableを返します。GetUTxOWholeはlive stateのみを対象とし、connection終了時には取得したpoint stateを解放します。

  • 改善: ledger peer discoveryで不正なrelay hostnameをpeer listとsnapshotから除外し、有効なIP addressとDNS nameは引き続き受け入れるようにしました。

  • 分離: 想定内のpipeline pressureとshutdown時のworker cancellationを、Prometheus metricとDEBUG logで予期しないfailureから分け、通常の状態を区別しやすくしました。

  • 位置付け: Koios parityで、synthetic PlutusV2 cost modelの欠落をinformationalとして扱うようにしました。実際のcost model mismatchと他のlanguage versionは引き続きfailureとして扱います。

  • 拡張: point固定LocalStateQueryで、過去のGetStakeDistributionGetCurrentPParamsGetUTxOByTxInの再構成に対応しました。queryはslot時点のstateを使用し、履歴が利用できない場合はErrHistoricalStateUnavailableでfail closedになり、block admissionとforgingではreference scriptのaggregate budgetを適用します。

  • 安定化: cloud mirror lifecycle testのretryで、probe markerを使ってstartup scanのassertionと同期するようにしました。この変更はtestのみを対象とします。

  • 強化: synthetic cost model gapの期間中、Babbage、Conway、DijkstraでPlutusV2 transactionをErrNoCostModelForPlutusV2により拒否し、consensus互換の動作にそろえました。その期間に以前はacceptまたはestimateされていたtransactionがvalidationで失敗する可能性があります。

  • 制限: definite-length CBOR mapのallocationを残りのinputに収まる範囲に制限し、allocation前に収まらないentry countを拒否するようにしました。indefinite-length mapは変更していません。

  • 保護: Blockfrostのtransaction submitおよびevaluate request bodyをサイズと時間で制限し、listenerのread timeoutを60秒、bodyごとの既定deadlineを15秒にしました。不正またはtruncatedなbodyは引き続きHTTP 400を返します。

  • 公開: BlobStoreBadger.Closed()でBadgerの非同期close完了を通知し、consumerがdirectory lockの解放を待てるようにして、Windowsのlifecycle raceを防ぎました。

完全な変更履歴: v0.70.8…v0.70.9


Doc Holiday logo

Docs authored by Doc Holiday

ページを編集

最終更新日: