Когда я запускаю свой код развертывания контракта в браузере (даже если MetaMask установлен), я получаю эту ошибку:
authentication needed: password or unlock
Код следующий:
var owner = $('#account').val();
var contract = web3.eth.contract(abi);
var contractInstance = contract.new(
tokenName, tokenSymbol, { data: bytecode, from: owner, gas: 6721975 }
);
Пожалуйста, объясните, пожалуйста, как сделать аутентификацию, чтобы пользователь мог развернуть мой контракт.
web3.js 0.20.6.
Я подключаюсь к сети с помощью следующего кода:
var provider = new Web3.providers.HttpProvider('http://localhost:8545');
var web3 = new Web3(provider);
Чтобы использовать MetaMask, вам нужен код, который выглядит так:
var web3 = new Web3(web3.currentProvider);
(MetaMask вводит web3
глобальную переменную, к которой подключен правильный провайдер.)
Чтобы MetaMask подключился к вашему локальному узлу geth, просто щелкните раскрывающийся список в пользовательском интерфейсе MetaMask, который позволяет выбрать вашу сеть. Один из вариантов должен быть «localhost 8545». Если вы не используете этот порт, вы можете выбрать «Пользовательский RPC» и указать URL-адрес.
sendRawTransaction
/ sendSignedTransaction
(зависит от версии web3.js). Но опять же, пользователи не должны доверять вам свои закрытые ключи.Вы также можете настроить его так:
const assert = require('assert');
const ganache = require('ganache-cli');
const Web3 = require('web3');
const provider = ganache.provider();
const web3 = new Web3(provider);
const { interface, bytecode } = require('../compile');
let accounts;
let inbox;
beforeEach(async () => {
// Get a list of accounts
accounts = await web3.eth.getAccounts();
// Use one of those accounts to deploy contract
inbox = await new web3.eth.Contract(JSON.parse(interface))
.deploy({
data: bytecode,
arguments: ['hi there']
})
.send({ from: accounts[0], gas: '1000000' });
inbox.setProvider(provider);
});
пользователь19510
web3
? Я предполагаю, что на самом деле вы не используете провайдера MetaMask и все еще подключаетесь к какому-то другому узлу (возможно, локальному экземпляру geth/parity), который требует пароль для разблокировки учетной записи.Портон
Портон