【问题标题】:How to communicate with any given chain from Smart Contract?如何通过智能合约与任何给定链进行通信?
【发布时间】:2022-08-20 02:39:58
【问题描述】:

我正在尝试构建一个接受以下输入的函数

  1. 用户钱包地址
  2. NFT 地址
  3. 链ID

    并验证 NFT 是否实际上由给定链上的用户所有。

    如果这一切都在一个链条中,那么它可以很容易地完成。但我希望这个函数能够验证任何给定链的所有权。 我读过关于 Chainlink (Oracles) 的文章,但就我看来,它们似乎没有提供这样的功能。 据我所知,下面的所有交互都是通过 JSON-RPC 调用发生的。但我真的不知道如何在solidity 或任何其他语言中做到这一点。

    如果有人对如何解决此问题有任何线索,请留下答案。

    标签: solidity smartcontracts json-rpc


    【解决方案1】:

    链上合约(用 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");
        }
    }
    

    预言机(链下应用程序)侦听到达0x123 地址的交易,解码参数,在另一条链上执行查询,然后将包含结果的交易发送回您的合约(函数callback())。

    【讨论】:

    • 太感谢了。你只是让我朝着正确的方向前进。
    猜你喜欢
    • 2021-04-11
    • 2022-01-01
    • 1970-01-01
    • 2021-05-30
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多