I have a smart contract. I want to execute one of its state modifying functions.

This is the code:

const result = await smartContractObject.methods
    .send( { gas: '5000000', from:masterAccount });

How can I manually assign a nonce to this transaction?

Do I need to create a raw_tx?


I am not sure about modifying the nonce with send methods. You can use instead classic web3.eth.sendTransaction method (https://web3js.readthedocs.io/en/v1.2.1/web3-eth.html#sendtransaction). However, you'll need to provide the data field for this transaction.

const nonceThatIWant = x;
const txObject = smartContractObject.methods.addSomething(_valueToAdd);
const txData = txObject.encodeABI();
await web3.eth.sendTransaction({
   nonce: nonceThatIWant,
   data: txData,
   to: smartContractObject._address, //or smartContractObject.address depending on web3 version,

   //rest parameters like gas, value, gasPrice, etc.
  • Ok thanks for your help. However I need further assistance. The smartContract emits a event. How do I receive this value now? Originally it worked this way: result.events.myEvent.returnValues['myreturnvalue'] Aug 14 '19 at 10:23
  • use the resolved promise object's logs property. For example const result = await web3.eth.sendTransaction .... Then result.logs will contain all the events of transaction. The problem might be they have not very convenient format. Aug 14 '19 at 14:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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