Web3js
可能嗎?使用者向使用者發送 ERC20 代幣,但伺服器支付 gas 費
我是這個領域的新手。
我和我的團隊正在嘗試建構一個應用程序,該應用程序在使用者每次編寫時都會為他們提供一個 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 令牌程式碼並且仍然可以更改它(在部署之前),您可以在其中添加
permit
(https://docs.openzeppelin.com/contracts/4.x/api/token/erc20#ERC20Permit)功能。這與所有者給予津貼相同,但它不需要交易 - 只需簽名。另一種選擇是加油站網路(https://opengsn.org/)。