good morning!!!!

Skip to content
Snippets Groups Projects
Commit 375ca542 authored by Marek Kotewicz's avatar Marek Kotewicz
Browse files

Merge commit '8e3ba3a4285cc7e902a018196b3849df56944dd0' into natspec

parents d6a92b18 0202b05a
Branches
Tags
No related merge requests found
......@@ -447,18 +447,20 @@ var abi = require('./abi');
*
* var myContract = web3.eth.contract('0x0123123121', abi); // creation of contract object
*
* myContract.myMethod('this is test string param for call').call(); // myMethod call
* myContract.myMethod('this is test string param for transact').transact() // myMethod transact
* myContract.myMethod('this is test string param for call'); // myMethod call (implicit, default)
* myContract.myMethod('this is test string param for call').call(); // myMethod call (explicit)
* myContract.transact().myMethod('this is test string param for transact'); // myMethod transact
*
* @param address - address of the contract, which should be called
* @param desc - abi json description of the contract, which is being created
* @returns contract object
*/
var contract = function (address, desc) {
var contract = function contract (address, desc) {
var inputParser = abi.inputParser(desc);
var outputParser = abi.outputParser(desc);
var contract = {};
var result = {};
desc.forEach(function (method) {
......@@ -467,44 +469,53 @@ var contract = function (address, desc) {
var impl = function () {
var params = Array.prototype.slice.call(arguments);
var parsed = inputParser[displayName][typeName].apply(null, params);
var signature = abi.methodSignature(method.name);
var parsed = inputParser[displayName][typeName].apply(null, params);
return {
call: function (extra) {
extra = extra || {};
extra.to = address;
extra.data = signature + parsed;
var result = web3.eth.call(extra);
return outputParser[displayName][typeName](result);
},
transact: function (extra) {
extra = extra || {};
extra.to = address;
extra.data = signature + parsed;
var options = contract._options || {};
options.to = address;
options.data = signature + parsed;
/// it's used by natspec.js
/// TODO: figure a better way to solve this
var output = "";
if (contract._isTransact) {
// it's used byt natspec.js
// TODO: figure out better way to solve this
web3._currentContractAbi = desc;
web3._currentContractAddress = address;
var result = web3.eth.transact(extra);
return outputParser[displayName][typeName](result);
output = web3.eth.transact(options);
} else {
output = web3.eth.call(options);
}
};
return outputParser[displayName][typeName](output);
};
if (contract[displayName] === undefined) {
contract[displayName] = impl;
if (result[displayName] === undefined) {
result[displayName] = impl;
}
contract[displayName][typeName] = impl;
result[displayName][typeName] = impl;
});
return result;
};
var transact = function (options) {
contract._isTransact = true;
contract._options = options;
return contract;
};
var call = function (options) {
contract._isTransact = false;
contract._options = options;
return contract;
};
contract.transact = transact;
contract.call = call;
module.exports = contract;
......
This diff is collapsed.
This diff is collapsed.
......@@ -53,7 +53,7 @@
var param = parseInt(document.getElementById('value').value);
// call the contract
var res = contract.multiply(param).call();
var res = contract.multiply(param);
document.getElementById('result').innerText = res[0];
}
......
......@@ -36,18 +36,20 @@ var abi = require('./abi');
*
* var myContract = web3.eth.contract('0x0123123121', abi); // creation of contract object
*
* myContract.myMethod('this is test string param for call').call(); // myMethod call
* myContract.myMethod('this is test string param for transact').transact() // myMethod transact
* myContract.myMethod('this is test string param for call'); // myMethod call (implicit, default)
* myContract.myMethod('this is test string param for call').call(); // myMethod call (explicit)
* myContract.transact().myMethod('this is test string param for transact'); // myMethod transact
*
* @param address - address of the contract, which should be called
* @param desc - abi json description of the contract, which is being created
* @returns contract object
*/
var contract = function (address, desc) {
var contract = function contract (address, desc) {
var inputParser = abi.inputParser(desc);
var outputParser = abi.outputParser(desc);
var contract = {};
var result = {};
desc.forEach(function (method) {
......@@ -56,43 +58,52 @@ var contract = function (address, desc) {
var impl = function () {
var params = Array.prototype.slice.call(arguments);
var parsed = inputParser[displayName][typeName].apply(null, params);
var signature = abi.methodSignature(method.name);
var parsed = inputParser[displayName][typeName].apply(null, params);
return {
call: function (extra) {
extra = extra || {};
extra.to = address;
extra.data = signature + parsed;
var result = web3.eth.call(extra);
return outputParser[displayName][typeName](result);
},
transact: function (extra) {
extra = extra || {};
extra.to = address;
extra.data = signature + parsed;
/// it's used by natspec.js
/// TODO: figure a better way to solve this
var options = contract._options || {};
options.to = address;
options.data = signature + parsed;
var output = "";
if (contract._isTransact) {
// it's used byt natspec.js
// TODO: figure out better way to solve this
web3._currentContractAbi = desc;
web3._currentContractAddress = address;
var result = web3.eth.transact(extra);
return outputParser[displayName][typeName](result);
output = web3.eth.transact(options);
} else {
output = web3.eth.call(options);
}
};
return outputParser[displayName][typeName](output);
};
if (contract[displayName] === undefined) {
contract[displayName] = impl;
if (result[displayName] === undefined) {
result[displayName] = impl;
}
contract[displayName][typeName] = impl;
result[displayName][typeName] = impl;
});
return result;
};
var transact = function (options) {
contract._isTransact = true;
contract._options = options;
return contract;
};
var call = function (options) {
contract._isTransact = false;
contract._options = options;
return contract;
};
contract.transact = transact;
contract.call = call;
module.exports = contract;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment