我想创建一个智能合约,人们可以在钱包里没有以太币的情况下转让代币。
假设A想要将ERC20令牌转让给B,但他的钱包里没有以太币。
第三方C是否可以向A发送交易并因此支付汽油?是否可以在合同中为此usgae创建功能?
我已经在网上搜索了一项解决方案,但找不到。
答案 0 :(得分:0)
正是这种情况已经在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);
答案 1 :(得分:0)
这是以太坊dApp开发的关键问题,也是令牌的关键问题。这是very old thread on Ethereum Stack Exchange和also this one。
优缺点有2种:
使用签名
- 智能合约中的每个功能都必须具有
signature
参数。- 想要与智能合约进行交互的人们必须使用其帐户的私钥对功能参数进行签名,并将其发送给智能合约所有者(通过任何通信渠道)。
- 所有者随后将参数和签名一起提交给区块链,以支付汽油费用。签名可以确保邮件已被用户批准。
在交易结束时退款用过的天然气。修饰符
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。
我希望这会有所帮助。
答案 2 :(得分:-2)
否,在标准ERC20令牌合约中,令牌持有者必须发起至少一项交易(以调用transfer()
或approve()
),并且交易必须始终由其发起者支付。 / p>