Skip to content

flare: add FXRP calldata descriptors for AssetManager, FAsset, MintingTagManager - #2984

Open
fassko wants to merge 2 commits into
ethereum:masterfrom
fassko:flare-fxrp
Open

fassko wants to merge 2 commits into
ethereum:masterfrom
fassko:flare-fxrp

Conversation

@fassko

@fassko fassko commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add calldata descriptors for AssetManager, FAsset, and MintingTagManager (FXRP-related) on Flare and Songbird, with full test coverage
  • Add coverage tests for two already-attested descriptors this PR doesn't otherwise touch (DistributionToDelegators-Flare, ValidatorRewardManager-Flare), keeping their owner at "Flare Labs" per their attestation

Split out of #2982. See #2983 for WNat, #2985 for the PollingFoundation owner rename (unrelated governance contract, moved out of this PR).

Not included: RewardManager-{Flare,Songbird}. Both are attested and render blank (UNSUPPORTED_NESTED_FIELD_GROUP) in the Sourcify test runner, and the registry's index allows only one descriptor per (chainId, address) — so there's no versioned-file path to a fix while the contract address stays the same. This needs a maintainer call on how to replace an attested-but-unrenderable descriptor; happy to prepare it once there's a direction.

Amount fields (Reservation Fee) expect FLR/SGB, which the Sourcify runner already gets right for these chains; the Rust runner needs llbartekll/clear-signing#15 (native-currency table for Flare/Songbird) merged and its pin bumped in .github/actions/run-rust-tests/action.yml before that job goes green here.

Test plan

  • Verified locally against both the Sourcify and a patched Rust runner (all cases pass)
  • check-selector-coverage.js passes for every changed descriptor
  • CI descriptor validation

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Clear Signing Tests

Tested 97766f5 · started 2026-09-28 07:47 UTC · finished 2026-09-28 07:48 UTC

📊 Open the test report

Entity Descriptor Case @ethereum-sourcify/clear-signing@0.2.2 llbartekll/clear-signing@0.1.0
flare calldata-AssetManager-FXRP-Flare Redeem 10 FXRP by amount - chain 14 ✅ ✅
flare calldata-AssetManager-FXRP-Flare Redeem 10 FXRP with destination tag - chain 14 ✅ ✅
flare calldata-AssetManager-FXRP-Flare Redemption payment default - chain 14 ✅ ✅
flare calldata-AssetManager-FXRP-Flare Execute direct minting - chain 14 ✅ ✅
flare calldata-AssetManager-FXRP-Flare Execute direct minting with data - chain 14 ✅ ✅
flare calldata-AssetManager-FXRP-Songbird Redeem 10 FXRP by amount - chain 19 ✅ ✅
flare calldata-AssetManager-FXRP-Songbird Redeem 10 FXRP with destination tag - chain 19 ✅ ✅
flare calldata-AssetManager-FXRP-Songbird Redemption payment default - chain 19 ✅ ✅
flare calldata-AssetManager-FXRP-Songbird Execute direct minting - chain 19 ✅ ✅
flare calldata-AssetManager-FXRP-Songbird Execute direct minting with data - chain 19 ✅ ✅
flare calldata-DistributionToDelegators-Flare Claim month 12 wrapped - chain 14 ✅ ✅
flare calldata-DistributionToDelegators-Flare Batch claim month 12 - chain 14 ✅ ✅
flare calldata-DistributionToDelegators-Flare Opt out of airdrop - chain 14 ✅ ✅
flare calldata-FAsset-FXRP-Flare Send 1 FXRP - chain 14 ✅ ✅
flare calldata-FAsset-FXRP-Flare Approve 10 FXRP for AssetManager - chain 14 ✅ ✅
flare calldata-FAsset-FXRP-Songbird Send 1 FXRP - chain 19 ✅ ✅
flare calldata-FAsset-FXRP-Songbird Approve 10 FXRP for AssetManager - chain 19 ✅ ✅
flare calldata-MintingTagManager-FXRP-Flare Reserve minting tag - chain 14 ✅ ✅
flare calldata-MintingTagManager-FXRP-Flare Set mint recipient for tag 1 - chain 14 ✅ ✅
flare calldata-MintingTagManager-FXRP-Flare Set mint executor for tag 1 - chain 14 ✅ ✅
flare calldata-MintingTagManager-FXRP-Flare Transfer minting tag 1 - chain 14 ✅ ✅
flare calldata-MintingTagManager-FXRP-Songbird Reserve minting tag - chain 19 ✅ ✅
flare calldata-MintingTagManager-FXRP-Songbird Set mint recipient for tag 1 - chain 19 ✅ ✅
flare calldata-MintingTagManager-FXRP-Songbird Set mint executor for tag 1 - chain 19 ✅ ✅
flare calldata-MintingTagManager-FXRP-Songbird Transfer minting tag 1 - chain 19 ✅ ✅
flare calldata-ValidatorRewardManager-Flare Claim 1 FLR wrapped - chain 14 ✅ ✅
flare calldata-ValidatorRewardManager-Flare Set claim executor - chain 14 ✅ ✅
flare calldata-ValidatorRewardManager-Flare Set allowed claim recipient - chain 14 ✅ ✅

✅ pass · ❌ fail · ⚠️ error · ⏭️ skipped · — not run

