Working PoC for HackerOne report. Demonstrates the wallet UI rendering only startAmount while users actually approve up to endAmount.
Seaport bid on BAYC #1234. Offer is WETH with startAmount = 0.001 and endAmount = 100. Attacker fills near endTime.
signature-insights response — amount = 1e15 wei.endAmount = 100e18 wei never reaches the popup.
Seaport listing of BAYC #5678. Consideration WETH with startAmount = 50 and endAmount = 1 wei. Attacker fills near endTime.
amount = 50e18 in the RECEIVE state change.endAmount = 1.
Seaport bid on BAYC #9999. Offer is USDC with startAmount = 1 USDC and endAmount = 1,000,000,000 USDC.
amount = 1_000_000 (6-decimal USDC).endAmount = 1e15.Baseline. The API renders this correctly because there is no Dutch curve to ignore.
Reproduction notes for triage:
chainId from the wallet).Trigger eth_signTypedData_v4. MetaMask will pop up its decoded balance-change UI for Seaport OrderComponents.endAmount is present in the raw typed data but not surfaced in the simulation.Show API response button bypasses MetaMask and POSTs directly to signature-insights.api.cx.metamask.io/v1/signature?chainId=1 so you can confirm endAmount is silently dropped server-side.