【问题标题】:oracles implementation with smart contracts使用智能合约实现预言机
【发布时间】:2017-11-07 21:18:31
【问题描述】:

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

导入不起作用,无论是使用github链接还是使用本地导入,由于导入,solc编译失败。

以下两个都不起作用,合同没有被 solc 正确编译

1.import "oraclizeAPI.sol";

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

所以,我采取的下一个方法是将 oraclizeAPI.sol 的代码直接复制到合约代码文件中。 现在合约已正确编译,但每次部署时我都会陷入困境。

错误:

The contract couldn't be stored, please check your gas amount.

现在这里是区块链的详细信息。

起源.json

  {
        "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 来部署合约。

web3.eth.getBlock("latest").gasLimit
132661998547049420

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

合约代码:

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!";
    }

} 

合约创建代码。

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

或者完整的节点实现:

https://github.com/utkarsh17ife/oraclizeExample

是的,我可以使用此设置挖掘其他合约。

如果您需要更多信息,请发表评论。

【问题讨论】:

  • 你可能会在 stackexchange 上获得更多的运气来获得加密货币,或者甚至可能专注于以太坊
  • 如果你想让我尝试更多的以太币,让我知道我应该在 genesis.json 文件中放入多少“余额”以及在合同创建中我应该保留多少“gas:”的价值.
  • ethereum.stackexchange.com问这个问题

标签: ethereum smartcontracts


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2022-01-09
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2022-08-02
    • 2023-01-25
    • 2017-08-19
    • 2022-12-06
    相关资源
    最近更新 更多