第三方可以向以太坊区块链发送 ERC20 代币交易吗?
Posted
技术标签:
【中文标题】第三方可以向以太坊区块链发送 ERC20 代币交易吗?【英文标题】:Can third party send an ERC20 token transaction to ethereum blockchain? 【发布时间】:2019-01-24 14:01:36 【问题描述】:我想创建一个智能合约,人们可以在钱包中没有以太币的情况下转移代币。
假设 A 想将 ERC20 代币转给 B,但他的钱包里没有以太币。
第三方 C 是否可以为 A 发送交易并因此支付 gas 费用?是否可以在合约中为这个usgae创建一个函数?
我在网上搜索了一个解决方案,但没有找到。
【问题讨论】:
【参考方案1】:正是这种情况已经在 ERC20 标准中定义。它的这个功能:
function transferFrom(address from, address to, uint tokens) public returns (bool success);
但是在 C 方可以使用它并将令牌从 A 发送到 B 之前,A 必须通过以下函数批准 C 执行此操作,该函数也在 ERC20 标准中定义:
function approve(address spender, uint tokens) public returns (bool success);
【讨论】:
这仍然需要以太币支付A发出的实际交易。【参考方案2】:不,在标准 ERC20 代币合约中,代币持有者必须至少发起一笔交易(调用 transfer()
或 approve()
),并且交易必须始终由发起人支付。
【讨论】:
【参考方案3】:这是以太坊 dApp 开发的关键问题,也是代币的关键问题。这是very old thread on Ethereum Stack Exchange 和also this one。
有两种选择,各有优缺点:
使用签名
智能合约中的每个函数都必须有signature
参数。 想要与智能合约交互的人必须使用其账户的私钥对函数参数进行签名,并将其发送给智能合约所有者(通过任何通信渠道)。 然后所有者将参数连同签名一起提交给区块链,支付gas费用。签名保证消息已被用户批准。在交易结束时退还使用的 gas。可以为此使用修饰符
refundGasCost
(见下文)。
但是 (1) 确实很难应用于您只是不知道谁使用代币的代币转移,并且 (2) 并没有真正解决这个问题。
最近发生了很多事情,有这篇关于How to save your Ethereum Dapp users from paying gas for transactions 的博文,既然你问的是代币,有一个ERC 建议Pay transfers in tokens instead of gas, in one transaction 如果你有代币但没有ETH,那就太好了。
我希望这会有所帮助。
【讨论】:
以上是关于第三方可以向以太坊区块链发送 ERC20 代币交易吗?的主要内容,如果未能解决你的问题,请参考以下文章