Transacciones por lotes para MetaMask usando sendAsync

Tengo MetaMask funcionando muy bien, ¡es genial! Sin embargo, tengo un formulario (de reacción) que recopila mucha información y crea 14 llamadas distintas a sendTransaction. Por lo tanto, (actualmente) obtengo 14 ventanas emergentes de MetaMask que me piden que acepte esas transacciones. De hecho, exactamente como esta situación: https://github.com/MetaMask/metamask-plugin/issues/1000

... que veo que fue 'resuelto'. Entonces, sé que es posible procesar lotes de solicitudes, pero mi pregunta es ¿cómo? Básicamente, ¿cómo debo formar la sendAsyncllamada? Por ejemplo, digamos que tuve estas tres transacciones:

myContractObject.doSomething(name,type)
myContractObject.doSomethingElse(hash)
myContractObject.doSomethingElseEntirely(key)

¿ Cómo se vería mi llamada web3.currentProvider.sendAsync?

Respuestas (2)

Puede utilizar la función web3 de solicitud por lotes .

var batch = web3.createBatch();
batch.add(myContractInstance.doSomething(arg1, arg2, {from: account, gas: 4000000}));
batch.add(myContractInstance.doSomethingElse(arg1, arg2, {from: account, gas: 4000000}));
batch.add(myContractInstance.doSomethingElseEntirely(arg1, arg2, {from: account, gas: 4000000}));
batch.execute();

Metamask pide confirmación al usuario 3 veces:ingrese la descripción de la imagen aquí

Pero creo que sendAsync solo pedirá confirmación una vez....
Esto todavía abre varias pestañas en MetaMask.
Entiendo. ¡Solo veo una pestaña, pero se requieren múltiples confirmaciones para cada transacción, mientras que debería ser una confirmación!
@GregJeanmart - gracias - parece que su solución batch.add es correcta - tan pronto como se solucione el error (ver más abajo), lo aceptaré como la respuesta;)

Detectó un error legítimo en MetaMask, lo abrí en el repositorio github de MetaMask (que es donde rastreamos los errores y los cerramos), aquí:

https://github.com/MetaMask/metamask-plugin/issues/1666

Excelente, gracias, también agregué un comentario al problema de MetaMask ...