Skip to content

Add Feral File ERC-7730 calldata descriptors#2599

Open
jollyjoker992 wants to merge 8 commits into
ethereum:masterfrom
feral-file:feat/feral-file-descriptors
Open

Add Feral File ERC-7730 calldata descriptors#2599
jollyjoker992 wants to merge 8 commits into
ethereum:masterfrom
feral-file:feat/feral-file-descriptors

Conversation

@jollyjoker992

@jollyjoker992 jollyjoker992 commented Jun 1, 2026

Copy link
Copy Markdown

Summary

Adds ERC-7730 calldata descriptors for Feral File smart contracts on Ethereum mainnet (chain ID 1):

  • Exhibitions: V2, V3, V3.2, V3.3, V4, V4.1, V4.2, V4.3, V4.4, V4.5 (11 templates covering 52 deployment addresses)
  • Infrastructure: FeralfileVault, FeralfileVaultV2, FeralfileEnglishAuction, FeralFileAirdropV1

User-facing flows include ERC-721/1155 transfers and approvals, artwork purchase (buyArtworks), authorized trustee transfers, burns, vault payments, auction bids, and airdrop operations. Admin/ops functions (sale lifecycle, minting, URI updates, etc.) are also described.

Testing

  • erc7730 lint registry/feral-file/calldata-*.json — 14/14 pass (warnings only, no errors)

Notes

  • All 56 descriptor contract addresses are verified on Sourcify (exact match).
  • Contracts are only on Ethereum mainnet; no proxy implementations are included.
  • Warnings from erc7730 lint are limited to omitted signature fields (r_, s_, v_), undocument admin ownership helpers, and optional revenue-share array paths — consistent with other registry entries.

@github-actions github-actions Bot added the descriptors Changes to clear signing descriptors label Jun 1, 2026
@github-actions

github-actions Bot commented Jun 1, 2026

Copy link
Copy Markdown

🧪 Clear Signing Tests

Waiting for maintainer approval to run tests.

This PR is from a fork. A maintainer needs to add the run-tests label to trigger the clear signing tests.

Once approved, the tests will run automatically and post screenshots here.

@manuelwedler

Copy link
Copy Markdown
Collaborator

Hey there :)
We've been recently adapting the testing CI to run tests against the TypeScript and Rust libraries at the same time. For this, we needed to change the test file format. Could you please do the following:

  • Rebase this PR on latest master
  • Have a look at the updated README for documentation on the new test format
  • Add test files in the v2 format
  • Remove the test files in the old format

Thank you! We will have a look at the PR afterwards.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

Clear Signing Tests

