3

我正在使用 Web3j 库来处理区块链。我想解决在特定交易期间转移了哪些代币。我已经尝试过的:

  • 调用Function该名称supportsInterface以检查其是否支持 NFT 标准(ERC721、ERC1155 等)。没有成功。
  • 试图解码Transaction Logs,找到了如何检索Token ID,但我对这些信息无能为力。

对此有什么建议吗?

4

1 回答 1

1

您无法从交易哈希中获取使用了什么令牌:这是我的答案,看看您可以从 trnasaction 哈希中获得哪些信息,如果您对其进行解码:如何通过交易哈希知道交易中使用的加密货币?

但是,您可以获得使用的接口。

supportsInterface用于此:

// I did not use web3j. I am not sure how you call methods in web3j
const is721 = await contract.methods.supportsInterface('0x80ac58cd').call();
if(is721) {
    return "ERC721";
}

为了调用它,你的合约必须继承自ERC165. 如果您使用的是 openzeppelin 的合同,它已经继承并且应该可以工作:

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {}

但是,如果您要实现自己的 ERC721,则必须确保从 ERC165 继承。ERC165 用于检测智能合约实现了哪些接口。ERC165 只有一个函数用于检查合约签名是否满足指定的接口签名。

interface ERC165 {
/// @notice Query whether a contract implements some interface or
not
/// @param interfaceID Interface ID specified by ERC-165 standard
/// @dev Interface ID is defined in ERC-165 standard.
/// This function use GAS less than 30,000 gas.
/// @return If contract implements the specified interface, then
return
/// `true`
/// and `interfaceID` is not 0xffffffff, or return `false`
function supportsInterface(bytes4 interfaceID) external view
returns (bool);
}
于 2022-02-08T01:56:04.427 回答