После множества исследований оказалось, что пример кода 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> Также открыт для советов по общему лучшему пути разработки. Мне нравится начинать с командной строки, чтобы учиться, хотя, как только я ее получу, какие инструменты вы бы порекомендовали?
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');
Посмотрите в Mist
. Это очень удобный инструмент с графическим интерфейсом, который имеет встроенный Solidity
компилятор.
Начните с синхронизации в одной из тестовых сетей. Когда у вас будет тестовый эфир, вы можете развернуть контракты через меню. Затем просто скопируйте и вставьте код базового контракта приветствия в окно, чтобы скомпилировать и развернуть его.
Если вы хотите больше придерживаться командной строки и выполнять ее шаг за шагом, то вот более актуальная версия, чтобы ваш первый фрагмент кода заработал: https://alanbuxton.wordpress.com/2017/07/19/first -шаги-с-частными-сетями-эфириум-и-смарт-контрактами-на-ubuntu-16-04/
Артем С.