From 1b8a723d182cae218b3042c72b5204cc6e8974a4 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 27 Oct 2016 01:28:26 +0100 Subject: [PATCH] Use async.waterfall in runTx --- package.json | 1 + src/universal-dapp.js | 83 +++++++++++++++++++++++++++---------------- 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index dfe416c704..a40364cd9b 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "test": "node test/index.js" }, "devDependencies": { + "async": "^2.1.2", "babel-cli": "^6.16.0", "babel-plugin-transform-es2015-block-scoping": "^6.15.0", "babel-plugin-transform-es2015-template-literals": "^6.8.0", diff --git a/src/universal-dapp.js b/src/universal-dapp.js index e864c4c41f..b9241c7c88 100644 --- a/src/universal-dapp.js +++ b/src/universal-dapp.js @@ -9,6 +9,7 @@ var EthJSBlock = require('ethereumjs-block') var BN = ethJSUtil.BN var EventManager = require('./lib/eventManager') var crypto = require('crypto') +var async = require('async') /* trigger debugRequested @@ -679,41 +680,61 @@ function tryTillResponse (web3, txhash, done) { UniversalDApp.prototype.runTx = function (args, cb) { var self = this - - var gasLimit = 3000000 - if (self.getGasLimit) { - try { - gasLimit = self.getGasLimit() - } catch (e) { - return cb(e) - } + var tx = { + to: args.to, + data: args.data } - var value = 0 - if (self.getValue) { - try { - value = self.getValue() - } catch (e) { - return cb(e) - } - } + async.waterfall([ + // query gas limit + function (callback) { + tx.gasLimit = 3000000 - var from - if (self.getAddress) { - from = self.getAddress() - } else if (self.executionContext.isVM()) { - from = Object.keys(self.accounts)[0] - } else { - from = self.web3.eth.accounts[0] - } + // NOTE: getGasLimit should be async + if (self.getGasLimit) { + try { + tx.gasLimit = self.getGasLimit() + callback() + } catch (e) { + callback(e) + } + } else { + callback() + } + }, + // query value + function (callback) { + tx.value = 0 - return this.rawRunTx({ - from: args.from, - to: args.to, - data: args.data, - value: value, - gasLimit: gasLimit - }, cb) + // NOTE: getValue should be async + if (self.getValue) { + try { + tx.value = self.getValue() + callback() + } catch (e) { + callback(e) + } + } else { + callback() + } + }, + // query address + function (callback) { + // NOTE: getAddress should be async + if (self.getAddress) { + tx.from = self.getAddress() + } else if (self.executionContext.isVM()) { + tx.from = Object.keys(self.accounts)[0] + } else { + tx.from = self.web3.eth.accounts[0] + } + callback() + }, + // run transaction + function (callback) { + self.rawRunTx(tx, callback) + } + ], cb) } UniversalDApp.prototype.rawRunTx = function (args, cb) {