¿Cómo configurar correctamente el nonce en una invocación de contrato web3?

Tengo este código, que funciona:

MyToken.airdrop(wallets,amounts,{
  gas: 1267051,
  gasPrice: 2000000000,
},function(err,tx){
  console.log('err is %s',err)
  console.log('tx is %s',tx)
  callback(err,tx)
})

Ahora digamos que quiero controlarme a noncemí mismo ( razón aquí ), así que lo hago:

MyToken.airdrop(wallets,amounts,{
  gas: 1267051,
  gasPrice: 2000000000,
  nonce: 432 // = web3.eth.getTransactionCount() + 1
},function(err,tx){
  console.log('err is %s',err)
  console.log('tx is %s',tx)
  callback(err,tx)
})

Obtengo un hash tx como salida, no un error , pero la transacción no se puede encontrar en el etherscan apropiado, parece que nunca se envía a la red. Lo probé con Rinkeby, Ropsten y Kovan.

¿Cuál podría ser el problema de especificarme a noncemí mismo o la forma en que lo estoy haciendo?

Nota: estoy usando infuracomo el "nodo".

Respuestas (1)

Aparentemente hay un matiz con el nonce... mi error fue que estaba configurando el nonce en web3.eth.getTransactionCount() + 1, lo que dejó una brecha entre el nonce de la transacción anterior y el nonce de la siguiente transacción ( los nonces están indexados en 0, las transacciones están indexadas de 1 , esa es la raíz del error). Parece que no se le permite incrementar el nonce en 2 y dejar un espacio. Debe ser secuencial.

Puede enviar un tx con un nonce demasiado alto, pero no se extraerá antes de que se llene el espacio. Y debe confiar en que los mineros mantendrán el alto nivel de tx en su grupo de tx mientras llena el vacío.
¡Buena atrapada! no sabía de la discrepancia en la indexación.
Sería genial ver el código de trabajo en su respuesta.