let contract = new ethers.Contract(<CONTRACT_ADDRESS>,
<CONTRACT_ABI>, biconomy.getSignerByAddress(userAddress));
let contractInterface = new ethers.utils.Interface(<CONTRACT_ABI>);
let userAddress = <Selected Address>;
// Create your target method signature.. here we are calling setQuote() method of our contract
let { data } = await contract.populateTransaction.setQuote(newQuote);
let provider = biconomy.getEthersProvider();
// you can also use networkProvider created above
let gasLimit = await provider.estimateGas({
console.log("Gas limit : ", gasLimit);
gasLimit: gasLimit, // optional
signatureType: "EIP712_SIGN"
// as ethers does not allow providing custom options while sending transaction
// you can also use networkProvider created above
// signature will be taken by mexa using normal provider (metamask wallet etc) that you passed in Biconomy options
let tx = await provider.send("eth_sendTransaction", [txParams]);
console.log("Transaction hash : ", tx);
provider.once(tx, (transaction) => {
// Emitted when the transaction has been mined
console.log(transaction);
//do something with transaction hash