Я работаю над ethers
пакетом npm и после создания кошелька пытаюсь передать токены на адрес. но выдает ошибку missing-signer
.
Кто-нибудь знает, какую ошибку я мог сделать?
Мой код:
var ethers = require('ethers');
var providers = require('ethers').providers;
var utils = require('ethers').utils;
var p = new providers.JsonRpcProvider('http://xxx.xx.xxx.xx:8545', false, 5);
ethers.Wallet.provider=p;
const contractAddress = '0x contract address here';
var contractInterface = 'contract interface here';
var data = 'wallet json from keystore';
var walletJson = JSON.stringify(data);
var wPassword='keystore account password';
ethers.Wallet.fromEncryptedWallet(walletJson, wPassword).then(function(wallet) {
console.log("Address: " + wallet.address);
var address = 'adress to transfer to';
// //var payout = ethers.utils.parseEther('10.0');
var payout = 1000000000;
var contract = new ethers.Contract(contractAddress, contractInterface, wallet);
try {
var promise = contract.functions.transfer(address, payout);
console.log(promise);
promise
.then(function(result) {
console.log(result);
})
.catch(function(err) {
console.log("Promise Rejected "+ err);
});
} catch (e) {
console.log(e); process.exit();
}
}).
catch(function(err){
console.log(err);
});
Есть ли что-то, что я делаю неправильно с адресом учетной записи или паролем (адрес контракта)?
В чем может быть ошибка? Есть идеи?
Проблема в том, что экземпляр кошелька не имеет провайдера, поэтому при передаче его в конструктор контракта он не понимает, что он подписывающий, а не только провайдер.
После расшифровки экземпляра кошелька убедитесь, что вы установили для него провайдера (перед передачей его в конструктор контракта):
wallet.provider = p;
Установка поставщика в глобальном классе Wallet не повлияет на экземпляры.
Приведенное выше решение не сработало для меня в эфирах 5.4.2 Экземпляр кошелька теперь неизменяем.
но установка провайдера при создании кошелька сработала
const _wallet2 = await new ethers.Wallet(privateKey ,provider);
для зашифрованного Json и мнемоники сработало использование функции подключения и возврат нового подключенного кошелька
let _wallet = await ethers.Wallet.fromMnemonic(mnemonic)
_wallet = _wallet.connect(provider)
вуно
Настоящая сталь