Skip to content

chore(contracts,bindings): cut release candidates contracts/v2.0.0-rc.0 and bindings/v3.0.0-rc.7 - #99

Merged
heueristik merged 122 commits into
stagingfrom
next
Aug 24, 2026
Merged

heueristik merged 122 commits into
stagingfrom
next

Conversation

@heueristik

Copy link
Copy Markdown
Collaborator

No description provided.

jonaprieto and others added 30 commits April 10, 2026 16:49
…tatement

Use the more concise require(condition, Error()) pattern instead of
if-revert blocks for precondition checks.
refactor: replace if-revert-error with require-error statement
chore(contracts, bindings): bump deps and tempo and tempo-moderato deployment
Seed the JSON file from the current hardcoded addresses in
`bindings/src/addresses.rs`. Includes `protocolAdapterAddress`
to record which protocol adapter each forwarder is linked to.
Replace the hardcoded HashMap in `addresses.rs` with `include_str!`
+ `serde_json` parsing of `deployments.json`. The JSON is embedded
at compile time — no scripts or codegen needed. Public API unchanged.
Validate that all entries have known chain IDs, valid addresses,
no duplicate chain IDs, and that the parsed map matches the JSON.
Replace references to editing `addresses.rs` with instructions
to edit `deployments.json`, including JSON format examples and
notes that validation is handled by existing `just` commands.
Also update cross-reference to pa-evm's `deployments.json`.
heueristik and others added 21 commits August 24, 2026 12:09
…ng constant

`getVersion()` returning a `bytes32` small string becomes `VERSION`, a public
`string` constant, matching the protocol adapter. The selector changes from
`0x0d8e6e2c` to `0xffa1ad74`, so `IVersion` from the forwarder bases no longer
applies and the forwarder declares the version itself.
The recorded base-sepolia forwarder is a v1-era deployment wired to a retired protocol adapter, and it answers `getVersion()` rather than the `VERSION()` this source generates bindings for, so it can no longer be described by this crate.
feat(contracts,bindings)!: make forwarder upgradeable
…tocol adapter

Pins solc 0.8.36, the protocol adapter 2.0.0-rc.0 and
`anoma-risc0-deployments` 1.2.1 as the protocol adapter does, and adds
`safe-smart-account` and `safe-utils` for proposing to the Safe owning
the production proxy. Narrows the filesystem access to the build
artifacts and the deployment record, the two files the tests read. The
bindings are regenerated under the new compiler.
The proxy deploy script selects the staging or the production
environment, which picks the CREATE2 salt and the owner: the deployment
wallet for staging, the Safe multisig for production. The implementation
takes no constructor arguments, so it deploys deterministically to one
address on every chain, shared by both environments. Both scripts predict
their addresses so that a recorded deployment can be checked against the
source.

`deployments.json` records the proxy per environment with the genesis
fields pinning how its address was derived. The fixture recomputes the
address on every run, and the promotion gate forks each recorded chain to
prove it runs the source implementation — as a release or candidate on
staging, as a Safe-owned release on production. The bindings expose the
record keyed by `Environment` and no longer carry the implementation,
which the chain answers.

The base-sepolia test deployment predates this layout and is dropped; the
next deploy records a genesis entry.
Staging executes the upgrade as the proxy owner; production proposes it
to the Safe owning the proxy, whose signers confirm and execute it in the
Safe app. Both check that the target is the implementation this source
version deploys to and that it is deployed, and both refuse a proxy of
the other environment.

The script upgrading to the `ERC20ForwarderV2` draft goes: rotating the
logic reference through a reinitializer is superseded by the kind table,
and the draft stays only to exercise the UUPS path in the tests.
`contracts-publish` took the version as an argument, which let the
package label drift from the `VERSION` the source ships. The recipe now
runs a script returning the compiled constant and refuses to push
anything that is not a version.
Pull requests into `staging` and `main` set the flag that un-skips the
deployment tests for their environment, so a promotion proves the
recorded proxies run the source it carries. Pushes to `staging` run the
workflows like the other environment branches.
The checklist follows the protocol adapter's: a release candidate cycles
through staging, the lifted release carries to production through a Safe
proposal, and a chain new to an environment records one genesis entry.
The glossary gains the environment terms.
Also risc0-deployments 1.2.2, alloy 2.4.1, and the protocol adapter bindings by git rev — the promotion-gate tests now compare against the protocol adapter proxy of the same environment; the rev moves to "3.0.0-rc.6" once that reaches crates.io.
feat(contracts,bindings)!: split the forwarder into a staging and a production environment
build: bump to forwarder bases 3.0.0 and protocol adapter 2.0.0-rc.1
fix(contracts): use forwarder mutltisig as the proxy owner
chore(contracts,bindings): prepare contracts/v2.0.0-rc.0 and bindings/v3.0.0-rc.7
@heueristik heueristik self-assigned this Aug 24, 2026
@heueristik heueristik changed the title Next chore(contracts,bindings): cur release candidates contracts/v2.0.0-rc.0 and bindings/v3.0.0-rc.7 Aug 24, 2026
@heueristik
heueristik merged commit 873abdd into staging Aug 24, 2026
5 checks passed
@heueristik heueristik changed the title chore(contracts,bindings): cur release candidates contracts/v2.0.0-rc.0 and bindings/v3.0.0-rc.7 chore(contracts,bindings): cut release candidates contracts/v2.0.0-rc.0 and bindings/v3.0.0-rc.7 Aug 25, 2026
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.

2 participants