首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接Kaleido合同汇编

链接Kaleido合同汇编
EN

Ethereum用户
提问于 2019-01-08 11:57:24
回答 2查看 277关注 0票数 0

我正在尝试重新编译在Kaleido样本库中找到的ChainlinkEthPrice合同,这里是:https://kaleido-io.github.io/kaleido-samples-gallery/#/kaleido-samples-gallery/chainlink

守则如下:

代码语言:javascript
复制
pragma solidity ^0.4.24;

import "./Chainlinked.sol";

contract ChainlinkEthPrice is Chainlinked {

    struct EthPriceAtBlock
    {
        uint    blockNumber;
        uint    blockTimestamp;
        bytes32 requestId;
        uint256 reportedPrice;
    }

    EthPriceAtBlock[] public ethPrices;
    bytes32 jobId;

    constructor(bytes32 _jobId, address linkTokenAddr, address oracleAddr)
        public
    {
        jobId = _jobId;
        setLinkToken(linkTokenAddr);
        setOracle(oracleAddr);
    }

    function requestEthereumPrice(string _currency)
        public returns (bytes32 requestId)
    {
        ChainlinkLib.Run memory run = newRun(jobId, this, "fulfillEthereumPrice(bytes32,uint256)");
        run.add("url", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY");
        run.add("path", _currency);
        run.addInt("times", 100);
        requestId = chainlinkRequest(run, LINK(0));
    }

    function fulfillEthereumPrice(bytes32 _requestId, uint256 _reportedPrice)
        public checkChainlinkFulfillment(_requestId)
    {
        ethPrices.push(EthPriceAtBlock({
            blockNumber: block.number,
            blockTimestamp: block.timestamp,
            requestId: _requestId,
            reportedPrice: _reportedPrice
        }));
       emit RequestEthereumPriceFulfilled(_requestId, _reportedPrice, block.number, block.timestamp);
    }

    event RequestEthereumPriceFulfilled(
        bytes32 indexed requestId,
        uint256 indexed reportedPrice,
        uint256 blockNumber,
        uint256 blockTimestamp
    );

    function getDataCount()
        public view returns (uint length)
    {
        return ethPrices.length;
    }

    function getData(uint idx)
        public view returns (uint blockNumber, uint256 reportedPrice)
    {
        return (ethPrices[idx].blockNumber, ethPrices[idx].reportedPrice);
    }
}

收到下列错误:

代码语言:javascript
复制
browser/chainlink.sol:27:59: TypeError: Invalid type for argument in function call. Invalid implicit conversion from literal_string "fulfillEthereumPrice(bytes32,uint256)" to bytes4 requested.
    ChainlinkLib.Run memory run = newRun(jobId, this, "fulfillEthereumPrice(bytes32,uint256)");
                                                      ^-------------------------------------^

browser/chainlink.sol:31:43: TypeError: Type is not callable
    requestId = chainlinkRequest(run, LINK(0));
                                      ^-----^

browser/chainlink.sol:31:43: TypeError: Invalid type for argument in function call. Invalid implicit conversion from tuple() to uint256 requested.
    requestId = chainlinkRequest(run, LINK(0));
                                      ^-----^

想知道是否有人能帮上忙。谢谢!

EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-01-09 12:01:56

感谢那些建议Oraclize的人--这就是我在公共区块链项目中一直使用的东西。我在这里使用Chainlink,因为它与Kaleido.io一起工作,这是我在我的项目中使用的一个私有区块链平台。

不管怎么说,ChainLink的托马斯·霍奇斯帮了我这个忙。这些都是他所做的改变:

发自:

代码语言:javascript
复制
ChainlinkLib.Run memory run = newRun(jobId, this,"fulfillEthereumPrice(bytes32,uint256)");

至:

代码语言:javascript
复制
ChainlinkLib.Run memory run = newRun(jobId, this, this.fulfillEthereumPrice.selector);

来自:

代码语言:javascript
复制
requestId = chainlinkRequest(run, LINK(0));

至:

代码语言:javascript
复制
requestId = chainlinkRequest(run, 0);

现在它的工作方式正是它应该做的。

票数 1
EN

Ethereum用户

发布于 2019-01-09 09:49:58

虽然我无法具体地帮助解决这些错误,但我可以帮助创建一个智能合同,通过Oraclize对您的问题的评论获得ETH的当前价格(以美元计):

代码语言:javascript
复制
pragma solidity 0.5.0;

import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";

contract EthPriceTicker is usingOraclize {

    string public ethPriceUSD;

    event LogEthPrice(string priceUSD);

    function __callback(bytes32 myid, string memory result, bytes memory proof) public {
        require(msg.sender == oraclize_cbAddress());
        ethPriceUSD = result;
        emit LogEthPrice(result);
    }

    function getEthPriceInUSD() public payable {
        oraclize_query("URL", "json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD,EUR,JPY).USD");
    }
}

指令:

  • 复制并粘贴到混炼 (一个坚实的IDE)
  • 确保您的solc编译器版本大于所选的0.5
  • 编制合同
  • 从右上角的settings选项卡加载Oraclize插件
  • 切换到run选项卡并单击deploy
  • 部署完毕后,展开下面显示的选项卡,查看合同中的函数。然后点击getEthPrice&观看Oraclize插件所做的事情。
票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/65216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档