Conversation
…shake between cooperating Closes stellar-vortex-protocol#400
…patibility checker that ga Closes stellar-vortex-protocol#401
…Controller` contract that Closes stellar-vortex-protocol#402
…vernor contract for protoc Closes stellar-vortex-protocol#403
|
@jhayniffy Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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
fix: address #400, #401, #402, #403
What was solved
#400 — [High] Add an interface-version handshake between cooperating contracts
Add a semantic interface-version handshake across the four Soroban contracts (intent_settlement, proof_registry, solver_registry, reputation_badge) plus shared helpers in vortex-common. Each contract exports interface_version() -> (name, major, minor); settlement's set_proof_registry/set_solver_registry and directory updates reject incompatible major versions; dependency upgrades emit a version-change event so dependents can re-verify lazily; a compatibility matrix is documented. Pre-handshake contracts that trap on the call are treated as v0 via try_ clients.
Addressed:
#401 — [High] Add a contract-spec (ABI) compatibility checker that gates upgrades
Add a new
tools/spec-check/Rust crate that extracts the Soroban contract spec (functions, types, errors, events) from built wasm artifacts, compares it against committedspecs/<crate>.jsonbaselines, and failscargo teston breaking changes (removed/renamed functions, changed arg types, reordered enum variants, changed error codes, removed struct fields). Breaking changes must be explicitly allowlisted with a named issue. Covers all contracts (intent_settlement, proof_registry, reputation_badge, solver_registry).Addressed:
tools/spec-check/that runs as part ofcargo test -p spec-check.contractspecv0entries using thesoroban-speccrate.specs/<crate>.jsongenerated from the wasm spec entries for every contract in the workspace.#402 — [High] Implement a generic
TimelockControllercontract that owns protocol admin rolesAdd a standalone
timelock/Soroban crate implementing an OpenZeppelin-styleTimelockController(proposer/executor/canceller roles, hash-committed operation ids, min-delay self-administration, batch scheduling, andenv.invoke_contractreplay), plus a deployment runbook doc describing how each protocol contract's admin is transferred to the timelock. Scope is limited to the generic timelock and admin-transfer runbook; voting/Governor is explicitly out of scope, and existing per-contract timelocks are not refactored here.Addressed:
timelock/crate withCargo.tomlandsrc/lib.rs(plus tests) wired into the workspace/CI like the other crates.schedule(target, fn, args, salt, delay),execute,cancel,get_operation_state, and batch scheduling.#403 — [High] Implement a stake-weighted Governor contract for protocol parameter changes
Implement a Soroban-native stake-weighted Governor crate that derives voting power from checkpointed solver bond/delegated stake in solver_registry, supports propose/vote/quorum/timelock queue+execute, delegation, and snapshot-based anti-flash-stake protection, plus a governance doc.
Addressed:
Changes
tools/spec-check/src/lib.rs(create)timelock/src/lib.rs(create)governor/Cargo.toml(create)tools/spec-check/Cargo.toml(create)timelock/Cargo.toml(create)governor/src/lib.rs(create)README.md(modify)tools/spec-check/src/main.rs(create)timelock/src/test.rs(create)docs/governance-design.md(create)Approach
TimelockControllercontract that owns protocol admin roles #402 — [High] Implement a genericTimelockControllercontract that owns protocol admin roles (Changed: timelock/Cargo.toml, timelock/src/lib.rs, timelock/src/test.rs)Issues
Closes #400
Closes #401
Closes #402
Closes #403