¿Alternativa al código de ejemplo obsoleto de Greeter?

Después de mucha investigación, parece que el código de ejemplo de Ethereum.org Greeter ya no funciona. Aquí está el hilo de problemas de GitHub: https://github.com/ethereum/go-ethereum/issues/3793 . Hay algunas sugerencias, una que mencionaré a continuación, aunque, como novato, todavía no está claro.

Es probable que este sea el primer lugar para aterrizar al comenzar a desarrollar Ethereum, por lo que yo (y muchos otros) estamos buscando una solución clara.


Ejemplo de saludo: https://www.ethereum.org/greeter

Ejecutándose en la consola geth, aquí está el código roto con errores:

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

HE podido compilar greetingerSource con 'solc', y probé esta sugerencia en el hilo de GitHub anterior, aunque no estoy seguro de que esto funcione dentro de la consola geth:

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');

Incluso después npm install fsde , todavía me sale esto:

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

Esto debería manejar el siguiente paso en el ejemplo de Greeter:

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

Nuevamente, soy nuevo en el desarrollo de Ethereum, estoy seguro de que después de un tiempo tendré una mejor comprensión de los fundamentos, aunque teniendo en cuenta que este ejemplo proviene de Ethereum.org, ¡debería ser más fácil! ¡Gracias!

PD> También abierto para recibir consejos sobre una mejor ruta de desarrollo general. Me gusta comenzar con la línea de comandos para aprender, aunque una vez que lo tenga, ¿qué herramientas recomendaría?

Respuestas (3)

Geth y web3 lib no tienen capacidades de compilación (como web3.eth.compile.solidity()) desde la versión 1.6.0

Entonces, la forma en que puede intentar implementar el contrato de Greeter es compilarlo con solc y luego importar los resultados a la consola geth. Aquí hay un ejemplo completo de tal enfoque:

¿Cómo compilar contratos de Solidity con Geth v1.6?

Por ejemplo

loadScript("test.js")

utilizado en lugar de

var abi = fs.readFileSync('bin/Greeter.abi');
github.com/ethereum/go-ethereum/issues/14850 aquí está mi sugerencia sobre la actualización de wiki

mira Mistdentro Es una herramienta GUI súper conveniente que tiene un Soliditycompilador incorporado.

Comience sincronizando en una de las redes de prueba. Una vez que haya probado ether, puede implementar contratos a través del menú. Luego simplemente copie y pegue su código básico de contrato de bienvenida en la ventana para compilarlo e implementarlo.

Si desea apegarse más a la línea de comandos y seguir paso a paso, aquí hay una versión más actualizada para que su primer código funcione: https://alanbuxton.wordpress.com/2017/07/19/first -pasos-con-ethereum-redes-privadas-y-contratos-inteligentes-en-ubuntu-16-04/