#javascript #twitter-bootstrap #prompt #ethereum #solidity
#javascript #twitter-bootstrap #запрос #ethereum #надежность
Вопрос:
Я работаю с Ethereum
, javascript
, web3.js
geth
, bootstrap 3
blockchain
. функциональность такая, что, когда транзакция происходит в,, она должна запрашивать пароль для разблокировки учетной записи.
Я выполнил приведенный ниже код, но проблема в том, что пароль отображается в виде текста, поэтому теперь я хочу создать пользовательское приглашение, которое принимает пароль.
Я тоже пробовал использовать bootbox.js
, но это не сработало из-за проблемы с синхронизацией. т.е. перед вызовом запроса выдается сообщение «Учетная запись заблокирована», не ожидающее ввода пользователем пароля.
Я хочу использовать какое-нибудь интерактивное приглашение, например, в «bootbox.js «чтобы получить пароль и дождаться ввода пользователем, затем с помощью этого ввода разблокируйте учетную запись, а затем выполните транзакцию.
Это то, над чем я работал
function unlockAccount(){
var accounts = web3.eth.accounts;
var passPhrase = prompt("Enter the passPhrase",'');
web3.personal.unlockAccount(accounts[0],passPhrase);
}
Если вам нужны какие-либо дополнительные подробности, спросите, прежде чем голосовать против.
Спасибо
Ответ №1:
Попробуйте это (для меня сработало как шарм):
var promptCount = 0;
window.pw_prompt = function (options) {
var lm = options.lm || "Password:",
bm = options.bm || "Submit";
if (!options.callback) {
alert("No callback function provided! Please provide one.")
};
var prompt = document.createElement("div");
prompt.className = "pw_prompt";
var submit = function () {
options.callback(input.value);
document.body.removeChild(prompt);
};
var label = document.createElement("label");
label.textContent = lm;
label.for = "pw_prompt_input" ( promptCount);
prompt.appendChild(label);
var input = document.createElement("input");
input.id = "pw_prompt_input" (promptCount);
input.type = "password";
input.addEventListener("keyup", function (e) {
if (e.keyCode == 13) submit();
}, false);
prompt.appendChild(input);
var button = document.createElement("button");
button.textContent = bm;
button.addEventListener("click", submit, false);
prompt.appendChild(button);
document.body.appendChild(prompt);
document.getElementById(input.id).focus()
};
pw_prompt({
lm: 'Enter Password to load your identity',
bm: 'Load',
callback: function (password) {
web3.personal.unlockAccount(accounts[0], password);
}});
.pw_prompt {
position: fixed;
left: 50%;
top: 50%;
margin-left: -150px;
padding: 15px;
/* width: 263px; */
border: 1px solid black;
background: darkgrey;
}
.pw_prompt label {
display:block;
margin-bottom:5px;
}
.pw_prompt input {
width:300px;
margin-bottom:10px;
}
Комментарии:
1. спасибо за ответ, мне нужно просмотреть его или кому-то еще. Я решил это, используя технику обещания и отсрочки.