Entity Descriptor Case @ethereum-sourcify/clear-signing@0.2.0 llbartekll/clear-signing@0.1.0
feral-file calldata-feralfile-airdrop-v1-0 Transfer airdrop token - ERC1155 safeTransferFrom
feral-file calldata-feralfile-airdrop-v1-0 Batch transfer airdrop tokens - safeBatchTransferFrom
feral-file calldata-feralfile-airdrop-v1-0 Set operator approval - grant all
feral-file calldata-feralfile-airdrop-v1-0 Set operator approval - revoke all
feral-file calldata-feralfile-airdrop-v1-0 Burn airdrop token
feral-file calldata-feralfile-airdrop-v1-0 Mint airdrop tokens to contract
feral-file calldata-feralfile-airdrop-v1-0 Airdrop tokens to recipients
feral-file calldata-feralfile-airdrop-v1-0 End airdrop
feral-file calldata-feralfile-airdrop-v1-0 Set token URI
feral-file calldata-feralfile-airdrop-v1-0 Set contract URI
feral-file calldata-feralfile-airdrop-v1-0 Burn remaining airdrop supply
feral-file calldata-feralfile-english-auction-0 Place bid on auction 42 - 0.1 ETH
feral-file calldata-feralfile-english-auction-0 Place signed bid on auction 42 for Receiver - 0.5 ETH
feral-file calldata-feralfile-english-auction-0 Register auctions
feral-file calldata-feralfile-english-auction-0 Settle auction funds
feral-file calldata-feralfile-english-auction-0 Settle auction and deliver artworks
feral-file calldata-feralfile-exhibition-v2-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v2-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v2-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v2-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v2-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v2-0 Create artwork
feral-file calldata-feralfile-exhibition-v2-0 Set royalty payout address
feral-file calldata-feralfile-exhibition-v2-0 Set token base URI
feral-file calldata-feralfile-exhibition-v2-0 Update edition IPFS CID
feral-file calldata-feralfile-exhibition-v3-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v3-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v3-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v3-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v3-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v3-0 Set royalty payout address
feral-file calldata-feralfile-exhibition-v3-0 Set token base URI
feral-file calldata-feralfile-exhibition-v3-0 Update edition IPFS CID
feral-file calldata-feralfile-exhibition-v3-0 Burn artwork editions
feral-file calldata-feralfile-exhibition-v3-0 Authorize artwork transfer
feral-file calldata-feralfile-exhibition-v3-0 Batch mint editions
feral-file calldata-feralfile-exhibition-v3_2-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v3_2-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v3_2-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v3_2-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v3_2-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v3_2-0 Set royalty payout address
feral-file calldata-feralfile-exhibition-v3_2-0 Set token base URI
feral-file calldata-feralfile-exhibition-v3_2-0 Update edition IPFS CID
feral-file calldata-feralfile-exhibition-v3_2-0 Burn artwork editions
feral-file calldata-feralfile-exhibition-v3_2-0 Authorize artwork transfer
feral-file calldata-feralfile-exhibition-v3_2-0 Batch mint editions
feral-file calldata-feralfile-exhibition-v3_3-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v3_3-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v3_3-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v3_3-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v3_3-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v3_3-0 Set royalty payout address
feral-file calldata-feralfile-exhibition-v3_3-0 Set token base URI
feral-file calldata-feralfile-exhibition-v3_3-0 Update edition IPFS CID
feral-file calldata-feralfile-exhibition-v3_3-0 Burn artwork editions
feral-file calldata-feralfile-exhibition-v3_3-0 Authorize artwork transfer
feral-file calldata-feralfile-exhibition-v3_3-0 Batch mint editions
feral-file calldata-feralfile-exhibition-v3_3-0 Mint artwork edition
feral-file calldata-feralfile-exhibition-v3_3-0 Update artwork CIDs
feral-file calldata-feralfile-exhibition-v4-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4-0 Purchase artworks - buyArtworks
feral-file calldata-feralfile-exhibition-v4-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_1-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4_1-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4_1-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4_1-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4_1-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4_1-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4_1-0 Purchase artworks - buyArtworks
feral-file calldata-feralfile-exhibition-v4_1-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4_1-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4_1-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4_1-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4_1-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4_1-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4_1-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4_1-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4_1-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_1-0 Set advance payment settings
feral-file calldata-feralfile-exhibition-v4_1-0 Replace advance payment addresses
feral-file calldata-feralfile-exhibition-v4_2-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4_2-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4_2-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4_2-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4_2-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4_2-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4_2-0 Purchase artworks in bulk - buyBulkArtworks
feral-file calldata-feralfile-exhibition-v4_2-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4_2-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4_2-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4_2-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4_2-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4_2-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4_2-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4_2-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4_2-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_2-0 Set advance payment settings
feral-file calldata-feralfile-exhibition-v4_2-0 Replace advance payment addresses
feral-file calldata-feralfile-exhibition-v4_2-0 Set vault V2 contract
feral-file calldata-feralfile-exhibition-v4_3-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4_3-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4_3-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4_3-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4_3-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4_3-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4_3-0 Purchase artworks - buyArtworks
feral-file calldata-feralfile-exhibition-v4_3-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4_3-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4_3-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4_3-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4_3-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4_3-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4_3-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4_3-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4_3-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_3-0 Set advance payment settings
feral-file calldata-feralfile-exhibition-v4_3-0 Replace advance payment addresses
feral-file calldata-feralfile-exhibition-v4_3-0 Merge artworks
feral-file calldata-feralfile-exhibition-v4_4-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4_4-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4_4-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4_4-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4_4-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4_4-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4_4-0 Purchase artworks - buyArtworks
feral-file calldata-feralfile-exhibition-v4_4-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4_4-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4_4-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4_4-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4_4-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4_4-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4_4-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4_4-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4_4-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_4-0 Set advance payment settings
feral-file calldata-feralfile-exhibition-v4_4-0 Replace advance payment addresses
feral-file calldata-feralfile-exhibition-v4_4-0 Set series names
feral-file calldata-feralfile-exhibition-v4_4-0 Set series renderer
feral-file calldata-feralfile-exhibition-v4_4-0 Set renderer token data
feral-file calldata-feralfile-exhibition-v4_5-0 Transfer artwork - transferFrom
feral-file calldata-feralfile-exhibition-v4_5-0 Transfer artwork - safeTransferFrom
feral-file calldata-feralfile-exhibition-v4_5-0 Transfer artwork - safeTransferFrom with data
feral-file calldata-feralfile-exhibition-v4_5-0 Approve artwork transfer
feral-file calldata-feralfile-exhibition-v4_5-0 Set operator approval - grant all
feral-file calldata-feralfile-exhibition-v4_5-0 Burn artworks
feral-file calldata-feralfile-exhibition-v4_5-0 Purchase artworks - buyArtworks
feral-file calldata-feralfile-exhibition-v4_5-0 Start artwork sale
feral-file calldata-feralfile-exhibition-v4_5-0 Pause artwork sale
feral-file calldata-feralfile-exhibition-v4_5-0 Resume artwork sale
feral-file calldata-feralfile-exhibition-v4_5-0 Stop sale and burn unsold artworks
feral-file calldata-feralfile-exhibition-v4_5-0 Stop sale and return unsold artworks
feral-file calldata-feralfile-exhibition-v4_5-0 Mint artworks
feral-file calldata-feralfile-exhibition-v4_5-0 Set vault contract
feral-file calldata-feralfile-exhibition-v4_5-0 Set cost receiver
feral-file calldata-feralfile-exhibition-v4_5-0 Set token base URI
feral-file calldata-feralfile-exhibition-v4_5-0 Set advance payment settings
feral-file calldata-feralfile-exhibition-v4_5-0 Replace advance payment addresses
feral-file calldata-feralfile-vault-0 Pay for artwork sale - payForSale
feral-file calldata-feralfile-vault-0 Withdraw vault funds - 0.5 ETH
feral-file calldata-feralfile-vault-v2-0 Pay for bulk artwork sale - payForSaleV2
feral-file calldata-feralfile-vault-v2-0 Withdraw vault funds - 0.5 ETH

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

