我正在尝试重新编译在Kaleido样本库中找到的ChainlinkEthPrice合同,这里是:https://kaleido-io.github.io/kaleido-samples-gallery/#/kaleido-samples-gallery/chainlink。
守则如下:
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);
}
}收到下列错误:
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));
^-----^想知道是否有人能帮上忙。谢谢!
发布于 2019-01-09 12:01:56
感谢那些建议Oraclize的人--这就是我在公共区块链项目中一直使用的东西。我在这里使用Chainlink,因为它与Kaleido.io一起工作,这是我在我的项目中使用的一个私有区块链平台。
不管怎么说,ChainLink的托马斯·霍奇斯帮了我这个忙。这些都是他所做的改变:
发自:
ChainlinkLib.Run memory run = newRun(jobId, this,"fulfillEthereumPrice(bytes32,uint256)");至:
ChainlinkLib.Run memory run = newRun(jobId, this, this.fulfillEthereumPrice.selector);来自:
requestId = chainlinkRequest(run, LINK(0));至:
requestId = chainlinkRequest(run, 0);现在它的工作方式正是它应该做的。
发布于 2019-01-09 09:49:58
虽然我无法具体地帮助解决这些错误,但我可以帮助创建一个智能合同,通过Oraclize对您的问题的评论获得ETH的当前价格(以美元计):
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");
}
}0.5。settings选项卡加载Oraclize插件run选项卡并单击deploygetEthPrice&观看Oraclize插件所做的事情。https://ethereum.stackexchange.com/questions/65216
复制相似问题