diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/abi.js | 16 | ||||
-rw-r--r-- | lib/contract.js | 9 | ||||
-rw-r--r-- | lib/web3.js | 2 |
3 files changed, 22 insertions, 5 deletions
diff --git a/lib/abi.js b/lib/abi.js index 5a4d64515..99d2ba932 100644 --- a/lib/abi.js +++ b/lib/abi.js @@ -140,7 +140,6 @@ var toAbiInput = function (json, methodName, params) { return; } - bytes = "0x" + padLeft(index.toString(16), 2); var method = json[index]; for (var i = 0; i < method.inputs.length; i++) { @@ -259,7 +258,20 @@ var outputParser = function (json) { return parser; }; +var methodSignature = function (json, name) { + var method = json[findMethodIndex(json, name)]; + var result = name + '('; + var inputTypes = method.inputs.map(function (inp) { + return inp.type; + }); + result += inputTypes.join(','); + result += ')'; + + return web3.sha3(web3.fromAscii(result)); +}; + module.exports = { inputParser: inputParser, - outputParser: outputParser + outputParser: outputParser, + methodSignature: methodSignature }; diff --git a/lib/contract.js b/lib/contract.js index b10339003..4cb202255 100644 --- a/lib/contract.js +++ b/lib/contract.js @@ -27,6 +27,9 @@ if (process.env.NODE_ENV !== 'build') { var abi = require('./abi'); +// method signature length in bytes +var ETH_METHOD_SIGNATURE_LENGTH = 4; + var contract = function (address, desc) { var inputParser = abi.inputParser(desc); var outputParser = abi.outputParser(desc); @@ -46,8 +49,10 @@ var contract = function (address, desc) { call: function (extra) { extra = extra || {}; extra.to = address; - extra.data = parsed; - return web3.eth.call(extra).then(onSuccess); + return abi.methodSignature(desc, method.name).then(function (signature) { + extra.data = signature.slice(0, 2 + ETH_METHOD_SIGNATURE_LENGTH * 2) + parsed; + return web3.eth.call(extra).then(onSuccess); + }); }, transact: function (extra) { extra = extra || {}; diff --git a/lib/web3.js b/lib/web3.js index 9a85c4d1b..4220114f9 100644 --- a/lib/web3.js +++ b/lib/web3.js @@ -256,7 +256,7 @@ var web3 = { }, fromAscii: function(str, pad) { - pad = pad === undefined ? 32 : pad; + pad = pad === undefined ? 0 : pad; var hex = this.toHex(str); while(hex.length < pad*2) hex += "00"; |