首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用智能合约实现oracles

使用智能合约实现oracles
EN

Stack Overflow用户
提问于 2017-06-07 02:16:03
回答 1查看 359关注 0票数 3

我正在尝试将智能合约部署到使用oraclizeAPI.sol库代码的私有区块链。基本上,智能合约是oraclize的一个小实现。

导入不起作用,无论是使用github链接还是使用本地导入,solc编译都会因为导入而失败。

以下两种情况都不起作用,solc没有正确编译合同

代码语言:javascript
复制
1.import "oraclizeAPI.sol";

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

因此,我采取的下一种方法是将oraclizeAPI.sol的代码直接复制到合同代码文件中。现在契约被正确地编译了,但是在部署的时候,我每次都会掉到油里。

错误:

代码语言:javascript
复制
The contract couldn't be stored, please check your gas amount.

下面是区块链的详细信息。

genesis.json

代码语言:javascript
复制
  {
        "nonce": "0x0000000000000042",
        "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "difficulty": "0x4000",
        "alloc": {
            "84840c340067c75806273d2524dfbae646a7c68f": 
            { "balance": "1606938044258990275541962092341162602522202993782792835301376" }
        },
            "config": {
            "chainId": 15,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "coinbase": "0x84840c340067c75806273d2524dfbae646a7c68f",
        "timestamp": "0x00",
        "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "gasLimit": "0x8000000000000000"
    }

我目前正在尝试使用coinbase id来完成合约。

代码语言:javascript
复制
web3.eth.getBlock("latest").gasLimit
132661998547049420

web3.eth.getBalance('0x84840c340067c75806273d2524dfbae646a7c68f').e
60

合同代码:

代码语言:javascript
复制
contract oraclizeExample is usingOraclize {

    string public data;

    event newOraclizeQuery(string description);
    event newData(string data);
    event eventC(string data);

    function oraclizeExample() payable {
        update();
    }

    function __callback(bytes32 myid, string result) {
        if (msg.sender != oraclize_cbAddress()) throw;
        data = result;
        newData(result);
        //return result;
    }

    function eventCheck(string dataFClient) returns (string) {
        eventC(dataFClient);
        return dataFClient;
    }

    function update() payable returns (string) {
        newOraclizeQuery("Oraclize query was sent, standing by for the answer..");
        oraclize_query("URL", "json(https://jewel-api.herokuapp.com/jewel/58d89d264d59a000110829bb).invoice_num");
        return "update function was called!";
    }

} 

创建合同的代码。

代码语言:javascript
复制
var ContractABI = web3.eth.contract(JSON.parse(interface));
var SaveContract = ContractABI.new(
    {
        from: account,
        data: bytecode,
        gas: '93048696279858031'
    }, function (e, contract) {
        if(e){
            console.log(e, contract);
            return;
        }

        if (typeof contract.address !== 'undefined') {
            console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
            fs.writeFileSync('./contracts_data/'+ contract_name + '_final', 'Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash)
            return; 
        }

    });

如果你想检查完整的合同代码和我这样做的方式,请转到这个链接。

https://github.com/utkarsh17ife/oraclizeExample/tree/master/contracts_data

或者是使用node的完整实现:

https://github.com/utkarsh17ife/oraclizeExample

是的,我可以使用这个设置挖掘其他合同。

如果你需要更多关于这方面的信息,请留言。

EN

回答 1

Stack Overflow用户

发布于 2017-06-07 22:01:55

如果您使用的是私有链,则必须运行ethereum-bridge,因为您的智能合约在部署时调用了oraclize_query函数(构造函数),但在您的链上找不到Oraclize合约。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44397079

复制
相关文章

相似问题

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