【问题标题】:How to check function is payable or not?如何检查功能是否支付?
【发布时间】:2019-09-19 16:58:39
【问题描述】:

如何在调用合约功能之前签入代码(在 Solidity 端或/和 Web3 端),此功能是否支付?

例如,我今天在代币 EURS 中发现了这个

function transfer (address _to, uint256 _value)
public payable returns (bool success);

这不是标准的使erc20传输功能为应付账款!!!如果用户使用 EURS 令牌,这不是标准逻辑会在我的应用程序中造成错误。

这是标准

function transfer(address to, uint tokens) public returns (bool 
success);

所以我需要或覆盖这在我的应用合同方面不是标准传输,或者在最坏的情况下在前端禁止此类令牌。

【问题讨论】:

  • 问题没有英文意义?可以试试改写吗?
  • 感谢您的评论。这样更好吗?

标签: blockchain ethereum solidity web3 erc20


【解决方案1】:

一句话回答你的问题-:

任何标记为应付的功能都可以被认为是接收以太币。

function testPayable() external payable {...}

上述功能是支付的,因此可以接收。

但不要误会payable关键字只用于接收以太币,而不是ERC20代币。

因此,据我所知,在您的情况下,转账功能被标记为应付,如果它是 ERC20 代币,则不应该是这种情况。

在我看来有些可疑,对你来说不是吗?

【讨论】:

  • 是的,我知道这是一个错误!我的目标是,我可以在调用这样的代码中的函数之前进行检查吗: if (!isPayable(transfer))
【解决方案2】:

总而言之:如果不知道 abi / 接口,就无法从外部或从内部检查功能是否可支付。

什么是应付的?

  • Payable 与 Solidity 中的任何其他 modifier 一样工作。它在执行它所应用的函数之前运行。
  • 需要支付宝才能接收以太币。如果您将交易中的以太币发送到非支付函数,则交易将被还原。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 2015-10-27
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多