我正在尝试构建一个接受以下输入的函数
- 用户钱包地址
- NFT地址
- 链ID
并验证NFT是否实际上由给定链上的用户所有。
如果这一切都在一个链条内,就可以很容易地完成。但我希望这个函数能够验证任何给定链的所有权。我读过关于Chainlink(Oracle(的文章,但据我所知,它们似乎并没有提供这样的功能。据我所知,下面的所有交互都是通过JSON-RPC调用进行的。但我真的不知道如何用solidity或任何其他语言来做到这一点。
如果有人对此有任何线索,请留下答案。
Onchain合约(用Solidity或其他EVM兼容语言编写(不能直接与其他链通信,也不能执行JSON-RPC调用。
您可以使用oracle模式从链外应用程序请求信息,该应用程序完成请求(通过查询另一个链(,并将结果发送回您的合同。
pragma solidity ^0.8;
contract MyContract {
// TODO implement a way to keep track of the requests
// so that you can pair the incoming result to its according request data
address oracle = address(0x123);
function requestNFTOwnerCheck(address owner, address collection, uint256 tokenID, uint16 chainID) external {
(bool success, ) = oracle.call(abi.encode(owner, collection, tokenID, chainID));
require(success);
}
function callback(bool result) external {
require(msg.sender == oracle, "This function can be invoked only by the oracle");
}
}
oracle(链外应用程序(侦听到达0x123
地址的事务,解码参数,在另一个链上执行查询,然后将包含结果的事务发送回您的合同(函数callback()
(。