Не удается выполнить функции записи в смарт-контракте - неверный адрес?

У меня есть следующий простой смарт-контракт ...

contract SimpleStorage {
    uint storedData;
    function set(uint x) {
        storedData = x;
    }
    function get() constant returns (uint retVal) {
        return storedData;
    }
}

Который я развертываю с помощью следующего кода в консоли geth ...

var source = "contract SimpleStorage...[code here]"
var compiled = web3.eth.compile.solidity(source)
var contract = web3.eth.contract(compiled.Coin.info.abiDefinition)
var storage = contract.new({from:web3.eth.accounts[0], data: compiled.SimpleStorage.code, gas: 300000})

После того, как контракт был заминирован, я могу получить доступ к функциям контракта через объект хранения. Я предположил, что могу просто позвонить ...

storage.set(10)

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

Я уверен, что это потому, что я пытаюсь выполнить операцию записи во внутреннем состоянии контракта (операции чтения работают нормально).

Мне нужно отправить транзакцию, которая закроет новое состояние контракта, однако я не могу понять, как это сделать.

Как выполнять транзакции записи в смарт-контрактах?

23 голоса | спросил glider 16 MaramWed, 16 Mar 2016 02:03:47 +03002016-03-16T02:03:47+03:0002 2016, 02:03:47

1 ответ


25

Попробуйте установить

  

web3.eth.defaultAccount = eth.accounts [0]

Похоже, что ваша транзакция не знает, какую учетную запись использовать для подписи вызова. Любой вызов, который изменяет состояние контракта (операция записи), требует подписанной транзакции.

Альтернативным подходом было бы передать «объект транзакции» в качестве последнего аргумента метода контракта:

storage.set(10,{from: accounts[0]});

Изменить 1:

Когда я выбрал учетную запись «from», я получил следующую ошибку: «Необходимость аутентификации: пароль или разблокировка». Поэтому мне нужно было запустить personal.unlockAccount (eth.accounts [0], «password», 15000). Вы можете прочитать об этом на «Необходимость аутентификации: пароль или разблокировка» Ошибка при попытке вызова метода интеллектуального контракта через web3 .

ответил dbryson 16 MaramWed, 16 Mar 2016 05:14:58 +03002016-03-16T05:14:58+03:0005 2016, 05:14:58

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

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

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