Как мне управлять разблокировкой учетных записей в тесте в Truffle

У меня есть тест, который выполняет функцию контракта для разных учетных записей. Как мне разблокировать эти учетные записи в контексте теста?

contract('MyContract', function (accounts) {

    it("should perform differently for different accounts", function (done) {

        var thisContract = MyContract.deployed();

        thisContract.addAccounts([accounts[1], accounts[2]], {from: accounts[0]} ).then(
            function (tx_id) {
              /* this works because I manual unlock acc 0 on geth */
                return thisContract.doSomething({from: accounts[0]});
            }).then(
            function (tx_id) {
              /* is there something here I can do to unlock acc 1? */
                return thisContract.doSomething({from: accounts[1]});
            }).then(
            function (tx_id) {
              /* then here... */
                return thisContract.doSomething({from: accounts[2]};
                done();
            }
        ).catch(done);

    });

});
Вы когда-нибудь догадывались об этом? Я использую testrpc, и мне нужно разблокировать учетную запись моего контракта, чтобы протестировать функцию, которая отправляет на адрес
Привет @ElliottMcNary. Если вы используете testrpc, вам не нужно разблокировать учетные записи. На консоли узла geth вы делаете это с помощью personal.newAccount("фраза-пароль") и personal.unlockAccount(адрес, "пароль").

Ответы (1)

Вы не можете разблокировать учетные записи с помощью своего кода. Было бы проблемой, если бы код мог разблокировать ваши учетные записи.

Похоже, вы пишете модульные тесты. Вместо запуска geth вы можете попробовать использовать testrpc . Аккаунты в testrpc не нужно разблокировать перед использованием.

Я использовал TestRPC, но столкнулся с проблемами, потому что он не совсем точно воспроизводит поведение самого узла :-) Курица и яйцо.
Вы также можете попытаться разблокировать несколько учетных записей на geth, прежде чем запускать модульные тесты.
Привет, uzyn, Поскольку вы не можете позволить кому-то вручную разблокировать вашу учетную запись перед общением со смарт-контрактом, как текущая платформа dapps заставляет ее работать, если вы не можете разблокировать учетные записи с помощью своего кода? Спасибо !
@fabdarice Есть 2 способа сделать это: 1. разблокировать учетные записи на узле (geth/parity); или 2. подпишите свой tx в своем коде и транслируйте только подписанный tx на node.
не могли бы вы немного расширить оба решения? Извините, я новичок в этом. Меня лично интересует случай, когда любой пользователь может использовать вашу платформу для совершения транзакции. Для этого потребуется их закрытый ключ и пароль, чтобы разблокировать их учетную запись, но я не хочу, чтобы они чувствовали себя небезопасно, делая это.
Если это связано с закрытым ключом пользователя, то это должен быть метод 2, как я описал. Вы можете проверить MyEtherWallet, их реализация именно такая.