"scheme": "evm_7702". The sender signs twice with the same key:
- An EIP-7702 authorization, which lets their address run Bitnob’s paymaster router code for the transfer.
- An EIP-712 witness, which binds the router to exactly the transfer that was quoted.
Request the quote
The request is the same as on every chain. Onlychain, asset, and the address format change.
sign block contains:
The response also includes
router_version, the router contract version this quote targets. Leave router_version out of the request unless Bitnob support has asked you to pin one.
Sign with a local key
This example uses ethers v6.14 or later, which can sign EIP-7702 authorizations. It’s suited to sandbox tests and to self-custody apps where your client code holds the user’s key.sign-evm.mjs
r, s, v), which is the format Submit expects.
witness is standard EIP-712 typed data. On Base it looks like this:
verifyingContract is the sender’s own address, because EIP-7702 delegates it to the router. Amounts in message are in base units, such as 1000000 for 1 USDC. Show the user the decimal amounts from the quote, not these.
Sign with a hardware or custom signer
If your signer can’t take structured EIP-7702 or EIP-712 input, sign the two hashes insign.digests directly. The result is the same pair of signatures.
signMessage and personal_sign add the EIP-191 prefix and produce a different signature, which Submit rejects with 422.
Signing in the user’s browser wallet
Your user’s wallet has to support signing EIP-7702 authorizations for an arbitrary contract, and many browser extension wallets don’t yet allow it. Before you build on a wallet, test it in sandbox with a real quote. Embedded wallets and self-custody apps that hold the key in your own client code can use the local-key example above.Submit and track
Send both signatures in one call to Submit signatures:assembled, when Bitnob has built the fully signed transaction, before pending and completed.