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);
  • 4
    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, 2023 at 3:27

Your Answer

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

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