Can't find any good documentation on creating a raw transaction with contract data in ethers.js. The equivalent in web3 is adding the encodeABI on the data property. Any guidance on this?

This isn't working:

data = myContract.interface.functions.myFunction(value);
const tx = {

It doesn't seem to recognize this is a function (even though i see the data property there).

2 Answers 2


You can use the populateTransaction mechanism documented here: https://docs.ethers.io/v5/api/contract/contract/

So specifically, that'd be:

const data = await myContract.populateTransaction.myFunction(value);

The way you can use populateTransaction in Ether.js is:

const contract = new Contract(CONTRACT_ADDRESS, CONTRACT_ABI, Wallet);
const params = [value];
const action = 'myFunction';
const unsignedTx = await contract.populateTransaction[action](...params);

Then you can simply sign and send your transaction like:

await Wallet.sendTransaction(unsignedTx);
  • 3
    Keep in mind that in v6 (June 2023) the populateTransaction order has been flipped so you need to call it in this order contract[action].populateTransaction(...params); Jun 3 at 3:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.