«Требуется аутентификация: пароль или разблокировка» Ошибка при попытке вызвать метод смарт-контракта через web3

Я пытаюсь вызвать метод смарт-контракта (развернутый на удаленной учетной записи ethereum) из моего DAPP nodejs и получаю следующую ошибку:

Error: authentication needed: password or unlock
    at Object.InvalidResponse (D:\dapp\node_modules\web3\lib\web3\errors.js:38:16)

Мой код DAPP web3 выглядит так:

var ABI = [abiinterface];
var contract = web3.eth.contract(ABI);
var contractInstance = contract.at(accAddress);

Я запустил код разблокировки на моей консоли geth, используя - personal.unlockAccount("address"), который вернул true, но по-прежнему получаю ошибку «требуется аутентификация: пароль или разблокировка» в dapp. Любая помощь или указатели очень ценятся. Спасибо.

У меня такая же проблема. Вы нашли решение?
Это на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос . Вы также можете добавить вознаграждение , чтобы привлечь больше внимания к этому вопросу, когда у вас будет достаточно репутации . - Из обзора
Я уже создал новый «Задать вопрос» для своей проблемы. Просто эта проблема как мина. И я не нашел решение проблемы. Мой вопрос
Это не дает ответа на вопрос. Когда у вас будет достаточно репутации , вы сможете комментировать любой пост ; вместо этого предоставьте ответы, которые не требуют разъяснений от спрашивающего . - Из обзора

Ответы (3)

Во-первых, убедитесь, что у вас есть учетная запись.

web3.personal.listAccounts

Если вы получите []...

web3.personal.newAccount()

Попробуй снова.

Затем ...

web3.personal.unlockAccount(web3.personal.listAccounts[0],"<password>", 15000)

что означает разблокировать первую учетную запись с этим паролем на 15 000 секунд (не беспокойте меня некоторое время.)

Сторона DAPP должна перестать жаловаться на блокировку.

Надеюсь, это поможет.

Новая учетная запись уже существует, и мне удалось разблокировать ее с помощью консоли geth. Все еще получаю ошибку на стороне DAPP.
использовать MetaMask и выбрать разблокированный аккаунт?

Я сталкивался с подобной проблемой ранее. Убедитесь, что позаботились о следующих 3 вещах:

  1. Используемая вами учетная запись является первой в списке учетных записей. (Или, если вы используете какую-либо другую учетную запись, убедитесь, что вы внесли соответствующие изменения в код nodejs.)
  2. Убедитесь, что вы разблокировали эту же учетную запись, используя web3.personal.unlockAccount(web3.personal.listAccounts[0],"MyPassword", 15000)В моем случае это была первая учетная запись.
  3. Аккаунт содержит некоторое количество эфира.

Эта ошибка связана с разблокировкой учетной записи на вашем узле ethereum. Трудность заключается в том, чтобы обнаружить скрытую причину. Некоторые ошибки в web3js могут вызвать ту же проблему:

Например

web3.eth.personal.unlockAccount(_senderAddress, password, 0).then(
    ...                   
     )

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

web3.eth.personal.unlockAccount(_senderAddress, password, 0).then(
                    isunlocked => {
        }
})