如何使用带有 web3 v1 的 ERC20 代币的支付功能

Posted

技术标签:

【中文标题】如何使用带有 web3 v1 的 ERC20 代币的支付功能【英文标题】:How to use a payable function with a ERC20 token with web3 v1 【发布时间】:2019-03-31 18:51:18 【问题描述】:

我的以太坊智能合约中有一个函数,接口如下

// submitting a review requires a payment
function addReview(string review) public payable

使用 web3 v1 调用这个函数会是这样的

contract.methods.addReview(review).send(
 from: accounts[0],
 value: SOME_AMOUNT_IN_ETH
)

如何使用不同的 ERC20 令牌而不是使用 Ether 来调用此函数?

【问题讨论】:

payable 与以太有关。 ERC20代币是智能合约...要转移代币,您必须在代币智能合约上调用transfertransferFrom方法。 听起来我在想“要转移代币,你必须在代币智能合约上调用 transfer 或 transferFrom 方法”时遗漏了一些东西我不完全理解这个说法。您现在是否有关于如何使用 ERC20 代币的良好教程/说明? 这些来自我的博客:programtheblockchain.com/posts/2018/01/26/… 和 programtheblockchain.com/posts/2018/01/30/… 【参考方案1】:

如果您的应付函数是 foo 并带有 1 个参数,并且您想发送 x 的以太币数量并且 contract 是您要引用的合约,您可以这样调用它:

contract.foo.value(x).(param1)(msg.sender);

我希望它很清楚。

【讨论】:

我试图看看是否可以用我的代币而不是以太币发送金额,这听起来是不可能的。对吗? 不,在这种情况下是不可能的。你必须调用 ERC-20 合约才能转移它。尽管类似的做法是在您调用 addReview 之前以硬币形式(ERC-20 代币支持此)添加一些津贴,然后当您调用它时,您可以从 addReview 内部使用 TransferFrom转移硬币的功能。同样,这不是一回事,但在我看来,它已经尽可能接近了。

以上是关于如何使用带有 web3 v1 的 ERC20 代币的支付功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 web3.py 在钱包之间转移 ERC20 代币

如何在 RSK 上获取诸如 ERC20 代币符号之类的信息?

如何使用 web3 与 UUPS 可升级合约交互?

转账ERC20代币失败:web3.exceptions.ContractLogicError:执行恢复:ERC20:从零地址转账

使用 web3 将 ERC20 代币从地址 A 转移到地址 B

Web3:从地址中检索 ERC20 代币的余额