gpt4 book ai didi

ethereum - 如何检测以太坊地址是否为 ERC20 代币合约?

转载 作者:行者123 更新时间:2023-12-04 15:52:04 25 4
gpt4 key购买 nike

如果我只从输入中得到一个以太坊地址,有没有办法找出它是否与 ERC20 匹配? token 标准?

最佳答案

ERC165解决了这个问题,但不幸的是,大多数 ERC20 实现不支持它(截至 2018 年 11 月,至少 OpenZeppelin doesn't )。这意味着您可以尝试调用supportsInterface功能,但无论如何它都会恢复,你宁愿让事情复杂化。

然而,这是它在 ERC721 中的定义。 :

bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;
/*
* 0x80ac58cd ===
* bytes4(keccak256('balanceOf(address)')) ^
* bytes4(keccak256('ownerOf(uint256)')) ^
* bytes4(keccak256('approve(address,uint256)')) ^
* bytes4(keccak256('getApproved(uint256)')) ^
* bytes4(keccak256('setApprovalForAll(address,bool)')) ^
* bytes4(keccak256('isApprovedForAll(address,address)')) ^
* bytes4(keccak256('transferFrom(address,address,uint256)')) ^
* bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
* bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
*/

尽管不能保证所有实现都定义接口(interface) id,但考虑到社区从一开始就同意应用 ERC165 的事实,它在 ERC721 的情况下工作的可能性更高。如果下面查询的返回值为真,那么说明你有一个合规的合约,否则就恢复交易。
// you can call this in your contracts
IERC721(contractAddress).supportsInterface(0x80ac58cd)

此外,手动检查 bytes4 的有用资源给定方法的 4byte.directory

关于ethereum - 如何检测以太坊地址是否为 ERC20 代币合约?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com