我正在使用 Web3j 库来处理区块链。我想解决在特定交易期间转移了哪些代币。我已经尝试过的:
- 调用
Function
该名称supportsInterface
以检查其是否支持 NFT 标准(ERC721、ERC1155 等)。没有成功。 - 试图解码
Transaction Logs
,找到了如何检索Token ID
,但我对这些信息无能为力。
对此有什么建议吗?
您无法从交易哈希中获取使用了什么令牌:这是我的答案,看看您可以从 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);
}