Skip to content

feat: sdk 26–27 compat, bn254 module, contractimpl findings, vendored publishable attr stack - #1

Open
willemneal wants to merge 4 commits into
mainfrom
feat/consumer-support
Open

feat: sdk 26–27 compat, bn254 module, contractimpl findings, vendored publishable attr stack#1
willemneal wants to merge 4 commits into
mainfrom
feat/consumer-support

Conversation

@willemneal

Copy link
Copy Markdown
Contributor

Everything soroban-flux grew while the M1–M5 rollout landed across consumers (perch#32, nido#194, contracts#32, admin-sep#19, neftwerk#3, rs-soroban-sdk#2 draft):

  • sdk 26–27 range (>=26.0.1, <28) — perch is on 26, nido/admin-sep on 27.
  • bn254 moduleBN254_R_BE single source (pinned by an independent long-division test + r−1/r/r+1 boundary tests), field_order/is_canonical_be/reduce_be. Now used by nido pool+factory and arts1-token.
  • contractimpl findings (probe 4) — the 2024 flux-fork sdk patch is obsolete (sdk 25+ strips tool attrs from generated code via pass_through_attr_to_gen_code), and the generated __invoke_raw dispatcher is flux-checked as a caller, correctly rejecting unvalidated input refinements on public entry points. Recorded in COMPATIBILITY.md.
  • Vendored attr stack (M5 prep)soroban-flux-{attrs-impl,attrs,rs} vendor lib/flux-{attrs-impl,attrs,rs} (MIT) byte-identically via cargo dependency renaming; soroban-flux drops its git dep, making the whole graph crates.io-publishable. cargo publish --dry-run passes on the leaf; release-plz config follows admin-sep's opt-in pattern. Publishing itself stays deferred.
  • Lint policy via [lints] tables: first-party deny, vendored allow.

Gates: cargo flux green (soroban-flux-rs 60, lib 11, probe 18 fns), 10 stable test suites green, just check green.

Consumer note: perch/nido/arts1 pin revs on this branch (72d0679/dfb1b19/e7af29a); after merge, bump their pins to the merge rev at leisure — branch commits stay reachable.

🤖 Generated with Claude Code

https://claude.ai/code/session_01M52tZC7sppbbo1HDBpj9KK

willemneal and others added 4 commits August 17, 2026 10:08
An exact =26.0.1 pin conflicts with consumers locked to newer 26.x
patches (perch locks 26.1.1); the 26.x line is what COMPATIBILITY.md
actually promises.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M52tZC7sppbbo1HDBpj9KK
BN254_R_BE single-source constant (pinned to decimal r by an
independent long-division test), field_order/is_canonical_be/reduce_be
helpers for consumers (nido pool + factory, UltraHonk verifiers) —
replaces per-repo byte constants and cross-crate drift-guard tests.
Widen soroban-sdk req to >=26,<28: perch is on 26, nido/admin-sep on 27;
the touched API surface (BytesN/Bytes/U256/Env) is identical.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M52tZC7sppbbo1HDBpj9KK
…patcher checked as caller

Modern soroban-sdk (25+) already strips non-doc/cfg/allow/deny attrs from
macro-generated code (pass_through_attr_to_gen_code), so the 2024
flux-rs fork's filter_out_flux_attrs patch is unnecessary. Better: the
generated invoke_raw dispatcher is flux-checked as a caller, which makes
input refinements on public entry points unprovable — exactly right,
since the host can pass anything. Probe pins both findings; recorded in
COMPATIBILITY.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M52tZC7sppbbo1HDBpj9KK
…lishable

Vendor lib/flux-{attrs-impl,attrs,rs} from flux-rs/flux (MIT) at FLUX_REV
as soroban-flux-{attrs-impl,attrs,rs}, using cargo dependency renaming so
both the vendored sources and this workspace's flux_rs:: paths stay
byte-identical to upstream — only Cargo.toml manifests differ (see
crates/soroban-flux-attrs-impl/VENDORED.md). soroban-flux switches from
the flux-rs git dep to the vendored path dep, removing the last git
dependency from the publish graph (crates.io forbids them).

Proven equivalent: cargo flux verifies identically under the vendored
stack (the driver interoperates via the flux_tool attribute namespace,
not crate identity); stable tests + probes all green.

release-plz.toml lands with admin-sep's pattern (workspace release=false
+ per-package opt-in). Lint policy moves to [lints] tables: first-party
crates deny warnings via workspace lints; vendored crates cap to allow
so upstream source never has to satisfy this repo's lint bar (and the
clippy workspace-wrapper can't fail the build over vendored style).

Publishing itself stays deferred per the locked decision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M52tZC7sppbbo1HDBpj9KK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant