以太坊“免”Gas发交易GSN简介

GSN通过将Gas转嫁到第三方,从而实现Dapp的使用者不需要支付Gas也能使用服务

# 一、什么是GSN 对以太坊来说,转账、发Token、调用合约等交易都是需要支付手续费Gas,不能白piao,Gas是保障以太坊网络稳定运行的重要手段。 然而在现实生活中,为了推广产品,免费甚至补贴用户是互联网企业惯用的获客手段,普罗大众早已被这些企业教育的习惯了白P。 如果企业开发了一款Dapp,想要推广到市场,告诉用户“我们这是基于区块链的,你要想使用得先去买得以太币,哦,现在一个以太币要3000多人民币!”,估计大多数人直接转身离开,剩下得大多数直接跳脚骂娘了,只有很少数极客可能会去体验下。这也是Dapp很难被大众接受的一个重要原因。 为了解决这个问题,GSN应运而出! GSN的全称是Gas Station Network,翻译过来就是加油站网络。GSN将本该由用户支付的Gas转嫁到了其它愿意为用户买单的人身上(一般为Dapp开发者),并且能够保证交易的真实性。 ![image.png](https://img.learnblockchain.cn/attachments/2020/09/Tu20rsAL5f55aa2414610.png) > GSN目前有两个版本,v1和v2,在实现和流程上有所不同。本篇内容是基于v2版本整理。 # 二、相关角色 ## 2.1 客户端-Client 客户端也就是各种Dapp,是GSN架构的最上层。客户端负责发起对原交易进行签名,并将签名后的原交易发送到中继服务器中。 ## 2.2 中继服务器-RealServer 中继服务器主要用来处理用户的元交易请求,主要的功能包括: - 通过调用中继路由(RelayHub)合约,判断付款人(Paymaster)是否允许为该笔交易支付手续费,并且有足够的以太币 - 中继服务器将交易发送到链上 对于中继服务器,多个客户端可以使用一个,也可以一个客户端对应一个。 ## 2.3 付款人-Paymaster 付款人交易Gas的实际支付者。付款人是一个智能合约,该合约最重要的是交易过滤器” acceptRelayedCall“,决定了可以为哪些交易支付费用。 常用的过滤器包括: - 白名单 - 令牌认证 - 对特定方法放行 - 链下委托授权 ## 2.4 中继路由-RelayHub 中继路由本身是一份智能合约,提供的功能包括: - 维护一份中继器列表,供客户端查询 - 提供`RelayHub.balances[recipient]`方法,供中继服务器在支付Gas前检查Dapp开发者已存入足够的ETH 中继路由合约可以自行部署,也可以直接使用GSN提供的。自行部署的RelayHub无法共享已存在的中继器。 以太坊主网上的RelayHub合约地址:[0xD216153c06E857cD7f72665E0aF1d7D82172F494](https://cn.etherscan.com/address/0xD216153c06E857cD7f72665E0aF1d7D82172F494) ## 2.5 中继接收合约-RelayRecipient 每个支持GSN的DApp都需要继承RelayRecipient,并提供与RelayHub通信的接口。在部署Dapp合约时,需要初始化RelayHub的地址。 需要注意的是,在继承RelayRecipient合约后,使用`_msgSender()`替代`msg.sender`获取元交易的用户信息。 ## 2.6 Trusted Forwarder-可信转发器 可信转发器用来验证发送者签名和Nonce值,RelayHub通过可信转发器将元交易转发到Dapp合约中。 # 三、架构 GSN的整体架构如下图所示。 ![image.png](https://img.learnblockchain.cn/attachments/2020/09/WJVOgL3K5f55aa3c6fbc3.png) 一个完整的流程为: 1、Client 到 RelayHub 查詢可用的 Relays 列表 2、Client发送原交易到RelayServer 3、RelayServer到RelayHub中验证Dapp开发者有足够的ETH用于支付Gas,并且付款人允许该交易 4、RelayServer返回给Client签名后的交易,此时交易已经被RelayServer中的Relay支付 5、RelayServer将交易发送给RelayHub合约 6、RelayHub合约调用内部的可信转发器,对交易的签名和nonce进行校验 7、可信转发器校验通过后调用接收者合约 # 四、案例 GSN官方提供的MetaCoin案例: [https://metacoin.opengsn.org/](https://metacoin.opengsn.org/) # 五、参考 - GSNv2官网文档:[https://docs.opengsn.org/learn/index.html](https://docs.opengsn.org/learn/index.html) - GSNv2 GitHub [https://github.com/opengsn/gsn](https://github.com/opengsn/gsn)

