aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/abi.js16
-rw-r--r--lib/contract.js9
-rw-r--r--lib/web3.js2
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";