# Gas Station Network (GSN) ## 文件閱讀 ### 簡介 #### 以太坊加油站網絡(GSN) ![](https://i.imgur.com/9QVvblY.png) 以太坊加油站網絡 (GSN) 提取氣體以最大程度地減少 dapp 的入職和用戶體驗摩擦。使用 GSN,無氣體客戶端可以與以太坊合約進行交互,而用戶無需 ETH 來支付交易費用。GSN 是一個去中心化系統,可以在不犧牲安全性的情況下提高 dapp 的可用性。 GSN 的示例用例: 1. **以任何代幣支付gas**:允許用戶以任何代幣支付gas 2. **以法定貨幣支付汽油**:允許用戶以法定貨幣支付汽油,而無需通過 KYC 3. **隱私**:啟用發送到隱身地址的代幣的無 ETH 提取 4. **入職:允許dapps**補貼新用戶的入職流程 #### 問題 如果沒有 GSN,任何發送以太坊交易的人都需要有 ETH 來支付 gas 費用。這迫使新用戶在開始使用任何 dapp 之前通過 KYC 併購買 ETH。對於之前沒有加密經驗的用戶來說,這可能是一個主要障礙,他們不熟悉需要將 ETH 保存在錢包中以獲取燃料的概念。 對於需要不斷補充 ETH 餘額以支付汽油費的現有用戶來說,這也是用戶體驗上的痛苦,即使他們的錢包裡有價值數千美元的代幣。 #### 構造 ![](https://i.imgur.com/WmtbeR2.png) 組件: - [**client:客戶端**:簽署元交易並將其發送到中繼服務器](https://docs.opengsn.org/#client) - [**provider:中繼服務器**:一機多用,一用多機](https://docs.opengsn.org/#relayservers) - [**Paymaster**:同意退還中繼服務器的gas費用](https://docs.opengsn.org/#paymaster) - [**Trusted Forwarder**:驗證發件人簽名和隨機數](https://docs.opengsn.org/#forwarder) - [**收件人合同**:看到原始發件人](https://docs.opengsn.org/#recipient) - [**RelayHub**:無需信任地連接參與者](https://docs.opengsn.org/#relayhub) #### 客戶端:簽署元交易並將其發送到中繼服務器 元交易是一個簡單想法的花哨名稱:中繼服務器可以發送用戶的交易並為自己支付 gas 費用。用戶無需簽署需要 ETH 來換氣的以太坊交易,而是簽署一條包含他們想要執行的交易信息的消息,並將其發送到中繼服務器。在中繼服務器支付 gas 費用之前,它會驗證它會通過 Paymaster 合約獲得退款。 #### 中繼服務器:一機多用,一用多機 最佳實踐是每個 dapp 部署自己的中繼服務器,為自己的用戶提供有成本的服務,並為服務其他 dapp 的用戶收取交易費用。 如果 dapp 的中繼服務器不可用(例如,DoS 攻擊),客戶端將回退到通過願意為其提供服務以換取額外費用的其他 dapp 的中繼服務器路由交易。 這創造了一種“一勞永逸”的效果,在這種情況下,拆除任何 dapp 的前端就像拆除整個網絡一樣困難。參與的 dapp 越多,可用性保證就越穩健。 ### Paymaster:同意退還中繼服務器的gas費用 在 GSN 中,所有訪問控制和 gas 退款邏輯都在 Paymaster 合約中實現。Paymaster 在 RelayHub 中有一個 ETH 油箱,可以執行任何業務邏輯來決定是接受還是拒絕元交易。例如,僅接受白名單用戶的交易,或接受同樣通過驗證碼的入職用戶所需的合約方法,或僅接受包括以代幣形式向 Paymaster 償還的交易等。 - 要了解有關 Paymaster 的更多信息,請參閱[為用戶的元交易付款](https://docs.opengsn.org/contracts/#paying-for-your-user-s-meta-transaction) #### Trusted Forwarder:驗證發件人簽名和隨機數 元交易感知接收者合約僅依賴於一個小的可信轉發合約來保證其安全性。該合約驗證原始發送者的簽名和隨機數。 - 要了解有關可信轉發器的更多信息,請參閱[可信轉發器:最小可行信任](https://docs.opengsn.org/contracts/#trusted-forwarder-minimum-viable-trust) #### [收件人合同:查看原始發件人](https://docs.opengsn.org/#recipient-contract-sees-original-sender) 為了支持元交易接收者合約繼承自一個簡單的 [基類 (打開新窗口)](https://github.com/opengsn/gsn/blob/release/contracts/BaseRelayRecipient.sol)並替換`msg.sender`為`_msgSender()`. 它返回簽署元交易請求的原始發送者,如果直接調用合約,則返回 msg.sender。 #### [RelayHub:無需信任地連接參與者](https://docs.opengsn.org/#relayhub-connecting-participants-trustlessly) RelayHub 連接運行客戶端、中繼服務器和付款人的用戶,因此參與者無需了解或相互信任。 Dapp 開發人員無需了解或信任 RelayHub 的內部工作原理即可與 GSN 集成。接收者合約不會暴露在 RelayHub 中的潛在安全問題。 在後台,RelayHub 幫助客戶在 dapp 的中繼服務器停機時發現最佳的第三方中繼服務器,防止第三方中繼服務器審查交易,重新平衡為自己的 Paymaster 服務的中繼服務器的 ETH,並確保 Paymaster 償還中繼用於支付汽油費和交易費的服務器。