Skip to content

Sync with upstream and re-express M0 chain support - #3

Closed
Khrafts wants to merge 4 commits into
mainfrom
feat/sync-upstream-chains
Closed

Khrafts wants to merge 4 commits into
mainfrom
feat/sync-upstream-chains

Conversation

@Khrafts

@Khrafts Khrafts commented Aug 14, 2026

Copy link
Copy Markdown
Member

Syncs the fork with Recon-Fuzz/safe-utils (we were 1 ahead, 3 behind) and re-expresses our chain support against the new API.

This is a port, not a merge

Upstream 34a5fbf removed the per-instance urls and multiSendCallOnly mappings and replaced them with pure functions driven by safe-core-sdk's network list. 7f16d67 wrote to fields that no longer exist, so the one conflict resolved in upstream's favour and its chains were rebuilt against the new API.

Chains

Resolved through the third-party override in getApiKitUrl, each host confirmed 200 on /api/v1/about/:

chainId chain host
1329 Sei transaction.sei-safe.protofire.io
1868 Soneium transaction-soneium.safe.protofire.io
2288 Moca transaction-mocachain.safe.protofire.io
4114 Citrea transaction.safe.citrea.xyz
25363 Fluent api.safe.global/tx-service/fluent
  • Soneium's host is corrected from trx-soneium, which does not resolve.
  • Mantra (5888) is dropped — no reachable host on any candidate name.
  • Monad, 0G and Plasma need no entry; they arrive with upstream's SDK sync.
  • Fluent is served by Safe's own infrastructure but is absent from safe-core-sdk, so it needs the override rather than a getNetworkShortName slug — adding a slug not in the SDK would fail SafeDifferentialTest.

MultiSend

Sei and Soneium are in safe-deployments, so they join SUPPORTED_THIRD_PARTY_CHAIN_IDS and are covered by the differential test.

Moca, Citrea and Fluent have no safe-deployments record. Their v1.4.1 canonical was confirmed by eth_getCode against each chain's public RPC and is pinned in a dedicated test instead. The FFI helper was deliberately not taught to author those addresses — that would assert only that two hand-edited files agree, while reading green.

Citrea is why this cannot default to the v1.3.0 canonical: 0x40A2… is not deployed there, only v1.4.1 0x9641….

Verification

forge test — 29/29 pass. Consuming repo (evm-m-suite-deployment) builds clean against this branch with no call-site changes; initialize, proposeTransaction(s), getNonce and sign all kept their signatures.

Note

PR #2 should be closed rather than merged: its diff targets the removed mappings, and its Citrea entry maps to the v1.3.0 canonical that is not deployed on that chain — batched proposals would have built cleanly and failed at execution. Its reachable chains are all included here.

Rise (4153), Nexus (3946) and Mantra (5888) remain unsupported — tracked separately.

aviggiano and others added 4 commits April 3, 2026 16:11
* Sync Safe tx service config with latest SDK

* Address PR review feedback

* Add differential tests against pinned api-kit

* Remove incorrect private flag from package metadata

* Use sequential indexing in Safe config fixtures

* Keep Safe fixture pairs together with append helpers

* Fix multisend config review findings

* Add multisend differential test against deployments
feat: simulation when broadcast not specified
Upstream 34a5fbf replaced the per-instance `urls` and `multiSendCallOnly`
mappings with pure functions driven by safe-core-sdk's network list, so the
chain entries added in 7f16d67 no longer had a structure to live in. They are
re-expressed here against the new API.

Resolved the one conflict in favour of upstream: `initialize` no longer
populates any chain maps.

Chains now resolved through the third-party override in `getApiKitUrl`, each
host confirmed answering 200 on `/api/v1/about/`:

  1329  Sei      transaction.sei-safe.protofire.io
  1868  Soneium  transaction-soneium.safe.protofire.io
  2288  Moca     transaction-mocachain.safe.protofire.io
  4114  Citrea   transaction.safe.citrea.xyz
  25363 Fluent   api.safe.global/tx-service/fluent

Soneium's host is corrected from `trx-soneium`, which does not resolve. Mantra
(5888) is dropped: no reachable transaction service on any candidate hostname.

Monad, 0G and Plasma needed no entry — they arrive from upstream's SDK sync.

MultiSend: Sei and Soneium are in safe-deployments and join the differential
test. Moca, Citrea and Fluent are absent from it, so their v1.4.1 canonical was
confirmed by `eth_getCode` and is pinned in a dedicated test instead. Citrea is
why this cannot default to the v1.3.0 canonical — only v1.4.1 exists there.
@Khrafts

Khrafts commented Aug 14, 2026

Copy link
Copy Markdown
Member Author

Split into two stacked PRs so the upstream sync and our own changes review separately:

Same end state: #5's tree is identical to this branch's HEAD. Closing in favour of those.

@Khrafts Khrafts closed this Aug 14, 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.

3 participants