Альтернатива устаревшему коду примера Greeter?

После множества исследований оказалось, что пример кода Ethereum.org Greeter больше не работает. Вот ветка проблем GitHub: https://github.com/ethereum/go-ethereum/issues/3793 . Есть несколько предложений, одно из которых я упомяну ниже, хотя, как новичок, это все еще неясно.

Это, вероятно, первое место, где можно приземлиться, когда вы начинаете разрабатывать Ethereum, поэтому я (и многие другие) ищу четкий обходной путь.


Пример приветствия: https://www.ethereum.org/greeter

Запуск в консоли geth, вот неработающий код с ошибками:

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

Мне удалось скомпилировать GreeterSource с помощью 'solc', и я попробовал это предложение в ветке GitHub выше, хотя я не уверен, что это будет работать в консоли 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');

Даже после npm install fsя все еще получаю это:

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

Это должно обрабатывать следующий шаг в примере Greeter:

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

Опять же, будучи новичком в разработке Ethereum, я уверен, что через некоторое время я буду лучше понимать основы, хотя, учитывая, что этот пример взят с Ethereum.org, это должно быть проще! Спасибо!

PS> Также открыт для советов по общему лучшему пути разработки. Мне нравится начинать с командной строки, чтобы учиться, хотя, как только я ее получу, какие инструменты вы бы порекомендовали?

Ответы (3)

Geth и web3 lib не имеют возможности компиляции (например, web3.eth.compile.solidity()), начиная с версии 1.6.0.

Таким образом, вы можете попытаться развернуть контракт Greeter, скомпилировав его с помощью solc, а затем импортировав результаты в консоль geth. Вот полный пример такого подхода:

Как скомпилировать контракты Solidity с Geth v1.6?

В примере

loadScript("test.js")

используется вместо

var abi = fs.readFileSync('bin/Greeter.abi');
github.com/ethereum/go-ethereum/issues/14850 вот мое предложение по обновлению вики

Посмотрите в Mist. Это очень удобный инструмент с графическим интерфейсом, который имеет встроенный Solidityкомпилятор.

Начните с синхронизации в одной из тестовых сетей. Когда у вас будет тестовый эфир, вы можете развернуть контракты через меню. Затем просто скопируйте и вставьте код базового контракта приветствия в окно, чтобы скомпилировать и развернуть его.

Если вы хотите больше придерживаться командной строки и выполнять ее шаг за шагом, то вот более актуальная версия, чтобы ваш первый фрагмент кода заработал: https://alanbuxton.wordpress.com/2017/07/19/first -шаги-с-частными-сетями-эфириум-и-смарт-контрактами-на-ubuntu-16-04/