![](/img/trans.png)
[英]Building a chainlink node - ethereum ChainID doesn't match chainlink config.ChainID
[英]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.