В течение последних 7 дней я пытался заключить контракт с приветствующим, я прошел через 4 разных физических компьютера в 2 разных местах и пробовал несколько разных способов в 3 разных операционных системах.
Я предпринял все вышеперечисленные попытки с клиентом geth и c++ eth, я также предпринял попытки с онлайн-компилятором и миксом.
Через 7 дней я еще не смог создать ни одного контракта, я пытаюсь перейти на страницу https://www.ethereum.org/greeter , чтобы перейти к другим учебным упражнениям, чтобы выполнить упражнения на эфириуме. Страница .org.
Я следую инструкциям на странице дословно, строка за строкой, и напрямую копирую то, что мне велено копировать, и мне удалось дойти до компиляции контракта и его развертывания. Он запрашивает у меня пароль моей учетной записи, и я ввожу его, который затем завершается. В моем аккаунте есть Эфириум.
Но проблема в том, что в инструкциях говорится, что переменная приветствия должна содержать адрес, который вы можете отслеживать в сети, поскольку он добывается или завершается, и он действительно содержит адрес, но адрес не определен, он остается неопределенным на неопределенный срок. Также с моего счета никогда не списывается валюта, стоимость счета остается прежней. Конечно это означает
eth.getCode(greeter.address)
Также возникают ошибки, поскольку он не может получить код по неопределенному адресу. Это сбивает меня с толку, и до сих пор я не смог найти никакой помощи в этом. Я просто предположил, что это программная ошибка, и что, вероятно, не так много людей создавали контракты, но потом я увидел видео на youtube, в котором говорилось, что было около 500 000 контрактов, и кажется, что сообщество очень активно занимается дизайном контрактов, так что я мог упустить это вызывает эту ошибку.
Если вам интересно, моя последняя попытка была на Mac OSX с клиентом geth, но у меня есть доступ к Windows и Linux, а также к eth-клиенту c++, если это необходимо.
Я думаю, вы хотели сказать, что в вашем аккаунте есть эфир, а не эфириум.
Мое первое предположение, что у вас недостаточно эфира. Пытаться
web3.fromWei(eth.getBalance(eth.coinbase),'ether')
Вам может понадобиться что-то вроде 0,001 эфира (просто предположение) для успешного развертывания вашего контракта.
При развертывании вы получите хэш транзакции, который намного длиннее адреса эфириума. Возьми этот хэш и беги
eth.getTransactionReceipt("0x00000.......")
Замените 0x00000........ хэшем вашей транзакции. В выводе ищите адрес контракта и gasUsed. Если адреса контракта нет, скорее всего, у вас не хватило средств для развертывания контракта.
Попробуйте эту модифицированную версию примера:
var _greeting = "Hello World!"
var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: greeterCompiled.greeter.code, gas: 300000}, function(e, contract){
if(!e) {
if(!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
} else {
console.log("Error!!");
console.log(e);
}
})
> greeter { address: undefined }
Что-то не работает на этапеgreeterContract.new.
1) Убедитесь, что единицы, на которые вы смотрите, на самом деле являются Эфиром: web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
.
2) Также убедитесь, что в контракте используется учетная запись с эфиром ( eth.accounts[0]
).
3) Убедитесь, что вы вводите правильный пароль (и пароль правильной учетной записи).
Любая из этих ошибок даст результаты, которые вы испытываете.
web3.fromWei(eth.getBalance(eth.accounts[1]),'ether')
показывает 0.005
. Я использовал personal.unlockAccount со второй учетной записью и паролем, чтобы дважды проверить правильный пароль и вернуть true. Я гарантирую использование GreeterContract.new второй учетной записи from:web3.eth.accounts[1]
. После всего этого он по-прежнему возвращает объект с расширением address: undefined
. Пока что, спустя примерно 2 месяца, я все еще жду выпуска своего первого контракта. У тебя есть другие идеи?Ты мой?
Если вы используете частную сеть, некоторые люди также забывают сделать еще одну вещь — майнить в сети для обработки транзакции.
Так что, если вы geth
простоminer.start()
Я только что добавил пошаговый пример запуска примера приветствия, описанного в разделе Развертывание контракта Greeter через интерфейс командной строки geth, который не регистрируется в моей частной цепочке блоков .
В этом руководстве представлены команды для запуска и показаны ожидаемые результаты на каждом этапе, чтобы вы могли убедиться, что запускаете пример Greeter правильно.
Тьяден Хесс
web3.fromWei(eth.getBalance(eth.accounts[0]))
должен возвращать более 0,002 или около того.ТМОТТМ