业务场景

目前paymaster 主要有两种代付方式,一种是 代付后扣款用户对应的ERC20 Token ,一种是 paymaster 直接代付,当然paymaster 是需要在其他地方进行扣减,扣减的可以是用户或者项目方在我们这买的额度,可以是质押在我们这的合约余额等等,总之是在其他地方半异步扣减,不发生在一次Userop 合约交互中

扣减:

通过法币等支付方式购买额度,来实现当下无gas感知

  1. Project Sponsor

业务方通过我们的dashboard 为 apikey购买额度,业务方的用户 使用的gas由我们paymaster 合约支付,relay 会对其 购买的额度进行相关扣减

  1. User Sponsor

用户 的地址或者NFT 在我们这有对应的额度(这额度可能是用户购买的,也可能是通过些活动送的)

实现方式简述

Untitled

  1. 当 pm_sponsort 请求进来时候, relay 会进行Gas计算, 预估这一次交易需要消耗的总额
  2. relay 如果是Sponaor 类型,relay会判断 用户或者 api-key 在我们relay的额度(当然也可能 项目方规定了每个用户的额度,这些都可以逻辑兼容)
  3. 判断额度符合后,内存里先进行扣减我们预估的gas 额度,并维护一个Map userop hash 及其对应预扣的额度
  4. 返回签名,执行交易, realy会监听 Entrypoint 的UserOpEvent (event 里有 userophash,paymaster 地址,实际消耗gas 等信息),有这个Map对应的UseropHash 进行处理,知道了实际发生的额度后,多余的部分补回到用户的余额
  5. 实际的用户额度持久化在dashboard 上,再监听消息发生实际扣减后,将扣减信息(Usrop所有信息) 交给dashboard , 进行持久化状态update

10$(relay) estimate:1$

签名后: userHash : 1$ (dur) 9$