Как скомпилировать контракт, когда eth.getCompilers() был удален с версии 1.6?

Отказ от ответственности: это самостоятельный пост вопросов и ответов, чтобы помочь другим решить проблему, с которой я столкнулся. Обратите внимание, что это возможное решение, которое работает для меня, возможно, есть лучший способ решить проблему.

Проблема:

Не могу скомпилировать контракт в консоли geth начиная с версии 1.6.0 ссылка на трекер ошибок

Ответы (1)

Решение:

Скомпилируйте контракт на своей машине, прежде чем заходить в geth. Переместите свой контракт в каталог данных, который вы используете для сопоставления вашего узла. Загрузите свой контракт из консоли geth

  1. Скомпилируйте контракт на своей машине, прежде чем заходить в консоль

    $ коснитесь Contract.sol

    $ echo "var contractOutput= solc --optimize --combined-json abi,bin,interface Contract.sol" > contract.js (обратите внимание на кавычки)

  2. Переместите контракт в каталог данных, который вы используете для запуска узла (кстати, я использую докер для его запуска)

    $ cp contract.js ~/Workspace/Ether/datadir/contracts

  3. Запустите свой узел через докер и предоставьте сопоставление с вашим каталогом данных.

    docker run -it -p 8545:8545 -p 30303:30303 -v /home/user/Workspace/Ether/datadir:/root/datadir user/my-ether-node /bin/bash

  4. Запустить консоль

    geth --datadir /root/datadir/ --networkid 1234 --port 30303 --rpcport 8545 --rpc --rpcapi eth,web3,personal,net --rpcaddr 0.0.0.0 console

  5. Загрузить контракт

    loadScript('/root/datadir/contracts/contract.js')

Ссылка на руководство, которое должно помочь вам с начальной настройкой эфириума и началом работы с узлами.

Как мне вызвать функцию из contract.js в консоли Geth? Мой Contract.js выглядит так: var contractOutput = {"contracts" : {"contracts/Contract.sol:TestContract" : {"abi": ..., "bin": ...}, ...}}
Прошел почти год с момента моего последнего проекта на эфириуме. Я проверил свои заметки, вот пример через Truffle (это предпочтительный способ): Test.deployed().then(instance => instance.sell(accounts[1], {from: account[0], value: web3. toWei(1, 'ether') } )) Если вы хотите сделать это на низком уровне, обратитесь к этому сообщению в блоге medium.com/@gus_tavo_guim/…