Ungültige JSON-RPC-Antwort

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.

Antworten (2)

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!

Danke für die Bemühung! Sind Sie sich über die von Ihnen erwähnte Einschränkung der GUI-Ganache sicher? Ich habe nach Informationen dazu gesucht, aber nichts passendes gefunden. Ich möchte ganz sicher sein, bevor ich die Zeit mit der Einrichtung verbringe. Ich bin auf Windows und die Installation von nvm ist etwas kniffliger.
Dies wurde aus der Readme in meinem privaten Repo entnommen. Keine Sorge, ich habe das alles nicht nur für dich geschrieben ;)
Ich erinnere mich nicht wirklich, aber ich denke, Sie müssen das Konto "entsperren", damit die Brücke Gas akzeptiert und funktioniert. GUI-Ganache hat keine Entsperrfunktion.
Ich habe alle Schritte befolgt, aber ich bekomme kein Zurück, also ist es definitiv ein Fortschritt. Ich denke, es hat etwas mit dem Gaslimit zu tun, also werde ich damit herumspielen. Vielen Dank!
Nebenbei bemerkt, kennen Sie ein gutes Tutorial für Ganache-Cli, ich konnte online nichts Nützliches finden. Ich kann nicht herausfinden, wie ich den Kontostand überprüfen kann.
Die Readme-Datei im Github-Repo ist wahrscheinlich eine der besseren Ressourcen da draußen: github.com/trufflesuite/ganache-cli Zum Überprüfen von Guthaben könnten Sie einen Trüffeltest schreiben, der das Guthaben ermittelt. Ich denke, Sie können das Konto auch zu Metamask hinzufügen und dort den Kontostand anzeigen.
Ich habe es mit dem Ethereum-Preis im USD-Beispiel zum Laufen gebracht, habe aber immer noch Probleme mit der Zufallszahlenabfrage. Danke aber für deine Hilfe!

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.

https://github.com/oraclize/ethereum-bridge

Ich habe vergessen zu erwähnen, dass ich das auch eingerichtet habe, damit begonnen habenode bridge -H localhost:7545 -a 1