繁体   English   中英

Chainlink.Request 没有 `add` 功能

[英]Chainlink.Request doesn't have `add` function

现在我正在使用这个依赖项: "@chainlink/contracts": "^0.1.7" 0.1.7 "@chainlink/contracts": "^0.1.7"和 solc v0.8

面临这个问题: Member "add" not found or not visible after argument-dependent lookup in struct Chainlink.Request memory

据说Chainlink.Request没有add功能...请告诉我如何修复它。

...
import "@chainlink/contracts/src/v0.8/dev/ChainlinkClient.sol";

contract ContractName is Ownable, ChainlinkClient {
    constructor() {
         setPublicChainlinkToken();
    }

    function requestData(
        address _oracle,
        bytes32 _jobId,
        string memory _endpoint,
        string memory _round,
        string memory _seasonId
    ) public {
        Chainlink.Request memory req =
            buildChainlinkRequest(_jobId, address(this), this.fulfill.selector);
        req.add(req, "endpoint", _endpoint);
        req.add(req, "round", _round);
        req.add(req, "season_id", _seasonId);

        sendChainlinkRequestTo(_oracle, req, fee_);
    }

在此处输入图片说明

编辑:总是对仍在开发分支中的合同感到厌烦。 话虽如此,v0.8 Chainlink Client 现在不在 dev 分支中,这个答案仍然相关。

我遇到了同样的问题,并联系了 Chainlink 团队的 Avneet。 原来这是由从 v0.7 开始的 Solidity 语言的变化引起的:

v0.7 中的重大变化:

对 B 使用 A 只会影响它提到的合约。以前,效果是继承的。 现在,您必须在所有使用该功能的派生合约中重复 using 语句。 https://docs.soliditylang.org/en/v0.7.0/070-break-changes.html

因此,需要using Chainlink for Chainlink.Request;添加using Chainlink for Chainlink.Request; 到合同的顶部,如下所示:

contract MyClient {
  using Chainlink for Chainlink.Request;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM