2

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

This is the code:

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

How can I manually assign a nonce to this transaction?

Do I need to create a raw_tx?

1 Answer 1

2

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({
   from:masterAccount,
   nonce: nonceThatIWant,
   data: txData,
   to: smartContractObject._address, //or smartContractObject.address depending on web3 version,

   //rest parameters like gas, value, gasPrice, etc.
});
2
  • 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']
    – cqx
    Commented Aug 14, 2019 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. Commented Aug 14, 2019 at 14:52

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.