Repository navigation
Conversation
3 of 4 tasks
|
Closing for the same reason: IntersectMBO/cardano-ledger#6153 (comment) |
Author
The above issues are unrelated to CIP-160 and probably should be reviewed as they are issues with the existing formalization. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add proposed CIP-160 output-creation authorization to the Dijkstra executable model. Each protected Plutus output has a separate Receiving purpose with its original body-local index and resolved TxOut; identical outputs retain distinct executions, redeemers and budgets.
Key/ordinary/native outputs do not renumber Plutus indexes. Parent and child purposes, redeemers and contexts remain independent; every declared invocation budget contributes to aggregate fees and transaction/block limits. Existing witness/reference-script availability is shared, while a newly created output cannot authorize itself through its own reference script.
Protection participates in address equality. Conway rejects protected outputs; proposed Dijkstra admission begins at protocol major 12 in each body. Supported contexts preserve protection, and legacy languages reject it where visible. Receiving introduces no implicit datum. Protected collateral returns always fail phase 1; accepted phase-2-invalid batches preserve ordinary inputs, create no ordinary outputs and apply only top-level collateral/return/fee effects.
This also fixes existing model discrepancies exposed by composed integration: hard-fork enactment synchronizes the authoritative and stored protocol-parameter versions while preserving update-chain identity; Leios selection includes registered zero-stake pools and enumerates each semantic pool ID once, even when multiple accounts delegate to it, without changing positive-stake fractional weights, ranking or pool-ID tie breaks. One committee seat per selected pool is separate from Receiving, which requires one execution per protected Plutus output. Companion ledger translation independently reconstructs committee pool IDs from snapshot ranking and checks weight, honored key and real proof-of-possession with actual runtime
Globals, including key-age context.CIP160.md documents model/API boundaries. This accompanies the Plutus V4 proposal and CIP-160/CIP-19 amendment. Per-output execution is our implementation decision, supported by CIP-160's per-output validation rule and lehins's resolved-TxOut comment. Exact raw indexes, Data fields and activation remain proposals requiring upstream review; those sources do not establish approval of every implementation detail.
Evidence
After: source rules define independent indexed authorization and collateral effects, synchronize hard-fork version state, retain registered zero-stake identities and select each semantic pool ID once. Regression assertions cover exact resulting states and committee selection boundaries.
87072fed43a085bbbaaeb5888a7792ec5f8a164apasses complete Agda specification/proof closure, historical examples/interface checks, the 39-entry property scanner and genuine signed-source Shake extraction. GHC compiled the actual extracted public API and passed 73/73 persistent runtime assertions: 56 Receiving, four hard-fork and 13 Leios, including four new composed-epoch single/split/equal-delegator and top-K checks.b747be78f6e001d41395974251cf0b42f45b68c4contains 789 generated files, independently matched byte-for-byte to the extraction. Manifest SHA-256:8d0d123d8eb3728884ad272c00f18169c1244fe43563df18af28d813c41ff535. Generated Haskell was not edited; Cabal/Nix pin the published artifact.-N2) at ledger77d85ec1dd18b548977ee9126b63d3d6d4e47f97and artifactb747be78f6e001d41395974251cf0b42f45b68c4. All 1287 compiled Haskell/Cabal source hashes are unchanged, and the pending-case sequence matches the baseline. All four committee-selection failures are resolved by semantic pool-ID enumeration; the ledger's independently ranked adapter remains strict. Concrete execution results are separate from abstract model assertions.Development source/artifact:
87072fed43a085bbbaaeb5888a7792ec5f8a164a/b747be78f6e001d41395974251cf0b42f45b68c4. Both are signed and published; integrated conformance passes. Upstream acceptance and artifact publication remain pending.Checklist
Merge Danger
Door: one-way after activation
Changes address and transaction representations in the extracted API. Activation requires coordinated agreement; matching ledger translation must consume the generated revision.
Blast Radius: Dijkstra
Shared address examples/translations must retain ordinary protection as false. The existing ledger CI gate requires the final generated dependency to be an ancestor of upstream
master-artifacts; fork publication and local extraction/runtime passes alone cannot satisfy it.