21

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

 3 years ago
source link: https://learnblockchain.cn/article/1432
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

一、什么是GSN

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

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

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的整体架构如下图所示。 IzuYR3A.png!mobile

一个完整的流程为: 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/

五、参考

一、什么是GSN

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

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

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的整体架构如下图所示。 IzuYR3A.png!mobile

一个完整的流程为: 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/

五、参考

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 55分钟前
  • 阅读 ( 8 )
  • 学分 ( 5 )
  • 分类:以太坊

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK