Пакетные транзакции для MetaMask с использованием sendAsync

У меня MetaMask прекрасно работает - это так здорово! Однако у меня есть (реагирующая) форма, которая собирает много информации и создает 14 различных вызовов sendTransaction. Следовательно, я (в настоящее время) получаю 14 всплывающих окон от MetaMask, предлагающих мне принять эти транзакции. Собственно, ровно такая ситуация: https://github.com/MetaMask/metamask-plugin/issues/1000

... который, как я вижу, был «решен». Итак, я знаю, что можно выполнять пакетные запросы, но мой вопрос в том, как? В принципе, как мне сформировать sendAsyncвызов? Например, скажем, у меня были эти три транзакции:

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

Как бы web3.currentProvider.sendAsyncвыглядел мой звонок?

Ответы (2)

Вы можете использовать функцию пакетного запроса web3.

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 запрашивает у пользователя подтверждение 3 раза:введите описание изображения здесь

Но я думаю, что sendAsync будет запрашивать подтверждение только один раз....
Это по-прежнему открывает несколько вкладок в MetaMask.
Понятно. Я вижу только одну вкладку, но для каждой транзакции требуется несколько подтверждений, а должно быть одно подтверждение!
@GregJeanmart - спасибо - похоже, ваше решение batch.add верное - как только ошибка будет исправлена ​​(см. Ниже), я приму это как ответ;)

Вы обнаружили легитимную ошибку в MetaMask, я открыл ее в репозитории MetaMask на github (где мы отслеживаем ошибки и закрываем их), здесь:

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

Отлично - спасибо - я также добавил комментарий к проблеме MetaMask...