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
- 用户请求: 用户通过智能账户发起交易请求。
- EntryPoint 处理: EntryPoint 接收请求,并检查是否有注册的 Paymaster。
- 调用 Paymaster: EntryPoint 调用 Paymaster 的验证函数,询问是否支付交易费用。
- 费用支付决策: Paymaster 根据其逻辑决定是否支付费用,并返回结果。
- 执行交易: 如果 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
操作流程

以下是使用 ERC-20 Paymaster 进行交易的简化步骤:
第一步:找到 ERC-20 Paymaster 地址
- 参考页面:访问 ERC-20 Paymaster 合约参考页面,选择适合你所用代币和链的地址。
- 复制地址:确保复制正确的 Paymaster 地址。
第二步:批准 ERC-20 代币
你需要允许 ERC-20 Paymaster 代表你支出代币。
-
调用
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 }); - 使用 ERC-20 代币合约调用
第三步:生成 paymasterData
paymasterData 字段根据你选择的模式不同而有所不同:
-
单一模式:
- 如果使用单一 Paymaster,
paymasterData可以为空或包含特定参数。 - 示例:
paymasterData = "0x"
- 如果使用单一 Paymaster,
-
多重模式:
- 如果使用多重模式 Paymaster,可能需要包含额外参数。
- 示例:
paymasterData = web3.utils.encodeParameters(['uint256'], [amount])
-
自定义数据:
- 如果 Paymaster 需要特定数据,请相应地编码。
第四步:提交用户操作
-
准备用户操作:
- 确保在用户操作中包含 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",
}; - 确保在用户操作中包含 Paymaster 地址和生成的
-
签名用户操作:
- 使用你的钱包私钥签名用户操作。
-
提交给打包服务:
- 将用户操作发送到打包服务,以便将其包含在链上的交易中。
示例(使用打包服务 API):
await axios.post("BUNDLER_API_URL", userOperation);
第五步:监控交易
- 提交用户操作后,可以通过区块浏览器或打包服务的 API 监控交易状态。
总结
按照这些步骤,你可以有效地使用 ERC-20 Paymaster 处理 ERC-20 代币的燃气费用。根据 Paymaster 的具体要求和你执行的交易调整参数。

第一次交易


第二次交易




https://docs.pimlico.io/infra/paymaster/erc20-paymaster/contract-addresses
viem 在 prepareUserOperation.ts 装配paymaster数据
执行过程
viem 中 pm_getPaymasterStubData pm_getPaymasterData
