1. 1
概览

GSN(EIP-1613) 提出 Meta-tx 解决方案,试图通过减少 onboarding 摩擦来帮助 DApp 获得新用户,解决目前阻碍 DApp 普及最大问题。

DApp 面临的问题

用户使用 DApp 需要经过复杂的流程

  • OTC:使用法币购买ETH
  • 钱包 :提币到钱包
  • DApp 浏览器:使用和注册 DApp

大家可能觉得只需要三步,注册一个微信可能也就需要三步,但我们展开来看,但以下是新用户使用一个 DApp 的步骤:

  • 选择一个钱包
  • 安全保存助记词
  • 打开钱包,复制你的钱包地址
  • 选择一个中心化交易所
  • 注册
  • 邮箱验证帐户
  • 设置二步认证
  • 上传你的身份证,KYC
  • 绑定银行卡购买 ETH
  • 将 ETH 提币到钱包
  • 打开 DApp
  • 输入密码确认操作
  • 在 Etherscan 上点击刷新,直到确认交易

对于一个新的 DApp 来说,更多的用户使用才能造成网络效应,但复杂的用户 onboarding 流程,如何购买 ETH 和学习去中心化钱包阻碍了让更多人使用 DApp。

如何破局?

最直接的想法能否让用户没有 ETH 也可以使用 DApp,Meta-tx 的想法孕育而生。 早在 2016 Uport 创始人的 Christian Lundkvist 博士 构思了 Meta-tx 想法。Meta-tx 允许用户通过第三方 Relay 发送交易、调用合约,Relay 可以允许使用其他代币支付矿工费,简单的说,用户无需持有 ETH 就可以与以太坊进行交互。

目前有两种类型的 Meta-tx 解决方案:

  1. 中心化 Relay DApp 开发者部署单个 Relay 用于调用合约, 帮助用户支付矿工费,单个 Relay 存在单点故障的问题。
  2. 去中心化 Relay 社区不断涌现的想法是建立一个去中心化 Relay 网络,但会遇到同步的问题,一个 Relay 每次只能转发一个交易,因此每个 Relay 选择最有利可图的交易并进行中继。存在惊群问题。简单来说就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理,其他进程发现获取事件失败后又继续进入了等待状态,在一定程度上降低了系统性能。尝试解决惊群问题需要引入共识协议,如 PoW,但运行每个 Relay 的成本增加,这反过来增加了交易费用。
Meta-tx 解决问题的关键
  • 如果补贴用户发送交易的矿工费,那么引导更多人使用 DApp 会更容易
  • 签名交易和支付矿工费可以不是同一个人,DApp 只需要知道真正的发送方是谁
  • 为了保持去中心化,所有组件都必须有经济激励
  • 发送方已经被免费激励将交易交给 DApp,需要解决我们如何赋予发送方控制流程的权力?
  • 需要提供一个工具寻找合适的发送交易的 Relay ,协商矿工费,验证其可靠性
技术方向
  1. Raylay 代付:
  • ERC-1776 , Native Mata Transactions
  • EIP 1613 ,本文提到的 GSN ( Gas stations network)
  1. 改造 Token 标准:
  • ERC-865 支付方式不局限于 Gas,可以是其它 Token
  • ERC-1228 委托执行
GSN 提出的解决方案

GSN 最初由 Tabookey 设计,然后由 OpenZeppelin 进一步开发。在 MetaCartel 社区 DAO 力量的推送下,最终 GSN 作为一个联盟致力于将其推行为统一标准,也得到了以太坊基金会的支持,来解决 Meta-tx 去中心化的问题,GSN 允许 DApp 开发者以安全的方式帮助用户支付矿工费,用户无需使用 ETH 来支付矿工费,用户甚至不需要一个以太坊账户。

GSN 原理

GSN 主要有四个部分组成:

  • RelayHub:是一个智能合约,用于协调整个 Relay 网络。 协调 Relay和 DApp 合约之间的交易,所有 Relay 押金和发送方矿工费都由它保管。
  • Relay: 所有 Relay 必须通过注册资金在RelayHub上注册,因为如果行为不端,中心会对其进行处罚。Relay 不是慈善机构,他们通过帮助用户支付矿工费,来赚取额外的服务费。
  • Sender:是帮用户付矿工费的智能合约。Sender 需要在 RelayHub 上存入资金以支付 Relay 调用,并且需要遵守特定接口来接受 Meta-tx。
  • User: 这些用户可以只使用私钥对交易进行签名,而不是发送常规的以太坊交易,而是将交易委托给 Sender 来发送到以太坊网络。

更多技术细节:https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1613.md

演示

测试 DApp : https://cryptopuppers.portis.io

如何应用 GSN

配合 CREATE2 + GSN 解决以太坊新用户 Onboarding 的问题,以太坊新用户流程步骤:

  • 钱包本地生成密钥对(CREATE2 盐)
  • 密钥对用于生成确定的钱包合约地址
  • 在钱包合约部署之前就可以接收转账
  • 用户资产足够支持矿工费时,使用 GSN 部署钱包合约

新用户可以立即开始接收代币,当用户有足够代币支付矿工费时,可以提示用户部署的钱包合约,借助 GSN 可以允许用户使用任何代币支付矿工费。这不仅消除了尴尬的私钥管理摩擦,还解决了将新用户转账没有 ETH 的困境。

参考
  1.