📋 View test details

Covers exhibition versions V2 through V4.5 plus vault, auction, and airdrop infrastructure on Ethereum mainnet.
Refresh exhibition address lists after removing stale entries and adding V4.2–V4.5 deployments.
Sync descriptors from ff-evm-contracts so wallets resolve artwork metadata names for transfers, purchases, burns, and batch operations.
One test case per descriptor covering the primary user-facing function:
- Vaults (x2): withdrawFund — 0.5 ETH withdrawal
- English Auction: placeBid — 0.1 ETH bid on auction 42
- Airdrop V1: setApprovalForAll — grant operator approval
- Exhibition V2–V4.5 (10 files): setApprovalForAll — grant operator approval

All tests use synthetic unsigned EIP-1559 transactions with controlled
addresses in dataProvider.addressNames for deterministic expected output.
@jollyjoker992 jollyjoker992 force-pushed the feat/feral-file-descriptors branch from c2cd607 to d49fc23 Compare July 7, 2026 09:41
175 test cases across 14 descriptors covering every function defined in
the display.formats section of each descriptor file:

- Airdrop V1: 11 tests (ERC-1155 transfers, approvals, burn, mint, airdrop,
  end, setURI, setContractURI, burnRemaining)
- Vault / Vault V2: 2 tests each (payForSale / payForSaleV2, withdrawFund)
- English Auction: 5 tests (placeBid, placeSignedBid, registerAuctions,
  settleAuction, settleAuctionFund)
- Exhibition V2: 9 tests (transfers, approve, setApprovalForAll, createArtworks,
  setRoyaltyPayoutAddress, setTokenBaseURI, updateArtworkEditionIPFSCid)
- Exhibition V3 / V3.2: 11 tests each (adds burnEditions, authorizedTransfer,
  batchMint over V2 base)
- Exhibition V3.3: 13 tests (adds mintArtworkEdition, updateArtworkCIDs)
- Exhibition V4: 16 tests (V4 lifecycle + buyArtworks, mintArtworks, admin)
- Exhibition V4.1: 18 tests (adds setAdvanceSetting, replaceAdvanceAddresses)
- Exhibition V4.2: 19 tests (buyBulkArtworks instead of buyArtworks, setVaultV2)
- Exhibition V4.3: 19 tests (adds mergeArtworks)
- Exhibition V4.4: 21 tests (adds setSeriesRenderer, setSeriesNames,
  setRendererTokenData)
- Exhibition V4.5: 18 tests (same as V4.1 shape)

All tests use synthetic unsigned EIP-1559 transactions with controlled
addresses in dataProvider for deterministic expected output. Generation
script saved at tools/scripts/gen-feralfile-tests.js.
@github-actions github-actions Bot added the tools label Jul 7, 2026
Keep only the generated testsv2 fixtures; test generation should use
the repo's standard generate-tests.js workflow.
Validated all 175 cases with cs-test (llbartekll/clear-signing). Updates
include array bracket formatting, ISO date timestamps, correct field labels
from descriptors, and proper struct field counts. Also fixes exhibition v2
createArtwork rawTx to use selector 0x3afb021a instead of createArtworks.
Use .[] array paths and remove NFT separators so Rust and Sourcify renderers decode calldata consistently, then sync testsv2 expected values from the official runners.
@jollyjoker992

Copy link
Copy Markdown
Author

Hi @manuelwedler — thanks for the guidance on the v2 test format.

We've addressed your feedback:

  • Rebased on latest master
  • Added testsv2/ fixtures — 14 files covering all 14 descriptors, with 175 test cases (one per function in each descriptor's display.formats)
  • Removed the old tests/ format (no legacy fixtures remain)
  • CI — all 175/175 cases pass on both @ethereum-sourcify/clear-signing@0.2.0 and llbartekll/clear-signing@0.1.0 (see the latest test run)

A few small descriptor tweaks were needed for dual-runner compatibility (.[] array paths for Sourcify calldata decoding, and removing NFT separator fields that caused formatting mismatches). Expected values were synced from the official runners.

Happy to adjust anything — otherwise this should be ready for your review.

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 run-tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants