以太坊“免”Gas發交易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

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;