Summary
bankr sign --type eth_signTypedData_v4 produces signatures that recover to the expected address locally, but fail on-chain validation for fxUSD EIP-3009 transferWithAuthorization on Base (FiatTokenV2: invalid signature).
This blocks x402 premium payments at $0.01 fxUSD when Bankr is used as the EIP-712 signer.
Impact
- x402 flow cannot settle payments when signature is produced via Bankr signer.
- Integrations that rely on Bankr signing for EIP-3009 fail with
simulation_failed / invalid signature.
Environment
- Bankr CLI: latest from
npm i -g @bankr/cli (as of 2026-02-26)
- Network: Base (
chainId=8453)
- Token: fxUSD
0x55380fe7A1910dFf29A47B622057ab4139DA42C5
- Flow: x402 premium payment to
https://smartclaw.xyz/api/premium
Reproduction
- Get x402 402 payload from
GET https://smartclaw.xyz/api/premium.
- Build EIP-3009 typed data from payment requirements:
- domain:
name=FxUSD, version=2, chainId=8453, verifyingContract=0x55380fe7A1910dFf29A47B622057ab4139DA42C5
- primaryType:
TransferWithAuthorization
- message:
from,to,value,validAfter,validBefore,nonce
- Sign with:
bankr sign --type eth_signTypedData_v4 --typed-data '<json>'
- Submit via x402 payment header (
PAYMENT-SIGNATURE) and retry premium endpoint.
Actual Result
- Server returns
402 with settlement error:
{"error":"Settlement failed","details":"simulation_failed"...}
- Local simulation against token contract reverts with:
FiatTokenV2: invalid signature
Expected Result
- Signature should be accepted by fxUSD
transferWithAuthorization.
- x402 settlement should complete and premium API should return business data.
Diagnostics Performed
- Signature is parsed correctly from Bankr CLI output.
recoverTypedDataAddress matches signer address (local cryptographic recovery succeeds).
- Signature is low-s canonical (not a high-s rejection case).
- Domain parameters are confirmed correct against on-chain
DOMAIN_SEPARATOR:
- Match found for
name=FxUSD, version=2, chainId=8453.
- Despite above, contract verification fails (
invalid signature).
Likely Area to Check
Potential mismatch in how Bankr constructs/serializes EIP-712 typed data for eth_signTypedData_v4 (field encoding/order/type normalization) versus what FiatTokenV2 expects for EIP-3009.
Request
Please prioritize a fix or provide a compatibility guideline/workaround for EIP-3009 on Base fxUSD.
If this is the wrong repository, please transfer this issue to the correct Bankr CLI/signing backend repo.
Summary
bankr sign --type eth_signTypedData_v4produces signatures that recover to the expected address locally, but fail on-chain validation for fxUSD EIP-3009transferWithAuthorizationon Base (FiatTokenV2: invalid signature).This blocks x402 premium payments at $0.01 fxUSD when Bankr is used as the EIP-712 signer.
Impact
simulation_failed/invalid signature.Environment
npm i -g @bankr/cli(as of 2026-02-26)chainId=8453)0x55380fe7A1910dFf29A47B622057ab4139DA42C5https://smartclaw.xyz/api/premiumReproduction
GET https://smartclaw.xyz/api/premium.name=FxUSD,version=2,chainId=8453,verifyingContract=0x55380fe7A1910dFf29A47B622057ab4139DA42C5TransferWithAuthorizationfrom,to,value,validAfter,validBefore,noncebankr sign --type eth_signTypedData_v4 --typed-data '<json>'PAYMENT-SIGNATURE) and retry premium endpoint.Actual Result
402with settlement error:{"error":"Settlement failed","details":"simulation_failed"...}FiatTokenV2: invalid signatureExpected Result
transferWithAuthorization.Diagnostics Performed
recoverTypedDataAddressmatches signer address (local cryptographic recovery succeeds).DOMAIN_SEPARATOR:name=FxUSD,version=2,chainId=8453.invalid signature).Likely Area to Check
Potential mismatch in how Bankr constructs/serializes EIP-712 typed data for
eth_signTypedData_v4(field encoding/order/type normalization) versus whatFiatTokenV2expects for EIP-3009.Request
Please prioritize a fix or provide a compatibility guideline/workaround for EIP-3009 on Base fxUSD.
If this is the wrong repository, please transfer this issue to the correct Bankr CLI/signing backend repo.