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

Я попытался скомпилировать следующий контракт в geth:

pragma solidity ^0.4.8;

contract Test {
    uint256 public value;

    function Test() {
        value = 123;    
    }
}

, используя следующие команды в сплющенном источнике:

> var testSource = "pragma solidity ^0.4.8; contract Test { uint256 public value; function Test() { value = 123; } }";
undefined
> var testCompiled = web3.eth.compile.solidity(testSource);
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:20

Как описано в eth_compilers, eth_compileSolidity ушли в go-ethereum 1.6.0 # 3793 , возможность компиляции источника Solidity была удалена из geth.

Как я могу скомпилировать исходный код Solidity?

21 голос | спросил The Officious BokkyPooBah 23 AMpSun, 23 Apr 2017 11:02:20 +030002Sunday 2017, 11:02:20

6 ответов


29

Альтернатива 1 - Используйте Remix для компиляции, затем скопируйте-вставить для развертывания

Используйте Remix из https://ethereum.github.io/browser-solidity :

 введите описание изображения здесь>> </a> </p>

<p> Скопируйте инструкции развертывания Web3 со страницы Remix: </p>

<pre><code>var untitled_testContract = web3.eth.contract ([{

И вставьте его в консоль var untitled_testContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]); var untitled_test = untitled_testContract.new( { from: web3.eth.accounts[0], data: '0x60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820a4fac284b98d43538f802082b0db8c67ddd6d72df4e8d9fbccb4cec0e52ea0df0029', gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } }) с незаблокированной учетной записью:

geth console



Альтернатива 2 - Используйте компилятор Solidity (Linux и OS /X, возможно, Windows с Cygwin)

> personal.unlockAccount(eth.accounts[0], "{top secret password}");
true
> var untitled_testContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]);
"0xe22dc29e3e05d3206d9636ae7cba87a2827e7b3ef28c6e8e6d2ad49a14ba3ce9"
var untitled_test = untitled_testContract.new(
   {
     from: web3.eth.accounts[0],
     data: '0x60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820a4fac284b98d43538f802082b0db8c67ddd6d72df4e8d9fbccb4cec0e52ea0df0029',
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

Скомпилируйте Test.sol в формате .json, присвойте данные переменной JavaScript и отправьте вывод в файл:

$ more Test.sol 
pragma solidity ^0.4.8;

contract Test {
    uint256 public value;

    function Test() {
        value = 123;    
    }
}

В $ echo "var testOutput=`solc --optimize --combined-json abi,bin,interface Test.sol`" > test.js $ cat test.js var testOutput={"contracts":{"Test.sol:Test":{"abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"}]","bin":"60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820d0e71d151634ac6ae7626860a17881104022e5cd6d3a088eb8f941d9aa8e3bd20029"}},"version":"0.4.9+commit.364da425.Darwin.appleclang"} загрузите содержимое test.js:

geth

ответил The Officious BokkyPooBah 23 AMpSun, 23 Apr 2017 11:15:58 +030015Sunday 2017, 11:15:58
5

Недавно я столкнулся с той же проблемой. Существует множество способов обхода проблемы, но вот метод, который я использовал. Это не обязательно лучший подход.

Чтобы создать байт-код:

> solc --bin soliditySource.sol

Чтобы сгенерировать ABI:

> solc --abi soliditySource.sol

Затем, с вашим новым кодом bytecode и abi, в geth 1.6:

 var abi = <abi from solc>;
 var myContract = eth.contract(abi); 
 var bytecode = '0x' + <bytecode from solc>;
 var txDeploy = {from:eth.coinbase, data: bytecode, gas: 1000000}; 
 var myContractPartialInstance = myContract.new(txDeploy); 

 // Mine block containing transaction...

 var myContractInstance = myContract.at(myContractPartialInstance.address);
ответил Max 23 AMpSun, 23 Apr 2017 11:43:30 +030043Sunday 2017, 11:43:30
3

Возможно, вы рассмотрите возможность загрузки рамки truffle. С картой трюфеля я могу скомпилировать, но также легко хранить мои файлы (это делает это для меня).

Как только вы загрузили трюфель truffle

truffle compile

вы можете легко скомпилировать, используя команду ----+:=4=:+----.

ответил Jossie Calderon 13 J0000006Europe/Moscow 2017, 12:35:26
2

После того, как я несколько раз набросился на устаревшие документы, я сделал здесь суперпростую версию, которая могла бы помочь: https://alanbuxton.wordpress.com/2017/07/19 /первоклассников шаги-с-Эфириума-частного-сети-и-смарт-контракты-на-убунту-16-04 /

ответил Alan Buxton 21 J000000Friday17 2017, 16:31:54
0

Поскольку geth не одобрял интерфейс компилятора командной строки после версии 1.6, я долгое время был озадачен. Я написал простой учебник, чтобы описать, как скомпилировать и развернуть контракт после geth1.6. Надеюсь, этот учебник поможет вам. контракт Depoly в частной цепочке

ответил hellspawn 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 29 Sep 2017 14:34:35 +0300 2017, 14:34:35
0

Создание интеллектуального контракта с использованием командной строки https://www.ethereum.org/greeter

ответил linuxhsj 10 PMpTue, 10 Apr 2018 13:56:24 +030056Tuesday 2018, 13:56:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132