Ich stelle den Vertrag mit Truffle bereit und habe eine Fehlermeldung erhalten Error: authentication needed: password or unlock
. Ich habe bereits verwandte Fragen überprüft und nur hässliche Hacks wie "Gewünschtes Konto direkt auf dem Knoten entsperren mit" gefunden . Aber ich möchte nicht jedes Mal eine Verbindung zu meinem Knoten herstellen (ich habe 3 Testnetzwerke in meinem ), wenn ich eine neue Version bereitstellen möchte. web3.personal.unlockAccount
truffle.js
from
Meine Frage ist: Gibt es eine Möglichkeit, ein Passwort in der Truffle-Infrastruktur anzugeben, um das im Feld unter dem network
Element angegebene Konto zu entsperren ? password
oder pass
funktioniert nicht.
Ok, endlich habe ich einen Code hinzugefügt, um das Konto spontan zu entsperren. Ich möchte das Passwort nicht speichern truffle.js
(aber es ist möglich), also mache ich die nächsten Dinge:
1_initial_migration.js
So geändert :
const Web3 = require('web3');
const TruffleConfig = require('../truffle');
var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer, network, addresses) {
const config = TruffleConfig.networks[network];
if (process.env.ACCOUNT_PASSWORD) {
const web3 = new Web3(new Web3.providers.HttpProvider('http://' + config.host + ':' + config.port));
console.log('>> Unlocking account ' + config.from);
web3.personal.unlockAccount(config.from, process.env.ACCOUNT_PASSWORD, 36000);
}
console.log('>> Deploying migration');
deployer.deploy(Migrations);
};
Und anstatt anzurufen, truffle deploy
führe ich es so aus:
ACCOUNT_PASSWORD=MySup4P@ssw0rd truffle deploy
Wie Sie sehen können, stammen die Knoten-URL und der Port aus der Konfiguration, daher ist es möglich, dort Felder hinzuzufügen password
und dann die Migration auf "Aufrufbarkeit" zu überprüfen, dh:
...
password: function() { return process.env.ACCOUNT_PASSWORD }
...
-- dasselbe, aber die Passwortlogik wird verschobentruffle.js
web3.eth.personal.unlockAccount
ab web3 1.0 sein.abort(Error: Invalid JSON RPC response: "")
zusammen mit einer 630-kb-Fehlerausgabe. Irgendwelche Updates dazu?Wenn Sie dies für Entwicklungszwecke verwenden, könnte es eine andere Möglichkeit geben, ein Skript zu haben, das die Konten regelmäßig entsperrt. Der Vorteil dieser Methode besteht darin, dass die Migrationsskripte nicht aktualisiert werden müssen.
Ein Beispiel dafür findet sich in trufflesuite/truffle geth-accounts.js . Obwohl die obige Methode immer noch sehr ineffizient ist, da sie versucht, Konten in einer Endlosschleife zu entsperren. Eine leicht veränderte Version sieht so aus
function unlockAccounts () {
eth.accounts.forEach(function (account) {
console.log('Unlocking ' + account + '.');
personal.unlockAccount(account, '', 86400);
});
}
function createAccounts() {
for (var i = 0; i < 10; i++) {
acc = personal.newAccount("");
eth.sendTransaction({
from: eth.accounts[0],
to: acc,
value: web3.toWei(100, "ether")
});
}
unlockAccounts();
setInterval(unlockAccounts, 86000);
}
createAccounts();
Ismael
Alex GP
Ismael
Alex GP
Ismael
const EthereumWallet = require('ethereumjs-wallet'); const jsonWallet = fs.readFileSync('<<path to UTC file>>'); const parsedWallet = JSON.parse(jsonWallet); const wallet = EthereumWallet.fromV3(parsedWallet, '<<YOUR_PASSWORD_GOES_HERE>>');
Alex GP