Contract-Design

ETH - 預付費智能合約,因此使用者無需支付交易費用

  • October 13, 2020

我正在開發一個“公司”DApp,因此員工沒有任何理由“花費”他們的乙太/天然氣來與契約互動……

有沒有辦法讓每筆交易都由合約本身自動支付?如果不是,您將如何解決這個問題?我不能將 ETH 轉給員工,因為他們可能會“花錢”,同時,他們為什麼要使用自己的 ETH?

謝謝大家的任何建議。

乾杯

你可以實現某種元交易系統。員工不是直接簽署交易,而是簽署一條包含智能合約方法輸入參數的消息,比如inputAinputBinputC

基礎

  • 在前端詢問使用者的輸入。
  • 散列輸入加上一個隨機參數: web3.utils.soliditySha3(inputA, inputB, inputC, random);。如果同一使用者對相同的數據簽名兩次,則隨機參數可防止雜湊衝突。
  • 要求使用者用他們的私鑰對雜湊進行簽名。
  • 您在後端接收簽名、使用者輸入和隨機參數,並通過使用應用程序私鑰簽署交易將它們注入合約。你的solidity函式的原型應該是這樣的:
function myFunction(uint256 inputA, address inputB, uint256 inputC, uint256 random, address userAddress, bytes32 r, 
bytes32 s, uint8 v) public;
  • 在函式內部,對參數進行雜湊處理並驗證使用者簽名:
bytes32 hash = keccak256(abi.encodePacked(inputA, inputB, inputC, random));
require(ecrecover(hash, v, r, s) == userAddress);

實現此類邏輯的要求

這種系統有一些要求:

  • 這是代表使用者在後端簽署和發送交易的應用程序,因此您需要創建一個管理員帳戶並自己管理私鑰。
  • 您為交易付費,因此您需要足夠的乙太幣來支付費用。
  • 您必須實現某種 nonce 管理系統來處理多個並發請求。

補充說明

請注意,該系統分散性很差,因為使用者不直接簽署交易。然而,在最壞的情況下,應用程序只能決定不廣播交易。由於所有輸入參數均由使用者預先簽名,因此無法執行惡意交易。

目前,乙太坊不支持交易由其他人支付的模型。

一些基於智能合約的錢包,如 Pillar 和 Argent,已經建立了複雜的基礎設施來解決這個問題。錢包本身是一個智能合約,可以執行使用者使用他或她的密鑰簽署的操作。然而,交易 ETH 的 gas 費用由服務提供商的熱錢包支付。然後,提供者根據消耗的 ETH 以美元/其他代幣向使用者收費。

所以你可以創建非常複雜的邏輯來繞過這個限制。但聽起來您的使用者案例相對簡單,更多的是不信任組織員工的問題。我假設你可以重新解僱失去 ETH 的員工。

引用自:https://ethereum.stackexchange.com/questions/88268