Search code examples
ethereumethers.js

Ethers InfuraProvider erroring: API provider does not support signing (operation="getSigner"


Trying to get a signer from InfuraProvider, but keep getting an error "API provider does not support signing (operation="getSigner", code=UNSUPPORTED_OPERATION, version=providers/5.4.3)"

Any idea why this might be happening and how to fix that?

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);

Solution

  • The way I solved this was as follows:

    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);
    ...