Есть ли в Web3.js функциональные возможности для создания новых учетных записей и разблокировки учетной записи на определенный период времени для серии транзакций?

Я хочу создать новые учетные записи через свой веб-интерфейс Dapp и разблокировать конкретную учетную запись, чтобы можно было обрабатывать транзакции. Я не видел этого в документации по web3.js, поэтому интересно, есть ли это в дорожной карте web3.js?

Ответы (4)

Обновленный ответ от 4 января 2018 г.

Web3.js имеет полноценную поддержку управления учетными записями , начиная с версии 1.0.0, включая создание новой учетной записи . Версия 1.0.0 все еще находится в стадии бета-тестирования, но близка к производству и уже является версией, выпущенной через npm. Спасибо Тому Айвзу за указание на это.

Полный пример взят из документации web3.js:

web3.eth.accounts.create();
> {
    address: "0xb8CE9ab6943e0eCED004cDe8e3bBed6568B2Fa01",
    privateKey: "0x348ce564d427a3311b6536bbcff9390d69395b06ed6c486954e971d960fe8709",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

web3.eth.accounts.create('2435@#@#@±±±±!!!!678543213456764321§34567543213456785432134567');
> {
    address: "0xF2CD2AA0c7926743B1D4310b2BC984a0a453c3d4",
    privateKey: "0xd7325de5c2c1cf0009fac77d3d04a9c004b038883446b065871bc3e831dcd098",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

web3.eth.accounts.create(web3.utils.randomHex(32));
> {
    address: "0xe78150FaCD36E8EB00291e251424a0515AA1FF05",
    privateKey: "0xcc505ee6067fba3f6fc2050643379e190e087aeffe5d958ab9f2f3ed3800fa4e",
    signTransaction: function(tx){...},
    sign: function(data){...},
    encrypt: function(password){...}
}

Старый ответ от 2016 года

Web3.js не имеет такой встроенной возможности и, скорее всего, никогда не будет. Однако есть специальные решения, такие как https://github.com/SilentCicero/ethereumjs-accounts/ .

ethereumjs-accountsпозволяет создавать учетные записи в браузере, а затем использовать эти адреса для web3.jsтранзакций. Закрытые ключи хранятся внутри localStorageи могут быть зашифрованы. Обязательно прочитайте предупреждения безопасности и поймите, что вы делаете.

https://metamask.io/ — это более широкий подход к тому, чтобы сделать DApp доступными через обычный браузер. Он также содержит управление идентификацией (например, учетными записями).

На мой взгляд, такие решения, как ethereumjs-accountsMetamask, могут стать хорошим средством для того, чтобы сделать DApp доступными для широкой аудитории, для транзакций с низкой стоимостью или даже просто для доступа к DApp только для чтения.

или сообщество в целом, многое изменилось с момента ответа Арона. Есть ли новые способы ответить на этот вопрос?
web3js 0.20.x позволяет создать новую учетную запись с помощью этой web3.personal.newAccountфункции.

Маловероятно, что функциональность, связанная с учетными записями, будет добавлена ​​в web3.js.

Mist — это браузер, предназначенный для запуска DApps и управления учетными записями. Похоже, mist.requestAccountчто это ожидаемый API, который должны использовать DApps.

Вероятно, главная причина, по которой Mist, а не web3.js, заключается в том, что сам браузер способен обеспечить большую безопасность, чем Javascript. Например, модальное диалоговое окно в Mist, которое запрашивает у пользователя его учетную запись и пароль, труднее подделать, подделать или перехватить, чем диалоговое окно HTML/CSS/JS.

Прямо сейчас туман требует, чтобы вы запустили полный узел. Но это не слишком удобно для пользователя, учитывая, что размер блокчейна уже составляет 10 ГБ. Если я хочу разработать некоторые приложения для конечных пользователей, нам нужно найти способ, чтобы пользователи могли избежать использования тумана или сделать туман менее ресурсоемким, не так ли?
Как только протокол LES будет завершен, Mist сможет работать без загрузки полной цепочки блоков.

После запроса обновления в моих комментариях к ответу Арона я выполнил поиск, используя модификацию этого заголовка, и обнаружил, что web3.js теперь действительно позволяет вам создавать новые учетные записи. СМОТРИТЕ ЗДЕСЬ . Из чтения этих документов web3.js при создании создается впечатление, что учетные записи создаются таким же безопасным способом, как MetaMask.

Действительно, это похоже на полноценную функциональность управления учетными записями в web3.js. Рад, что ошибся в этом :)
@AronVanAmmers, я думаю, что когда вы ответили изначально, это было недоступно. Однако, чтобы научиться управлять чужими адресами вместе с их закрытыми ключами, не зная их закрытых ключей, нам потребуется изучить и поделиться новым набором лучших практик.

Вы можете проверить ethers.js

Ethers.js имеет полное управление кошельком, отдельно от geth (как и должно быть, поскольку это просто криптовалюта). Затем вы можете подключить провайдера к своему кошельку (web3 делает это в основном наоборот). Затем вы прикрепляете этот кошелек + провайдер к артефакту контракта, и у вас есть экземпляр контракта, который вы можете вызвать.