Ошибка Ethers InfuraProvider: провайдер API не поддерживает подпись (operation="getSigner"

avatar
Vlad
8 августа 2021 в 22:55
199
2
0

Попытка получить подписавшего от InfuraProvider, но постоянно появляется сообщение об ошибке "Поставщик API не поддерживает подписывание (operation="getSigner", code=UNSUPPORTED_OPERATION, version=providers/5.4.3)"

Есть идеи, почему это может происходить и как это исправить?

const { ethers } = require("ethers");
const MyContractArtifact = require("./build/contracts/Token.json");
require("dotenv").config();
const { InfuraProvider } = require("@ethersproject/providers");
const fs = require('fs');
const contract = JSON.parse(fs.readFileSync('./build/contracts/Token.json', 'utf8'));
const provider = new InfuraProvider("rinkeby", process.env.INFURA_API_KEY);


(async () => {
  try {

    console.log('running...');

    const ABI = contract.abi;

    const signer = provider.getSigner(); //this keeps erroring: **"API provider does not support signing (operation="getSigner", code=UNSUPPORTED_OPERATION, version=providers/5.4.3)"**
 
    const writableContract = new ethers.Contract("our address", ABI, signer);
    const txResponse = await writableContract.transfer("our address", 10)
    const txReceipt = await txResponse.wait();
    console.log(txReceipt);
Источник

Ответы (2)

avatar
Vlad
24 августа 2021 в 21:27
0

Я решил это следующим образом:

var wallet = ethers.Wallet.fromMnemonic(process.env.MNEMONIC);

// var signer = provider.getSigner();

var signer = wallet.connect(provider); // Set the provider for the wallet

const writableContract = new ethers.Contract(process.env.CONTRACT_ADDRESS1, ABI, signer);
...
avatar
Arjun
24 августа 2021 в 06:21
0

Класс Wallet наследует Signer и может подписывать транзакции и сообщения с использованием закрытого ключа в качестве стандартной внешней учетной записи (EOA). [https://docs.ethers.io/v5/api/signer/#Wallet]

const ABI = contract.abi;

let walletInstance = new ethers.Wallet(privateKey,provider);

const signer = wallet.connect(provider);

const writableContract = new ethers.Contract("our address", ABI, signer);
const txResponse = await writableContract.transfer("our address", 10)
const txReceipt = await txResponse.wait();
console.log(txReceipt);