我有一个有几个节点的专用网络,我已经安装了来部署一个Oracle。
我的区块链节点之一被以太桥用来部署甲骨文。该节点由命令geth.exe --identity "7" --datadir "D:\Blockchain\1" --networkid 4999 --rpc --rpcport 47000 --rpcapi "db,eth,net,web3,shh,personal" --rpccorsdomain "*" --port 30800 --nodiscover --shh --ipcdisable console启动。
而ethereum-bridge:
ethereum-bridge -H localhost:47000 -a 0
这些是ethereum-bridge控制台上的日志
[2019-02-21T09:45:14.820Z] INFO you are running ethereum-bridge - version: 0.6.1
[2019-02-21T09:45:14.821Z] INFO saving logs to: ./bridge.log
[2019-02-21T09:45:14.822Z] INFO using active mode
[2019-02-21T09:45:14.823Z] INFO Connecting to eth node http://localhost:47000
[2019-02-21T09:45:16.101Z] INFO connected to node type Geth/7/v1.8.21-stable-9dc5d1a9/windows-amd64/go1.11.4
[2019-02-21T09:45:16.588Z] WARN Using 0x8668dc605fe8d721dbb96378fd8155c621bea37d to query contracts on your blockchain, make sure it is unlocked and do not use the same address to deploy your contracts
[2019-02-21T09:45:16.711Z] INFO deploying the oraclize connector contract...
[2019-02-21T09:45:26.998Z] INFO connector deployed to: 0x251deddf98aca280a252d9e5f7b1b246bc3f66f7
[2019-02-21T09:45:27.119Z] WARN deterministic OAR disabled/not available, please update your contract with the new custom address generated
[2019-02-21T09:45:27.120Z] INFO deploying the address resolver contract...
[2019-02-21T09:45:37.534Z] INFO address resolver (OAR) deployed to: 0xb69156280a1461003a079387c2b5b827b3f0fc53
[2019-02-21T09:45:37.535Z] INFO updating connector pricing...
[2019-02-21T09:45:47.861Z] INFO successfully deployed all contracts
[2019-02-21T09:45:47.871Z] INFO instance configuration file saved to D:\GitHub\ethereum-bridge\config\instance\oracle_instance_20190221T094547.json
Please add this line to your contract constructor:
OAR = OraclizeAddrResolverI(0xB69156280a1461003a079387c2B5B827B3f0fc53);
[2019-02-21T09:45:47.996Z] INFO Listening @ 0x251deddf98aca280a252d9e5f7b1b246bc3f66f7 (Oraclize Connector)
(Ctrl+C to exit)然后,使用不同的块链节点部署了以下契约:
pragma solidity ^0.5.4;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";
contract WolframAlpha is usingOraclize {
uint256 public beginningPastQuarter;
uint256 public beginningCurrentQuarter;
uint256 public payoutIntervalSeconds;
event newOraclizeQuery(string description);
event newTimestampMeasure(uint256 timestamp);
constructor() public {
payoutIntervalSeconds = 120;
beginningPastQuarter = 0;
beginningCurrentQuarter = 0;
OAR = OraclizeAddrResolverI(0xB69156280a1461003a079387c2B5B827B3f0fc53);
}
function stringToUint(string memory s) internal pure returns (uint) {
bytes memory b = bytes(s);
uint result = 0;
for (uint i = 0; i < b.length; i++) {
if (uint8(b[i]) >= 48 && uint8(b[i]) <= 57) {
result = result * 10 + (uint8(b[i]) - 48);
}
}
return result;
}
function __callback(bytes32 myid, string memory result) public {
if (msg.sender != oraclize_cbAddress()) revert();
uint256 t = stringToUint(result);
if (t-beginningCurrentQuarter >= payoutIntervalSeconds){
beginningPastQuarter = beginningCurrentQuarter;
beginningCurrentQuarter = t;
}
emit newTimestampMeasure(t);
}
function getUTCTimestamp(uint256 delay) public payable {
emit newOraclizeQuery("Oraclize query was sent, standing by for the answer..");
oraclize_query(delay,"WolframAlpha", "Timestamp now");
}
function pay(address receiver) public payable{
address(uint160(receiver)).send(msg.value);
}
function balance(address a) public returns(uint256 r){
return a.balance;
}
} 在部署合同之后,我已经向它发送了一些以太,以便它能够支付对Oracle的调用。
现在,如果我试图通过调用contractInstance.getUTCTimestamp(0,{from:eth.accounts[0],value:2222222,gas:5000000});来使用oracle,则会挖掘事务,但在ethereum-bridge控制台中什么也不会发生。
如果我检查交易及其收据,我会得到:
{
blockHash: "0x1c2d77b1e07d51894fdf0e2c3423d01538149d657b89e2568b5846d049452fda",
blockNumber: 5799,
contractAddress: null,
cumulativeGasUsed: 5000000,
from: "0xed2632f90f57dbbeb8e1d27277f4ef85a42851d2",
gasUsed: 5000000,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
root: "0x67de497db6efcd76b0f4aba9255cd7744430eb7aded05e86090952071c53e97a",
to: "0x217e753369532055c55c3588774275b8a58d5cf4",
transactionHash: "0x21fb0191b15e748f93e9884349f8066cd765c0948d8050d99ebe99d32eb9543b",
transactionIndex: 0
}{
blockHash: "0x1c2d77b1e07d51894fdf0e2c3423d01538149d657b89e2568b5846d049452fda",
blockNumber: 5799,
from: "0xed2632f90f57dbbeb8e1d27277f4ef85a42851d2",
gas: 5000000,
gasPrice: 20000000000,
hash: "0x21fb0191b15e748f93e9884349f8066cd765c0948d8050d99ebe99d32eb9543b",
input: "0xa01569d70000000000000000000000000000000000000000000000000000000000000000",
nonce: 1048,
r: "0x782a4d75ca59f5f0646733653474c6a42e26001513996c86635be1394d23d1c2",
s: "0x23a1346876b104f527e291f885bfb21fe406b17128a18ddb7167bdf8ce021555",
to: "0x217e753369532055c55c3588774275b8a58d5cf4",
transactionIndex: 0,
v: "0x41",
value: 2222222
}在我看来,交易使用的是所有的气体,即使我增加了天然气的价值,也会发生这种情况。奇怪的是,如果我在混合中测试这个合同的话,所用的气体总量将低于200000。有什么问题吗?
发布于 2019-05-02 09:07:16
在三天零一天的早晨,我遇到了同样的问题,感谢“days @gskapka”的帮助,我终于解决了这个问题,我需要集中我的思想来帮助那些可能遇到同样问题的人。-只支持dev geth专用网我很抱歉地说,oraclize(以太桥)只支持dev链,这意味着您应该使用geth启动您的专用网络
geth --networkid 15 --datadir ./data --rpc --rpcapi "admin,debug,eth,miner,net,personal,txpool,web3" --rpcport "8545" --rpccorsdomain "*" --dev或者简单地说,您可以使用
geth --dev --rpc consoleNon-dev专用网络上使用ethereum部署合同,您将得到如下所示的气体错误gas required exceeds allowance or always failing transaction in private network所以,所有的问题都是由Non-dev专用网引起的!祝你好运!
https://ethereum.stackexchange.com/questions/67414
复制相似问题