Skip to main content

pimlico

ERC规范

https://github.com/ethereum/ERCs/blob/master/ERCS/erc-7677.md#pm_getpaymasterdata

facut

USTD

https://www.okx.com/zh-hans/xlayer/faucet/sepoliafaucet

Base Sepolia Base https://faucet.circle.com/

paymaster

  1. 用户请求: 用户通过智能账户发起交易请求。
  2. EntryPoint 处理: EntryPoint 接收请求,并检查是否有注册的 Paymaster。
  3. 调用 Paymaster: EntryPoint 调用 Paymaster 的验证函数,询问是否支付交易费用。
  4. 费用支付决策: Paymaster 根据其逻辑决定是否支付费用,并返回结果。
  5. 执行交易: 如果 Paymaster 同意支付费用,EntryPoint 完成交易。

https://eips.ethereum.org/EIPS/eip-7677

https://github.com/pimlicolabs/tutorials/blob/main/tutorial-3.ts

https://github.com/pimlicolabs/erc20-paymaster/blob/main/src/base/BaseERC20Paymaster.sol

https://docs.pimlico.io/infra/paymaster/erc20-paymaster/contract-addresses

https://docs.pimlico.io/infra/platform/pricing

操作流程

alt text

以下是使用 ERC-20 Paymaster 进行交易的简化步骤:

第一步:找到 ERC-20 Paymaster 地址

  1. 参考页面:访问 ERC-20 Paymaster 合约参考页面,选择适合你所用代币和链的地址。
  2. 复制地址:确保复制正确的 Paymaster 地址。

第二步:批准 ERC-20 代币

你需要允许 ERC-20 Paymaster 代表你支出代币。

  1. 调用 approve 函数

    • 使用 ERC-20 代币合约调用 approve 函数。
    • 指定 ERC-20 Paymaster 地址作为支出方,以及批准的代币数量。

    示例(使用 Web3.js):

    const tokenContract = new web3.eth.Contract(tokenABI, tokenAddress);
    const paymasterAddress = "YOUR_PAYMASTER_ADDRESS";
    const amount = web3.utils.toWei("100", "ether"); // 批准的数量

    await tokenContract.methods.approve(paymasterAddress, amount).send({ from: userAddress });

第三步:生成 paymasterData

paymasterData 字段根据你选择的模式不同而有所不同:

  1. 单一模式

    • 如果使用单一 Paymaster,paymasterData 可以为空或包含特定参数。
    • 示例:paymasterData = "0x"
  2. 多重模式

    • 如果使用多重模式 Paymaster,可能需要包含额外参数。
    • 示例:paymasterData = web3.utils.encodeParameters(['uint256'], [amount])
  3. 自定义数据

    • 如果 Paymaster 需要特定数据,请相应地编码。

第四步:提交用户操作

  1. 准备用户操作

    • 确保在用户操作中包含 Paymaster 地址和生成的 paymasterData

    示例:

    const userOperation = {
    sender: userAddress,
    nonce: userNonce,
    initCode: "0x",
    callData: "YOUR_CALL_DATA",
    callGasLimit: 100000,
    verificationGasLimit: 100000,
    preVerificationGas: 21000,
    maxFeePerGas: web3.utils.toWei("10", "gwei"),
    maxPriorityFeePerGas: web3.utils.toWei("2", "gwei"),
    paymasterAndData: `${paymasterAddress}${paymasterData}`,
    signature: "YOUR_SIGNATURE",
    };
  2. 签名用户操作

    • 使用你的钱包私钥签名用户操作。
  3. 提交给打包服务

    • 将用户操作发送到打包服务,以便将其包含在链上的交易中。

    示例(使用打包服务 API):

    await axios.post("BUNDLER_API_URL", userOperation);

第五步:监控交易

  • 提交用户操作后,可以通过区块浏览器或打包服务的 API 监控交易状态。

总结

按照这些步骤,你可以有效地使用 ERC-20 Paymaster 处理 ERC-20 代币的燃气费用。根据 Paymaster 的具体要求和你执行的交易调整参数。

alt text

第一次交易

alt text

alt text

第二次交易

alt text

alt text

alt text

alt text

https://docs.pimlico.io/infra/paymaster/erc20-paymaster/contract-addresses

viem 在 prepareUserOperation.ts 装配paymaster数据

https://github.com/wevm/viem/blob/0463e1d4de7cd35e2e9604890ee32b37a2775864/src/account-abstraction/actions/bundler/prepareUserOperation.ts#L302

执行过程

viem 中 pm_getPaymasterStubData pm_getPaymasterData

alt text