如何准确地确定合同是否符合ERC20,以及由谁来决定?在阅读了我是否必须将ERC20 20签名作为单独的契约来实现,并使用继承?和一些googling之后,我有了一些想法。
1)谁决定合同是否符合ERC20?仅仅是那个想用它的人(交换,钱包,.)?
2)如何确定合同是否符合ERC20?我目前的理解是,您所需要的只是拥有正确的函数签名(正确的函数散列)。因此,它不一定要从ERC20接口继承(实现)。对吗?
3)如果第二个问题的答案是“是”,那么可以在某些函数中添加例如payable修饰符(正如我所理解的,它不会更改函数的哈希)吗?
如果问题2和问题3的回答是“是”,那么以下是ERC20标准的有效实现(假设其他功能也已实现):
contract A {
...
function transfer(address to, uint tokens) public payable returns (bool success) {
...
}
...
}发布于 2018-04-13 16:50:01
在构思ERC20 (*)时,没有确定合同是否支持接口的标准。
一些块探索者和钱包可以进行验证,例如,对于ERC20合同,他们可以验证公共函数是否可用,并返回有用的东西,如symbol、name、decimals等。
支持合同验证的块资源管理器可以检查ABI是否还有其他方法,如transfer、approve等。
这显然是不够的,总是抛出、返回false或0(取决于函数)的契约仍然可以符合EIP20 20标准。
(*)现在有了EIP 165,它允许查询协议中支持的接口。
发布于 2019-06-18 23:10:34
若要添加有关此问题的进一步信息,需要检查是否发出了适当的事件。
ABI没有显示emit的泰德事件。
所以我认为需要人工处理。
请注意,一些流行的pre 20类令牌,如Binance (预交换)和Golem并不完全是ERC20。
https://ethereum.stackexchange.com/questions/45431
复制相似问题