Describe the bug
I register a Builder Code on dashboard.base.org and pass the dataSuffix into pay() the way the SDK supports. The payment goes through fine and the USDC transfer is correct, but the suffix is never on-chain. builder-code-checker.vercel.app returns red (not attributed). Looking at the resulting tx on basescan, the inner USDC transfer call inside handleOps has length 0x44 (68 bytes), just selector + recipient + amount. If the 30 byte dataSuffix had been appended it would be 0x62 (98 bytes). Grepping the full input data for the start of my suffix hex returns nothing. The SDK code in dist/interface/payment/utils/translatePayment.js does forward the suffix correctly to capabilities.attribution.suffix, so it looks like the Base Account smart wallet is not honoring it when building the user op. Likely the same root cause as coinbase/smart-wallet#101 (Appended calldata gets lost), open since Dec 2024. My live tx for reference: https://basescan.org/tx/0x990fbfa4f31910d58383f4cc526d3c001b9e5c68bda20d33fd97639b604cb9a6
Steps
- Use @base-org/account 2.5.6 (also tested 2.5.5)
-
- Register a Builder Code on dashboard.base.org and copy the dataSuffix hex (mine: 0x62635f663067686135796c0b0080218021802180218021802180218021)
-
- Call pay({ amount, to, dataSuffix, testnet: false })
-
- Sign in the popup using a Base Account (no special config)
-
- Look at the resulting tx on basescan, search the input data for the start of your suffix hex, you will not find it. Also paste the tx hash into builder-code-checker.vercel.app, returns red.
Live app where this is happening if useful: https://execute.ceoism.com (credit top up flow on the Profile page).
Expected behavior
The dataSuffix I pass into pay() should end up appended to the inner USDC transfer call data so that ERC-8021 indexers and builder-code-checker.vercel.app can read it and attribute the tx back to my Builder Code. Right now the SDK forwards the suffix correctly via capabilities.attribution.suffix, but the Base Account smart wallet does not apply it when building the user op, so on-chain there is nothing to attribute.
Version
2.5.6 (also tested 2.5.5, same behavior)
Additional info
Likely the same root cause as coinbase/smart-wallet#101 (Appended calldata gets lost), open since Dec 2024. That issue is from before ERC-8021 existed but describes the exact same drop happening in the smart wallet flow. So this might really be a Coinbase smart wallet fix more than an SDK fix, but raising it here too since pay() is the entry point devs hit. Happy to test a fix or contribute a PR if there is one waiting on review.
Desktop
- OS: macOS
-
-
-
- Wallet popup: keys.coinbase.com (Base Account)
Smartphone
No response
Describe the bug
I register a Builder Code on dashboard.base.org and pass the dataSuffix into pay() the way the SDK supports. The payment goes through fine and the USDC transfer is correct, but the suffix is never on-chain. builder-code-checker.vercel.app returns red (not attributed). Looking at the resulting tx on basescan, the inner USDC transfer call inside handleOps has length 0x44 (68 bytes), just selector + recipient + amount. If the 30 byte dataSuffix had been appended it would be 0x62 (98 bytes). Grepping the full input data for the start of my suffix hex returns nothing. The SDK code in dist/interface/payment/utils/translatePayment.js does forward the suffix correctly to capabilities.attribution.suffix, so it looks like the Base Account smart wallet is not honoring it when building the user op. Likely the same root cause as coinbase/smart-wallet#101 (Appended calldata gets lost), open since Dec 2024. My live tx for reference: https://basescan.org/tx/0x990fbfa4f31910d58383f4cc526d3c001b9e5c68bda20d33fd97639b604cb9a6
Steps
Live app where this is happening if useful: https://execute.ceoism.com (credit top up flow on the Profile page).
Expected behavior
The dataSuffix I pass into pay() should end up appended to the inner USDC transfer call data so that ERC-8021 indexers and builder-code-checker.vercel.app can read it and attribute the tx back to my Builder Code. Right now the SDK forwards the suffix correctly via capabilities.attribution.suffix, but the Base Account smart wallet does not apply it when building the user op, so on-chain there is nothing to attribute.
Version
2.5.6 (also tested 2.5.5, same behavior)
Additional info
Likely the same root cause as coinbase/smart-wallet#101 (Appended calldata gets lost), open since Dec 2024. That issue is from before ERC-8021 existed but describes the exact same drop happening in the smart wallet flow. So this might really be a Coinbase smart wallet fix more than an SDK fix, but raising it here too since pay() is the entry point devs hit. Happy to test a fix or contribute a PR if there is one waiting on review.
Desktop
Smartphone
No response