如何判断 RSK 上的智能合约是不是为 NFT?
Posted
技术标签:
【中文标题】如何判断 RSK 上的智能合约是不是为 NFT?【英文标题】:How can I tell if a smart contract on RSK is an NFT?如何判断 RSK 上的智能合约是否为 NFT? 【发布时间】:2021-08-28 12:58:06 【问题描述】:给定部署到 RSK 的智能合约的地址,我如何判断它是否是 NFT?有没有“标准”的方式来做到这一点?
【问题讨论】:
【参考方案1】:是的,有一个明确的方法可以做到这一点, 如果智能合约实施了众所周知的 NFT 代币标准, 进而实现众所周知的EIP165 Standard Interface Definition。
(1) 最简单的方法是在 RSK 区块浏览器上查找地址。
如果智能合约地址是0x814eb350813c993df32044f862b800f91e0aaaf0
,则转到
https://explorer.rsk.co/address/0x814eb350813c993df32044f862b800f91e0aaaf0
在此页面上,您将看到一行“合同接口”,
在这个智能合约的情况下,
显示ERC165 ERC721 ERC721Enumerable ERC721Metadata
。
由于它包含ERC721
,我们知道它实现了不可替代令牌的令牌标准。
(2) 更程序化/DIY的方式是使用EIP165标准中定义的函数,其接口复制如下:
interface ERC165
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
无需过多地计算如何计算,
(阅读 EIP-165 标准以获得完整的描述/解释)
如果调用supportsInterface
返回true
,那么你知道
该智能合约(声称)实现了该特定接口。
supportsInterface(0x80ac58cd)
如果你想测试一个特定的智能合约是否实现了
"Multi Token Standard",
这是目前第二流行的 NFT 标准:
致电supportsInterface(0xd9b67a26)
(请注意,虽然上述两个值都在各自的标准中进行了说明,但 您可能还希望自己计算它们,并且 EIP-165 标准包含有关如何执行此操作的部分。)
【讨论】:
以上是关于如何判断 RSK 上的智能合约是不是为 NFT?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 RSK 代币余额转换为 Javascript 数字?