contract.html example is working with sync api

This commit is contained in:
Marek Kotewicz
2015-01-21 21:12:07 +01:00
parent ceb4357a8d
commit c9693b4746
8 changed files with 60 additions and 62 deletions

View File

@ -32,6 +32,9 @@ BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_DOWN });
var ETH_PADDING = 32;
/// method signature length in bytes
var ETH_METHOD_SIGNATURE_LENGTH = 4;
/// Finds first index of array element matching pattern
/// @param array
/// @param callback pattern
@ -389,11 +392,10 @@ var outputParser = function (json) {
return parser;
};
/// @param json abi for contract
/// @param method name for which we want to get method signature
/// @returns (promise) contract method signature for method with given name
var methodSignature = function (json, name) {
return web3.sha3(web3.fromAscii(name));
var methodSignature = function (name) {
return web3.sha3(web3.fromAscii(name)).slice(0, 2 + ETH_METHOD_SIGNATURE_LENGTH * 2);
};
module.exports = {

View File

@ -23,8 +23,7 @@
var web3 = require('./web3'); // jshint ignore:line
var abi = require('./abi');
/// method signature length in bytes
var ETH_METHOD_SIGNATURE_LENGTH = 4;
/**
* This method should be called when we want to call / transact some solidity method from javascript
@ -60,29 +59,29 @@ var contract = function (address, desc) {
var impl = function () {
var params = Array.prototype.slice.call(arguments);
var parsed = inputParser[displayName][typeName].apply(null, params);
var onSuccess = function (result) {
return outputParser[displayName][typeName](result);
};
var signature = abi.methodSignature(method.name);
return {
call: function (extra) {
extra = extra || {};
extra.to = address;
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);
});
extra.data = signature + parsed;
var result = web3.eth.call(extra);
return outputParser[displayName][typeName](result);
},
transact: function (extra) {
extra = extra || {};
extra.to = address;
return abi.methodSignature(desc, method.name).then(function (signature) {
extra.data = signature.slice(0, 2 + ETH_METHOD_SIGNATURE_LENGTH * 2) + parsed;
web3._currentContractAbi = desc;
web3._currentContractAddress = address;
return web3.eth.transact(extra).then(onSuccess);
});
extra.data = signature + parsed;
/// it's used by natspec.js
/// TODO: figure a better way to solve this
web3._currentContractAbi = desc;
web3._currentContractAddress = address;
var result = web3.eth.transact(extra);
return outputParser[displayName][typeName](result);
}
};
};

View File

@ -23,7 +23,7 @@
var HttpSyncProvider = function (host) {
this.handlers = [];
this.host = host;
this.host = host || 'http://localhost:8080';
};
/// Transforms inner message to proper jsonrpc object