We even support creating links where we sponsor the gas!
Gasless Depositing
Gasless depositing works via EIP-3009. USDC supports EIP-3009.
Gasless Depositing Happens in 3 steps
1. Create Payload & Message
Create a payload to submit to the Peanut Smart Contract. This involves an EIP-712 message to be signed in the user's wallet (this is not a transaction, just a signature).
The EIP-712 message will approve the token via EIP-3009 to be pulled from the user by Peanut Protocol
plain textconst { payload, message } = await peanut.makeGaslessDepositPayload({ address, // address of the user's wallet contractVersion, // peanut version. At least 'v4.2'. password, // unique password for the link, can be generated via 'getRandomString' function linkDetails: { chainId, tokenAmount, tokenType, // must be 1 for ERC-20 tokenAddress, tokenDecimals, }, })
2. Sign the Message
There should be a method in your wallet API called
signTypedData
. Use it to sign the message
obtained in the previous step.3. Execute the Deposit
Execute the gasless deposit via Peanut's API
plain textconst { txHash } = await peanut.makeDepositGasless({ APIKey, // peanut api key payload, // payload obtained in step 1 signature, // signature obtained in step 2 })
And that's it! Congrats! Your user just sent some tokens without paying for gas!
3.2 Advanced. Execute the Tx by Yourself
If you want to execute the gasless deposit via your own relayer instead of using Peanut's. There is a helpful function for you! It computes the
to
address and calldata (called data
).Simply sign it with your relaying wallet and execute!
plain textconst { to, data } = await peanut.prepareGaslessDepositTx({ payload, // paylaod obtained in step 1 signature, // signature obtained in step 2 })