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

const { 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

const { 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!

const { to, data } = await peanut.prepareGaslessDepositTx({
    payload, // paylaod obtained in step 1
    signature, // signature obtained in step 2
})