Как разблокировать учетную запись в Ethereum с помощью пользовательского приглашения?

#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. спасибо за ответ, мне нужно просмотреть его или кому-то еще. Я решил это, используя технику обещания и отсрочки.