когда я использую интерфейс web3 для входа в сообщения, он говорит мне, что учетная запись должна быть разблокирована, как я могу управлять этим с помощью geth и что именно означает разблокировка?
По умолчанию ваши учетные записи в Geth «заблокированы», что означает, что вы не можете отправлять транзакции с них. Вам нужно разблокировать учетную запись, чтобы отправлять транзакции с нее через Geth напрямую или через RPC (хотя web3 этого не поддерживает). Чтобы разблокировать учетную запись, вам необходимо указать пароль, который используется для расшифровки закрытого ключа, связанного с вашей учетной записью, что позволяет вам подписывать транзакции.
С учетом сказанного, как вы разблокируете учетную запись? Есть несколько разных способов сделать это, которые выделены в документации Geth . Предоставлю обзор:
Разблокируйте учетную запись при запуске Geth. Параметр пароля является необязательным. Если вы его не предоставите, вам будет предложено ввести пароль.
geth --unlock <YOUR_ACCOUNT_ADDRESS> --password <YOUR_PASSWORD>
Разблокируйте учетную запись с помощью интерактивной консоли Javascript Geth. Опять же, пароль не является обязательным. Если вы его не укажете, вам будет предложено ввести его. Обратите внимание, что в более ранних версиях Geth указание пароля в качестве параметра приводило к тому, что пароль отображался в журнале Geth, что может быть проблемой безопасности. .
personal.unlockAccount(address, "password")
geth --unlock
это способ сделать это, я думаю web3
, все ваши входные данные будут регистрироваться в журналеgeth --unlock 0x3b3F14690C8Fb8b1B333Ff38961bdEEa658a3873
не то чтобы это запрашивает пароль, и запрос пароля может быть скрыт где-то в массе вывода во время запуска geth, например Unlocking account 0xb2... | Attempt 1/3 Passphrase: I0522 12:30:46.360237 node/node.go:298] IPC endpoint opened: /home/someone/.ethereum/geth.ipc I0522 12:30:46.836509 p2p/nat/nat.go:111] mapped network port tcp:30303 -> 30303 (ethereum p2p) using UPNP IGDv1-IP11
(попробуйте найти слово Passphrase
в приведенном выше выводе;) )geth unlock 0x4ae4ddbf073ff57e5861490d72f9177d9039428a,0x4ae4ddbf073ff57e5861490d72f9177d9039428b,0x4ae4ddbf073ff57e5861490d72f9177d9039428c
--password <passwordFile> . passwordFile должен содержать пароль, по одному паролю в каждой строке.personal.unlockAccount(address, "password", 0)
оставить разблокированным, пока вы не заблокируете его вручную. personal.unlockAccount(address, "password", 300)
для автоматической блокировки через 300 секунд. Вы, конечно, можете добавить пароль, но это не рекомендуется. (И не оставлять его разблокированным на неопределенный срок.) personal.lockAccount()
В наши дни обычно работает блокировка вручную.personal.unlockAccount("address", undefined, 300)
--allow-insecure-unlock
Просто чтобы добавить к отличному принятому ответу.
Вы также можете разблокировать учетную запись напрямую из Web3:
web3.personal.unlockAccount('0xE0ca...c1f7', 'mypass')
И заблокируйте его обратно:
web3.personal.lockAccount('0xE0ca...c1f7')
Для более подробной информации обратитесь к web3-eth-personal
модулю.
что именно означает разблокировка?
Реализация узла Geth содержит встроенное управление учетными записями, то есть поддерживает закрытый ключ учетной записи , который хранится на диске в зашифрованном виде. Разблокировка учетной записи означает расшифровку ее закрытого ключа и сохранение его в памяти (он никогда не хранится в расшифрованном виде на диске).
⚠ Это означает, что вы должны проявлять особую осторожность, чтобы никому не позволять доступ к вашему узлу Geth через HTTP-RPC, WS-RPC или IPC, потому что эти интерфейсы позволяют передавать эфир с любого разблокированного аккаунта ! ⚠
web3.personal.unlockAccount('prviatekey');
должен работать без параметра адреса
Хасиб Ахмад