Ich versuche, meinen Smart Contract mit Oraclize zu verdrahten, um Zufallszahlen zu erhalten. Hier ist mein Vertragscode:
pragma solidity ^0.4.2;
import "./usingOraclize.sol";
contract Blackjack is usingOraclize{
uint public random;
event Paid(address indexed _from, uint _value);
function() external payable {
Paid(msg.sender, msg.value);
}
function Blackjack() public {
OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475);
}
function getRandom() public constant {
oraclize_newRandomDSQuery(0, 4, 200000);
}
function __callback(bytes32 _queryId, string _result, bytes _proof) public{
random = uint(keccak256(_result)) % 52 + 1;
}
}
Ich verwende Ganache als private Blockchain (GUI).
Der Aufruf von getRandom() verursacht den folgenden Stack-Trace in der Truffle-Konsole
Error: Invalid JSON RPC response: {"id":12,"jsonrpc":"2.0"}
at XMLHttpRequest._onHttpResponseEnd (C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:509:1)
at XMLHttpRequest._setReadyState (C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:354:1)
at XMLHttpRequestEventTarget.dispatchEvent (C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\xhr2\lib\xhr2.js:64:1)
at XMLHttpRequest.request.onreadystatechange (C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\httpprovider.js:128:1)
at C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\truffle-provider\wrapper.js:134:1
at C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\requestmanager.js:86:1
at Object.InvalidResponse (C:\Users\adimi\AppData\Roaming\npm\node_modules\truffle\build\webpack:\~\web3\lib\web3\errors.js:38:1)
Ich habe auch 3 Ether zum Vertrag geschickt, um den Oraclize-Anruf abzudecken.
Bearbeiten: Ich habe Ethereum-Bridge eingerichtet und es läuft, wenn ich den Fehler erhalte.
Dieser Prozess hat bei mir unter macOS funktioniert:
Installieren Sie Truffle global auf Ihrem Computer.
$ sudo npm install -g truffle
Installieren Sie ganache-cli auf Ihrem Computer. Die GUI-Version von Ganache wird für unsere Zwecke leider nicht mehr funktionieren, da ihr eine Funktion fehlt, die für Ethereum Bridge (Konten freischalten) notwendig ist.
$ sudo npm install -g ganache-cli
Klonen Sie Ihr Repo (falls noch nicht geschehen) und installieren Sie Knotenpakete.
$ git clone <repo>
$ cd <repo>
$ npm install
Wir müssen die Ethereum Bridge installieren, mit der wir Oraclize von unserer Testumgebung aus anrufen können.
Installieren Sie die Ethereum-Bridge. Tun Sie dies nicht im Verzeichnis [repo].
$ git clone https://github.com/oraclize/ethereum-bridge.git
$ cd ethereum-bridge
$ npm install
Ethereum Bridge (wird bald durch Stargate ersetzt) benötigt eine ältere Version von node.
Installieren Sie den Node Version Manager (nvm) anhand der Anweisungen auf dieser Seite: https://github.com/creationix/nvm/blob/master/README.md
Stellen Sie sicher, dass die neueste Version von node installiert ist.
$ nvm install node
Starten Sie ganache-cli mit der neuesten Knotenversion (9.x zum Zeitpunkt dieses Schreibens).
$ nvm use node
$ ganache-cli --unlock 0 --unlock 1 --deterministic --mnemonic "candy maple cake sugar pudding cream honey rich smooth crumble sweet treat"
Öffnen Sie ein neues Terminalfenster, wechseln Sie in Ihr Ethereum Bridge-Verzeichnis und starten Sie Ethereum Bridge mit Knoten 6.9.1. Es dauert eine Weile, bis der Start beendet ist.
$ cd etherem-bridge
$ nvm use 6.9.1
$ node bridge -H 127.0.0.1:8545 -a 1 --dev
Öffnen Sie ein drittes Terminalfenster und führen Sie die Truffle-Tests im Verzeichnis [repo] mit Knoten 9.x aus
$ cd <repo>
$ nvm use node
$ truffle test
Interagieren Sie mit der Anwendung über die Truffle-Konsole oder über eine Front-End-Anwendung.
$ cd <repo>
$ nvm use node
$ truffle deploy
Obwohl ich getRandom() nie aufgerufen habe. Der URL-Aufruf ging für mich erfolgreich durch. Viel Glück!
Sie müssen die Ethereum Bridge zu Ihrem lokalen Stack hinzufügen. Ohne sie wird Ganache keine Möglichkeit haben, mit dem Oraclize-Vertrag zu sprechen.
node bridge -H localhost:7545 -a 1
DiscoTaube
Jazzloch
Jazzloch
DiscoTaube
DiscoTaube
Jazzloch
DiscoTaube