首页 > 解决方案 > 如何检查功能是否支付?

问题描述

如何在调用合约功能之前签入代码(在 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);

所以我需要或覆盖这在我的应用程序合同方面没有标准转移,或者在最坏的情况下在前端禁止此类令牌。

标签: blockchainethereumsolidityweb3erc20

解决方案


要在一行中回答您的问题-:

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

function testPayable() external payable {...}

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

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

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

对我来说有些东西听起来很可疑,不是吗?


推荐阅读