I have a private network with a few nodes and I have installed ethereum-bridge to deploy an Oracle.
One of my blockchain nodes is used by ethereum-bridge to deploy the oracle. The node is started with the command
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
while ethereum-bridge
:
ethereum-bridge -H localhost:47000 -a 0
These are the logs on the ethereum-bridge
console
[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)
Then, using a different blockchain node I have deployed the following contract:
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;
}
}
After deploying the contract, I have sent some ether to it so it can pay for the calls to the Oracle.
Now if I try to use the oracle by calling contractInstance.getUTCTimestamp(0,{from:eth.accounts[0],value:2222222,gas:5000000});
the transaction is mined but nothing happens in the ethereum-bridge
console.
If I inspect the transaction and its receipts I get:
{
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
}
It seems to me that the transaction is using all gas and that happens even if I increase the gas value. The weird thing is that if I test this contract in remix the total gas used is below 200000. What could be the problem?
0x8668dc605fe8d721dbb96378fd8155c621bea37d
while the Oraclize-using ones0xed2632f90f57dbbeb8e1d27277f4ef85a42851d2