Alternative zum veralteten Greeter-Beispielcode?

Nach vielen Recherchen scheint der Ethereum.org-Greeter-Beispielcode nicht mehr zu funktionieren. Hier ist der Thread zu GitHub-Problemen: https://github.com/ethereum/go-ethereum/issues/3793 . Es gibt einige Vorschläge, einen werde ich unten erwähnen, obwohl er als Noob noch unklar ist.

Dies ist wahrscheinlich der erste Ort, an dem man landen kann, wenn man mit der Entwicklung von Ethereum beginnt, also suche ich (und viele andere da draußen) nach einer klaren Problemumgehung.


Greeter-Beispiel: https://www.ethereum.org/greeter

Hier ist der fehlerhafte Code mit Fehlern, der in der Geth-Konsole ausgeführt wird:

eth.getCompilers()

Error: The method eth_getCompilers does not exist/is not available
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at <anonymous>:1:1


var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }' <-- obviously no error here

var greeterCompiled = web3.eth.compile.solidity(greeterSource)*

Error: The method eth_compileSolidity does not exist/is not available
    at web3.js:3104:20
    at web3.js:6191:15
    at web3.js:5004:36
    at <anonymous>:1:23

Ich konnte GreeterSource mit ‚solc‘ kompilieren, und ich habe diesen Vorschlag im obigen GitHub-Thread ausprobiert, obwohl ich nicht sicher bin, ob dies in der Geth-Konsole funktionieren wird:

var fs = require('fs');
var exec = require('child_process').execSync;

exec('solc --bin --abi --optimize -o bin greeterSource.sol');

var abi = fs.readFileSync('bin/Greeter.abi');
var compiled = '0x' + fs.readFileSync('bin/Greeter.bin');

Auch danach npm install fsbekomme ich immer noch das:

Error: Cannot find module 'fs'
    at s (web3.js:1:160)
    at s (web3.js:1:122)
    at <anonymous>:1:10

Dies sollte den nächsten Schritt im Greeter-Beispiel behandeln:

var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);

Nochmals, ich bin neu in der Ethereum-Entwicklung und bin mir sicher, dass ich nach einer Weile die Grundlagen besser verstehen werde, obwohl dies in Anbetracht der Tatsache, dass dieses Beispiel von Ethereum.org stammt, einfacher sein sollte! Vielen Dank!

PS> Auch offen für Ratschläge zu einem insgesamt besseren Entwicklungspfad. Ich beginne gerne mit der Befehlszeile, um zu lernen, aber wenn ich es habe, welche Tools würden Sie empfehlen?

Antworten (3)

Geth und web3 lib haben seit Version 1.6.0 keine Kompilierfähigkeiten (wie web3.eth.compile.solidity()).

Sie können also versuchen, den Greeter-Vertrag bereitzustellen, indem Sie ihn mit solc kompilieren und dann die Ergebnisse in die Geth-Konsole importieren. Hier ist ein vollständiges Beispiel für einen solchen Ansatz:

Wie kompiliere ich Solidity-Verträge mit Geth v1.6?

Zum Beispiel

loadScript("test.js")

verwendet statt

var abi = fs.readFileSync('bin/Greeter.abi');
github.com/ethereum/go-ethereum/issues/14850 Hier ist mein Vorschlag zum Aktualisieren von Wiki

Schau rein Mist. Es ist ein super bequemes GUI-Tool mit integriertem SolidityCompiler.

Beginnen Sie mit der Synchronisierung auf einem der Testnetze. Sobald Sie Ether getestet haben, können Sie Verträge über das Menü bereitstellen. Kopieren Sie dann einfach Ihren grundlegenden Begrüßungsvertragscode und fügen Sie ihn in das Fenster ein, um ihn zu kompilieren und bereitzustellen.

Wenn Sie sich mehr an die Befehlszeile halten und Schritt für Schritt durchgehen möchten, finden Sie hier eine aktuellere Version, um Ihr erstes Stück Code zum Laufen zu bringen: https://alanbuxton.wordpress.com/2017/07/19/first -schritte-mit-ethereum-private-netzwerke-und-intelligente-verträge-auf-ubuntu-16-04/