一、什么是GSN

对以太坊来说,转账、发Token、调用合约等交易都是需要支付手续费Gas,不能白piao,Gas是保障以太坊网络稳定运行的重要手段。 然而在现实生活中,为了推广产品,免费甚至补贴用户是互联网企业惯用的获客手段,普罗大众早已被这些企业教育的习惯了白P。 如果企业开发了一款Dapp,想要推广到市场,告诉用户“我们这是基于区块链的,你要想使用得先去买得以太币,哦,现在一个以太币要3000多人民币!”,估计大多数人直接转身离开,剩下得大多数直接跳脚骂娘了,只有很少数极客可能会去体验下。这也是Dapp很难被大众接受的一个重要原因。

为了解决这个问题,GSN应运而出! GSN的全称是Gas Station Network,翻译过来就是加油站网络。GSN将本该由用户支付的Gas转嫁到了其它愿意为用户买单的人身上(一般为Dapp开发者),并且能够保证交易的真实性。

GSN目前有两个版本,v1和v2,在实现和流程上有所不同。本篇内容是基于v2版本整理。

二、相关角色

2.1 客户端-Client

客户端也就是各种Dapp,是GSN架构的最上层。客户端负责发起对原交易进行签名,并将签名后的原交易发送到中继服务器中。

2.2 中继服务器-RealServer

中继服务器主要用来处理用户的元交易请求,主要的功能包括:

  • 通过调用中继路由(RelayHub)合约,判断付款人(Paymaster)是否允许为该笔交易支付手续费,并且有足够的以太币
  • 中继服务器将交易发送到链上 对于中继服务器,多个客户端可以使用一个,也可以一个客户端对应一个。

2.3 付款人-Paymaster

付款人交易Gas的实际支付者。付款人是一个智能合约,该合约最重要的是交易过滤器” acceptRelayedCall“,决定了可以为哪些交易支付费用。 常用的过滤器包括:

  • 白名单
  • 令牌认证
  • 对特定方法放行
  • 链下委托授权

2.4 中继路由-RelayHub

中继路由本身是一份智能合约,提供的功能包括:

  • 维护一份中继器列表,供客户端查询
  • 提供RelayHub.balances[recipient]方法,供中继服务器在支付Gas前检查Dapp开发者已存入足够的ETH 中继路由合约可以自行部署,也可以直接使用GSN提供的。自行部署的RelayHub无法共享已存在的中继器。 以太坊主网上的RelayHub合约地址:0xD216153c06E857cD7f72665E0aF1d7D82172F494

2.5 中继接收合约-RelayRecipient

每个支持GSN的DApp都需要继承RelayRecipient,并提供与RelayHub通信的接口。在部署Dapp合约时,需要初始化RelayHub的地址。 需要注意的是,在继承RelayRecipient合约后,使用_msgSender()替代msg.sender获取元交易的用户信息。

2.6 Trusted Forwarder-可信转发器

可信转发器用来验证发送者签名和Nonce值,RelayHub通过可信转发器将元交易转发到Dapp合约中。

三、架构

GSN的整体架构如下图所示。

一个完整的流程为: 1、Client 到 RelayHub 查詢可用的 Relays 列表 2、Client发送原交易到RelayServer 3、RelayServer到RelayHub中验证Dapp开发者有足够的ETH用于支付Gas,并且付款人允许该交易 4、RelayServer返回给Client签名后的交易,此时交易已经被RelayServer中的Relay支付 5、RelayServer将交易发送给RelayHub合约 6、RelayHub合约调用内部的可信转发器,对交易的签名和nonce进行校验 7、可信转发器校验通过后调用接收者合约

四、案例

GSN官方提供的MetaCoin案例: https://metacoin.opengsn.org/

五、参考

  • GSNv2官网文档:https://docs.opengsn.org/learn/index.html
  • GSNv2 GitHub https://github.com/opengsn/gsn

区块链技术网。

  • 发表于 2020-09-07 11:36
  • 阅读 ( 1808 )
  • 学分 ( 160 )
  • 分类:以太坊

评论