📋 View test details

@github-actions github-actions Bot added the descriptors Changes to clear signing descriptors label Sep 14, 2026
@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Clear signing recommendations

These are suggestions. They do not block this pull request.

22 format(s) have no interpolatedIntent. A wallet prefers it over intent, because it puts the values of the transaction in the sentence that the signer reads.

  • registry/flare/calldata-AssetManager-FXRP-Flare.json — redeemAmount(uint256 _amountUBA, string _redeemerUnderlyingAddressString, address _executor)
  • registry/flare/calldata-AssetManager-FXRP-Flare.json — redeemWithTag(uint256 _amountUBA, string _redeemerUnderlyingAddressString, address _executor, uint256 _destinationTag)
  • registry/flare/calldata-AssetManager-FXRP-Flare.json — redemptionPaymentDefault((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (uint64 minimalBlockNumber, uint64 deadlineBlockNumber, uin
  • registry/flare/calldata-AssetManager-FXRP-Flare.json — executeDirectMinting((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (bytes32 transactionId, address proofOwner) requestBody, (uint6
  • registry/flare/calldata-AssetManager-FXRP-Flare.json — executeDirectMintingWithData((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (bytes32 transactionId, address proofOwner) requestBody
  • registry/flare/calldata-AssetManager-FXRP-Songbird.json — redeemAmount(uint256 _amountUBA, string _redeemerUnderlyingAddressString, address _executor)
  • registry/flare/calldata-AssetManager-FXRP-Songbird.json — redeemWithTag(uint256 _amountUBA, string _redeemerUnderlyingAddressString, address _executor, uint256 _destinationTag)
  • registry/flare/calldata-AssetManager-FXRP-Songbird.json — redemptionPaymentDefault((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (uint64 minimalBlockNumber, uint64 deadlineBlockNumber, uin
  • registry/flare/calldata-AssetManager-FXRP-Songbird.json — executeDirectMinting((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (bytes32 transactionId, address proofOwner) requestBody, (uint6
  • registry/flare/calldata-AssetManager-FXRP-Songbird.json — executeDirectMintingWithData((bytes32[] merkleProof, (bytes32 attestationType, bytes32 sourceId, uint64 votingRound, uint64 lowestUsedTimestamp, (bytes32 transactionId, address proofOwner) requestBody
  • registry/flare/calldata-FAsset-FXRP-Flare.json — transfer(address to, uint256 amount)
  • registry/flare/calldata-FAsset-FXRP-Flare.json — approve(address spender, uint256 amount)
  • registry/flare/calldata-FAsset-FXRP-Songbird.json — transfer(address to, uint256 amount)
  • registry/flare/calldata-FAsset-FXRP-Songbird.json — approve(address spender, uint256 amount)
  • registry/flare/calldata-MintingTagManager-FXRP-Flare.json — reserve()
  • registry/flare/calldata-MintingTagManager-FXRP-Flare.json — setMintingRecipient(uint256 _mintingTag, address _recipient)
  • registry/flare/calldata-MintingTagManager-FXRP-Flare.json — setAllowedExecutor(uint256 _mintingTag, address _executor)
  • registry/flare/calldata-MintingTagManager-FXRP-Flare.json — transfer(address _to, uint256 _mintingTag)
  • registry/flare/calldata-MintingTagManager-FXRP-Songbird.json — reserve()
  • registry/flare/calldata-MintingTagManager-FXRP-Songbird.json — setMintingRecipient(uint256 _mintingTag, address _recipient)
  • registry/flare/calldata-MintingTagManager-FXRP-Songbird.json — setAllowedExecutor(uint256 _mintingTag, address _executor)
  • registry/flare/calldata-MintingTagManager-FXRP-Songbird.json — transfer(address _to, uint256 _mintingTag)

@fassko fassko changed the title flare: add FXRP calldata descriptors, correct PollingFoundation owner flare: add FXRP calldata descriptors for AssetManager, FAsset, MintingTagManager Sep 14, 2026
@fassko
fassko force-pushed the flare-fxrp branch 2 times, most recently from 0bbf0ed to 0dcb0c3 Compare September 28, 2026 07:23
…TagManager

Introduces calldata descriptors for AssetManager, FAsset, and
MintingTagManager for both Flare and Songbird, with test cases for
each. PollingFoundation (unrelated governance contract) moved to its
own PR.

Also adds the coverage tests the registry's new selector-coverage
check requires for two already-attested descriptors this PR does not
otherwise touch, DistributionToDelegators-Flare and
ValidatorRewardManager-Flare, keeping their expectations at
"Flare Labs" since that's what their attestation covers.

Executor Fee / Reservation Fee fields expect FLR/SGB rather than the
ETH the Rust test runner prints today for chains 14/19;
llbartekll/clear-signing#15 adds the missing native-currency entries
that make it so.

Not included: RewardManager-{Flare,Songbird}. Both are attested and
render blank in the Sourcify runner (nested field groups are
unsupported), and the index disallows a second descriptor at the same
address, so there's no way to land a fix here — needs a maintainer
decision on how to replace an attested-but-unrenderable descriptor.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

descriptors Changes to clear signing descriptors

Projects

Status: Triage

Development

Successfully merging this pull request may close these issues.

2 participants