Сборка geth из исходников не делает Solidity доступной

Я сделал новую установку go-ethereum из исходного кода на Ubuntu и Fedora, запустил ее и ожидал, что Solidity будет доступен при выполнении eth.getCompilers(), но вместо этого я получаю пустой список.

Затем я явно установил Solidity, как описано в туториале , перезапустил geth, но это ничего не изменило. Я установил пакет, который будет доступен глобально, npm -gи я увижу, что пакет доступен, если попытаюсь импортировать его из сеанса узла консоли.

Я тоже не использую клиент С++, поэтому у меня нет установленного solcисполняемого файла, но я, кажется, понимаю, что он не нужен, если я выполняю npmустановку.

Что мне не хватает? Спасибо.

Возможный дубликат Link solc с проблемой geth
eth.compilers возвращает пустой список, даже если он установлен, см. тему чуть выше;)
просто для справки solc поставляется с клиентом cpp, а не с geth, но ваша установка с npm должна быть в порядке
Спасибо @ euri10, но я считаю, что это другая проблема. Мое лучшее предположение, учитывая, что nodeисполняемый файл может найти Solidity, заключается в том, что gethисполняемый файл не использует переменную среды NODE_PATH, поэтому не может найти установку Solidity npm.

Ответы (2)

eth.getCompilers()возвращает пустой список, даже если он установлен.

Можешь попробовать :

➜  ~ which solc
/usr/local/bin/solc

потом в гет

> admin.setSolc("/usr/local/bin/solc")

После вашего редактирования, если вы просто хотите использовать пакет npm, вы не сможете скомпилировать его в geth, но все же вы можете использовать его в скрипте, как описано в документации по пакету :

var solc = require('solc');
var input = "contract x { function g() {} }";
var output = solc.compile(input, 1); // 1 activates the optimiser
for (var contractName in output.contracts) {
    // code and ABI that are needed by web3
    console.log(contractName + ': ' + output.contracts[contractName].bytecode);
    console.log(contractName + '; ' + JSON.parse( output.contracts[contractName].interface));
}
Спасибо @ euri10, но разве вы только что не написали, что solcисполняемый файл является частью только клиентского дистрибутива C++? Нужно ли устанавливать клиенты go и c++, если я хочу использовать Solidity в gethконсоли? Кроме того, npmустановка не дает мне solcисполняемый файл, а только библиотеки, которые я могу использовать в node.
эффективно, если вы хотите попробовать исполняемый файл в geth, вам придется установить solc, который поставляется с пакетом c ++, извиняюсь, я не был достаточно ясен

Итак, похоже, что автономный компилятор Solidity solcдоступен только как часть инструментов командной строки Ethereum C++.

Это означает, что если вы хотите использовать solcизнутри geth, вам необходимо установить как инструменты Go, которые дают вам, так gethи инструменты C++, которые дают вам solc.

Мне это кажется очень странным, особенно если учесть, что инструменты C++ — это второстепенный проект, который пережил трудные времена и, по-видимому, перезагружается .

Итак, что сегодня предполагается использовать в качестве ведущего компилятора Solidity? Возможно консоль NodeJS .

Я очень внимательно слежу за развитием C++, и в настоящее время они находятся в процессе разбиения проекта C++ на отдельные форки для eth, ethminer, Solidity и т. д. Следите за обновлениями, хотя это займет пару недель, но вы быть в состоянии установить солидность только к тому времени.