Web3js

可能嗎?使用者向使用者發送 ERC20 代幣,但伺服器支付 gas 費

  • June 29, 2022

我是這個領域的新手。

我和我的團隊正在嘗試建構一個應用程序,該應用程序在使用者每次編寫時都會為他們提供一個 ERC20 代幣,並允許使用者將他們的代幣提供給其他使用者。

但是,每當使用者將代幣提供給另一個使用者時,就會發生交易並且必須支付汽油費。我們的團隊想支付這筆汽油費。

這可能嗎?我嘗試使用approve 和transferFrom,但出現錯誤Error: Returned error: execution reverted: ERC20: transfer amount exceeds allowance

這是我嘗試過的程式碼。該合約使用 ERC20 標準。

export async function voteToOtherUser(senderAccount:String, senderPrivateKey:String, senderUserId:Number, receiverAccount:String, receiverUserId:Number) {
   const Web3 = require('web3');
   const web3 = new Web3(new Web3.providers.HttpProvider(process.env.INFURA_ENDPOINT)); 
   const contract = new web3.eth.Contract(SITokenABI, TOKEN_CONTRACT_ADDRESS, { from: TOKEN_CONTRACT_DEPLOYED_OWNER_ADDRESS, gas: GAS_FEE});
    //디코딩
   const decryptedPrivateKey = require('aes256').decrypt(process.env.PRIVATE_KEY_SECRET, senderPrivateKey)

   // web3.eth.accounts.wallet.add(decryptedPrivateKey);
   // console.log("result", await contract.methods.transfer(receiverAccount, VOTING_TOKEN_AMOUNT).call())


   console.log(await contract.methods.approve(senderAccount, VOTING_TOKEN_AMOUNT).call())
   console.log(await contract.methods.allowance(senderAccount, TOKEN_CONTRACT_ADDRESS).call())
  console.log( await contract.methods.transferFrom(senderAccount, receiverAccount, VOTING_TOKEN_AMOUNT).call())
   
   updateUserBalance(senderUserId, senderAccount)
   updateUserBalance(receiverUserId, receiverAccount)
}

如果您有類似問題的解決方案,請提出建議。我不是以英語為母語的人,所以我努力搜尋,但可能會有限制。

謝謝!

首先,沒有簡單的方法可以實現這一目標。所有選項都有點高級。

使用transferFrom要求代幣所有者給予提款許可,通常給予這種許可需要一筆交易。

如果您控制 ERC20 令牌程式碼並且仍然可以更改它(在部署之前),您可以在其中添加permithttps://docs.openzeppelin.com/contracts/4.x/api/token/erc20#ERC20Permit)功能。這與所有者給予津貼相同,但它不需要交易 - 只需簽名。

另一種選擇是加油站網路(https://opengsn.org/)。

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