mirror of
https://github.com/status-im/web3.js.git
synced 2025-02-22 11:08:33 +00:00
refactored extensions
This commit is contained in:
parent
98f4318015
commit
7dff0a461a
13
lib/web3.js
13
lib/web3.js
@ -36,17 +36,21 @@ var version = require('./version.json');
|
||||
var utils = require('./utils/utils');
|
||||
var sha3 = require('./utils/sha3');
|
||||
var extend = require('./web3/extend');
|
||||
var Batch = require('./web3/batch');
|
||||
var Contract = require('./web3/contract');
|
||||
|
||||
function Web3 (provider) {
|
||||
this._requestManager = new RequestManager(provider);
|
||||
this.eth = new Eth(this);
|
||||
this.db = new DB(this);
|
||||
this.shh = new Shh(this);
|
||||
this.net = new Net(this);
|
||||
this.settings = new Settings();
|
||||
this.providers = {};
|
||||
this.version = {
|
||||
version: version.version
|
||||
};
|
||||
this._extend = extend(this);
|
||||
}
|
||||
|
||||
Web3.prototype.setProvider = function (provider) {
|
||||
@ -58,6 +62,8 @@ Web3.prototype.reset = function () {
|
||||
this.settings = new Settings();
|
||||
};
|
||||
|
||||
|
||||
|
||||
Web3.prototype.toHex = utils.toHex;
|
||||
Web3.prototype.toAscii = utils.toAscii;
|
||||
Web3.prototype.toUtf8 = utils.toUtf8;
|
||||
@ -71,7 +77,6 @@ Web3.prototype.fromWei = utils.fromWei;
|
||||
Web3.prototype.isAddress = utils.isAddress;
|
||||
Web3.prototype.isIBAN = utils.isIBAN;
|
||||
Web3.prototype.sha3 = sha3;
|
||||
Web3.prototype._extend = extend;
|
||||
|
||||
/**
|
||||
* Transforms direct icap to address
|
||||
@ -109,9 +114,9 @@ Web3.prototype.fromICAP = function (icap) {
|
||||
//return (this.currentProvider && this.currentProvider.isConnected());
|
||||
//};
|
||||
|
||||
//Web3.prototype.createBatch = function () {
|
||||
//return new Batch();
|
||||
//};
|
||||
Web3.prototype.createBatch = function () {
|
||||
return new Batch();
|
||||
};
|
||||
|
||||
|
||||
module.exports = Web3;
|
||||
|
@ -20,7 +20,6 @@
|
||||
* @date 2014
|
||||
*/
|
||||
|
||||
var web3 = require('../web3');
|
||||
var utils = require('../utils/utils');
|
||||
var coder = require('../solidity/coder');
|
||||
var SolidityEvent = require('./event');
|
||||
@ -85,16 +84,6 @@ var addEventsToContract = function (contract, abi) {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Should be called to create new ContractFactory
|
||||
*
|
||||
* @method contract
|
||||
* @param {Array} abi
|
||||
* @returns {ContractFactory} new contract factory
|
||||
*/
|
||||
var contract = function (abi) {
|
||||
return new ContractFactory(abi);
|
||||
};
|
||||
|
||||
/**
|
||||
* Should be called to check if the contract gets properly deployed on the blockchain.
|
||||
@ -104,24 +93,22 @@ var contract = function (abi) {
|
||||
* @param {Function} callback
|
||||
* @returns {Undefined}
|
||||
*/
|
||||
var checkForContractAddress = function(contract, abi, callback){
|
||||
var checkForContractAddress = function(contract, callback){
|
||||
var count = 0,
|
||||
callbackFired = false;
|
||||
|
||||
// wait for receipt
|
||||
var filter = web3.eth.filter('latest', function(e){
|
||||
if(!e && !callbackFired) {
|
||||
if (!e && !callbackFired) {
|
||||
count++;
|
||||
|
||||
// console.log('Checking for contract address', count);
|
||||
|
||||
// stop watching after 50 blocks (timeout)
|
||||
if(count > 50) {
|
||||
if (count > 50) {
|
||||
|
||||
filter.stopWatching();
|
||||
callbackFired = true;
|
||||
|
||||
if(callback)
|
||||
if (callback)
|
||||
callback(new Error('Contract transaction couldn\'t be found after 50 blocks'));
|
||||
else
|
||||
throw new Error('Contract transaction couldn\'t be found after 50 blocks');
|
||||
@ -147,10 +134,6 @@ var checkForContractAddress = function(contract, abi, callback){
|
||||
|
||||
contract.address = receipt.contractAddress;
|
||||
|
||||
// attach events and methods
|
||||
addFunctionsToContract(contract, abi);
|
||||
addEventsToContract(contract, abi);
|
||||
|
||||
// call callback for the second time
|
||||
if(callback)
|
||||
callback(null, contract);
|
||||
@ -175,10 +158,22 @@ var checkForContractAddress = function(contract, abi, callback){
|
||||
* @method ContractFactory
|
||||
* @param {Array} abi
|
||||
*/
|
||||
var ContractFactory = function (abi) {
|
||||
var ContractFactory = function (web3, abi) {
|
||||
this.web3 = web3;
|
||||
this.abi = abi;
|
||||
};
|
||||
|
||||
/**
|
||||
* Should be called to create new ContractFactory
|
||||
*
|
||||
* @method contract
|
||||
* @param {Array} abi
|
||||
* @returns {ContractFactory} new contract factory
|
||||
*/
|
||||
//var contract = function (abi) {
|
||||
//return new ContractFactory(abi);
|
||||
//};
|
||||
|
||||
/**
|
||||
* Should be called to create new contract on a blockchain
|
||||
*
|
||||
@ -190,7 +185,6 @@ var ContractFactory = function (abi) {
|
||||
* @returns {Contract} returns contract instance
|
||||
*/
|
||||
ContractFactory.prototype.new = function () {
|
||||
var _this = this;
|
||||
var contract = new Contract(this.abi);
|
||||
|
||||
// parse arguments
|
||||
@ -207,33 +201,30 @@ ContractFactory.prototype.new = function () {
|
||||
options = args.pop();
|
||||
}
|
||||
|
||||
// throw an error if there are no options
|
||||
|
||||
var bytes = encodeConstructorParams(this.abi, args);
|
||||
options.data += bytes;
|
||||
|
||||
|
||||
if(callback) {
|
||||
if (callback) {
|
||||
|
||||
// wait for the contract address adn check if the code was deployed
|
||||
web3.eth.sendTransaction(options, function (err, hash) {
|
||||
this.web3.eth.sendTransaction(options, function (err, hash) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
// add the transaction hash
|
||||
contract.transactionHash = hash;
|
||||
contract._transactionHash = hash;
|
||||
|
||||
// call callback for the first time
|
||||
callback(null, contract);
|
||||
|
||||
checkForContractAddress(contract, _this.abi, callback);
|
||||
checkForContractAddress(contract, callback);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
var hash = web3.eth.sendTransaction(options);
|
||||
var hash = this.web3.eth.sendTransaction(options);
|
||||
// add the transaction hash
|
||||
contract.transactionHash = hash;
|
||||
checkForContractAddress(contract, _this.abi);
|
||||
contract._transactionHash = hash;
|
||||
checkForContractAddress(contract);
|
||||
}
|
||||
|
||||
return contract;
|
||||
@ -250,11 +241,6 @@ ContractFactory.prototype.new = function () {
|
||||
*/
|
||||
ContractFactory.prototype.at = function (address, callback) {
|
||||
var contract = new Contract(this.abi, address);
|
||||
// TODO: address is required
|
||||
|
||||
// attach functions
|
||||
addFunctionsToContract(contract, this.abi);
|
||||
addEventsToContract(contract, this.abi);
|
||||
|
||||
if (callback) {
|
||||
callback(null, contract);
|
||||
@ -270,8 +256,14 @@ ContractFactory.prototype.at = function (address, callback) {
|
||||
* @param {Address} contract address
|
||||
*/
|
||||
var Contract = function (abi, address) {
|
||||
this._transactionHash = null;
|
||||
this.address = address;
|
||||
|
||||
// this functions are not part of prototype,
|
||||
// because we dont want to spoil the interface
|
||||
addFunctionsToContract(this, abi);
|
||||
addEventsToContract(this, abi);
|
||||
};
|
||||
|
||||
module.exports = contract;
|
||||
module.exports = ContractFactory;
|
||||
|
||||
|
@ -3,40 +3,45 @@ var utils = require('./../utils/utils');
|
||||
var Method = require('./method');
|
||||
var Property = require('./property');
|
||||
|
||||
/// creates methods in a given object based on method description on input
|
||||
/// setups api calls for these methods
|
||||
var setupMethods = function (obj, methods) {
|
||||
methods.forEach(function (method) {
|
||||
method.attachToObject(obj);
|
||||
});
|
||||
// TODO: refactor, so the input params are not altered.
|
||||
// it's necessary to make same 'extension' work with multiple providers
|
||||
var extend = function (web3) {
|
||||
var ex = function (extension) {
|
||||
|
||||
var extendedObject;
|
||||
if (extension.property) {
|
||||
if (!web3[extension.property]) {
|
||||
web3[extension.property] = {};
|
||||
}
|
||||
extendedObject = web3[extension.property];
|
||||
} else {
|
||||
extendedObject = web3;
|
||||
}
|
||||
|
||||
if (extension.methods) {
|
||||
extension.methods.forEach(function (method) {
|
||||
method.attachToObject(extendedObject);
|
||||
method.setRequestManager(web3._requestManager);
|
||||
});
|
||||
}
|
||||
|
||||
if (extension.properties) {
|
||||
extension.properties.forEach(function (property) {
|
||||
property.attachToObject(extendedObject);
|
||||
property.setRequestManager(web3._requestManager);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
ex.formatters = formatters;
|
||||
ex.utils = utils;
|
||||
ex.Method = Method;
|
||||
ex.Property = Property;
|
||||
|
||||
return ex;
|
||||
};
|
||||
|
||||
/// creates properties in a given object based on properties description on input
|
||||
/// setups api calls for these properties
|
||||
var setupProperties = function (obj, properties) {
|
||||
properties.forEach(function (property) {
|
||||
property.attachToObject(obj);
|
||||
});
|
||||
};
|
||||
|
||||
var extend = function (web3, extension) {
|
||||
|
||||
var extendedObject;
|
||||
if (extension.property && !web3[extension.property]) {
|
||||
this[extension.property] = {};
|
||||
extendedObject = this[extension.property];
|
||||
} else {
|
||||
extendedObject = this;
|
||||
}
|
||||
|
||||
setupMethods(extendedObject, extension.methods || []);
|
||||
setupProperties(extendedObject, extension.properties || []);
|
||||
};
|
||||
|
||||
extend.formatters = formatters;
|
||||
extend.utils = utils;
|
||||
extend.Method = Method;
|
||||
extend.Property = Property;
|
||||
|
||||
module.exports = extend;
|
||||
|
||||
|
@ -29,6 +29,11 @@ var Method = function (options) {
|
||||
this.params = options.params || 0;
|
||||
this.inputFormatter = options.inputFormatter;
|
||||
this.outputFormatter = options.outputFormatter;
|
||||
this.requestManager = null;
|
||||
};
|
||||
|
||||
Method.prototype.setRequestManager = function (rm) {
|
||||
this.requestManager = rm;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -133,11 +138,11 @@ Method.prototype.buildCall = function() {
|
||||
return function send() {
|
||||
var payload = method.toPayload(Array.prototype.slice.call(arguments));
|
||||
if (payload.callback) {
|
||||
return this.web3._requestManager.sendAsync(payload, function (err, result) {
|
||||
return method.requestManager.sendAsync(payload, function (err, result) {
|
||||
payload.callback(err, method.formatOutput(result));
|
||||
});
|
||||
}
|
||||
return method.formatOutput(this.web3._requestManager.send(payload));
|
||||
return method.formatOutput(method.requestManager.send(payload));
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -23,37 +23,44 @@
|
||||
var Method = require('../method');
|
||||
|
||||
var DB = function (web3) {
|
||||
this.web3 = web3;
|
||||
this._requestManager = web3._requestManager;
|
||||
|
||||
var self = this;
|
||||
|
||||
methods().forEach(function(method) {
|
||||
method.attachToObject(self);
|
||||
method.setRequestManager(web3._requestManager);
|
||||
});
|
||||
};
|
||||
|
||||
var putString = new Method({
|
||||
name: 'putString',
|
||||
call: 'db_putString',
|
||||
params: 3
|
||||
});
|
||||
var methods = function () {
|
||||
var putString = new Method({
|
||||
name: 'putString',
|
||||
call: 'db_putString',
|
||||
params: 3
|
||||
});
|
||||
|
||||
var getString = new Method({
|
||||
name: 'getString',
|
||||
call: 'db_getString',
|
||||
params: 2
|
||||
});
|
||||
var getString = new Method({
|
||||
name: 'getString',
|
||||
call: 'db_getString',
|
||||
params: 2
|
||||
});
|
||||
|
||||
var putHex = new Method({
|
||||
name: 'putHex',
|
||||
call: 'db_putHex',
|
||||
params: 3
|
||||
});
|
||||
var putHex = new Method({
|
||||
name: 'putHex',
|
||||
call: 'db_putHex',
|
||||
params: 3
|
||||
});
|
||||
|
||||
var getHex = new Method({
|
||||
name: 'getHex',
|
||||
call: 'db_getHex',
|
||||
params: 2
|
||||
});
|
||||
var getHex = new Method({
|
||||
name: 'getHex',
|
||||
call: 'db_getHex',
|
||||
params: 2
|
||||
});
|
||||
|
||||
var methods = [
|
||||
putString, getString, putHex, getHex
|
||||
];
|
||||
|
||||
methods.forEach(function(method) { method.attachToObject(DB.prototype) });
|
||||
return [
|
||||
putString, getString, putHex, getHex
|
||||
];
|
||||
};
|
||||
|
||||
module.exports = DB;
|
||||
|
@ -28,6 +28,7 @@ var utils = require('../../utils/utils');
|
||||
var Method = require('../method');
|
||||
var Property = require('../property');
|
||||
var c = require('../../utils/config');
|
||||
var Contract = require('../contract');
|
||||
|
||||
var blockCall = function (args) {
|
||||
return (utils.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
|
||||
@ -51,6 +52,18 @@ var uncleCountCall = function (args) {
|
||||
|
||||
function Eth(web3) {
|
||||
this.web3 = web3;
|
||||
|
||||
var self = this;
|
||||
|
||||
methods().forEach(function(method) {
|
||||
method.attachToObject(self);
|
||||
method.setRequestManager(web3._requestManager);
|
||||
});
|
||||
|
||||
properties().forEach(function(p) {
|
||||
p.attachToObject(self);
|
||||
p.setRequestManager(web3._requestManager);
|
||||
});
|
||||
}
|
||||
|
||||
Object.defineProperty(Eth.prototype, 'defaultBlock', {
|
||||
@ -73,219 +86,224 @@ Object.defineProperty(Eth.prototype, 'defaultAccount', {
|
||||
}
|
||||
});
|
||||
|
||||
var getBalance = new Method({
|
||||
name: 'getBalance',
|
||||
call: 'eth_getBalance',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: formatters.outputBigNumberFormatter
|
||||
});
|
||||
|
||||
var getStorageAt = new Method({
|
||||
name: 'getStorageAt',
|
||||
call: 'eth_getStorageAt',
|
||||
params: 3,
|
||||
inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var getCode = new Method({
|
||||
name: 'getCode',
|
||||
call: 'eth_getCode',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var getBlock = new Method({
|
||||
name: 'getBlock',
|
||||
call: blockCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
|
||||
outputFormatter: formatters.outputBlockFormatter
|
||||
});
|
||||
|
||||
var getUncle = new Method({
|
||||
name: 'getUncle',
|
||||
call: uncleCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
|
||||
outputFormatter: formatters.outputBlockFormatter,
|
||||
|
||||
});
|
||||
|
||||
var getCompilers = new Method({
|
||||
name: 'getCompilers',
|
||||
call: 'eth_getCompilers',
|
||||
params: 0
|
||||
});
|
||||
|
||||
var getBlockTransactionCount = new Method({
|
||||
name: 'getBlockTransactionCount',
|
||||
call: getBlockTransactionCountCall,
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var getBlockUncleCount = new Method({
|
||||
name: 'getBlockUncleCount',
|
||||
call: uncleCountCall,
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var getTransaction = new Method({
|
||||
name: 'getTransaction',
|
||||
call: 'eth_getTransactionByHash',
|
||||
params: 1,
|
||||
outputFormatter: formatters.outputTransactionFormatter
|
||||
});
|
||||
|
||||
var getTransactionFromBlock = new Method({
|
||||
name: 'getTransactionFromBlock',
|
||||
call: transactionFromBlockCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
|
||||
outputFormatter: formatters.outputTransactionFormatter
|
||||
});
|
||||
|
||||
var getTransactionReceipt = new Method({
|
||||
name: 'getTransactionReceipt',
|
||||
call: 'eth_getTransactionReceipt',
|
||||
params: 1,
|
||||
outputFormatter: formatters.outputTransactionReceiptFormatter
|
||||
});
|
||||
|
||||
var getTransactionCount = new Method({
|
||||
name: 'getTransactionCount',
|
||||
call: 'eth_getTransactionCount',
|
||||
params: 2,
|
||||
inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var sendRawTransaction = new Method({
|
||||
name: 'sendRawTransaction',
|
||||
call: 'eth_sendRawTransaction',
|
||||
params: 1,
|
||||
inputFormatter: [null]
|
||||
});
|
||||
|
||||
var sendTransaction = new Method({
|
||||
name: 'sendTransaction',
|
||||
call: 'eth_sendTransaction',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputTransactionFormatter]
|
||||
});
|
||||
|
||||
var call = new Method({
|
||||
name: 'call',
|
||||
call: 'eth_call',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var estimateGas = new Method({
|
||||
name: 'estimateGas',
|
||||
call: 'eth_estimateGas',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputCallFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var compileSolidity = new Method({
|
||||
name: 'compile.solidity',
|
||||
call: 'eth_compileSolidity',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var compileLLL = new Method({
|
||||
name: 'compile.lll',
|
||||
call: 'eth_compileLLL',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var compileSerpent = new Method({
|
||||
name: 'compile.serpent',
|
||||
call: 'eth_compileSerpent',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var submitWork = new Method({
|
||||
name: 'submitWork',
|
||||
call: 'eth_submitWork',
|
||||
params: 3
|
||||
});
|
||||
|
||||
var getWork = new Method({
|
||||
name: 'getWork',
|
||||
call: 'eth_getWork',
|
||||
params: 0
|
||||
});
|
||||
|
||||
var methods = [
|
||||
getBalance,
|
||||
getStorageAt,
|
||||
getCode,
|
||||
getBlock,
|
||||
getUncle,
|
||||
getCompilers,
|
||||
getBlockTransactionCount,
|
||||
getBlockUncleCount,
|
||||
getTransaction,
|
||||
getTransactionFromBlock,
|
||||
getTransactionReceipt,
|
||||
getTransactionCount,
|
||||
call,
|
||||
estimateGas,
|
||||
sendRawTransaction,
|
||||
sendTransaction,
|
||||
compileSolidity,
|
||||
compileLLL,
|
||||
compileSerpent,
|
||||
submitWork,
|
||||
getWork
|
||||
];
|
||||
|
||||
methods.forEach(function(method) { method.attachToObject(Eth.prototype) });
|
||||
/// @returns an array of objects describing web3.eth api properties
|
||||
|
||||
var properties = [
|
||||
new Property({
|
||||
name: 'coinbase',
|
||||
getter: 'eth_coinbase'
|
||||
}),
|
||||
new Property({
|
||||
name: 'mining',
|
||||
getter: 'eth_mining'
|
||||
}),
|
||||
new Property({
|
||||
name: 'hashrate',
|
||||
getter: 'eth_hashrate',
|
||||
outputFormatter: utils.toDecimal
|
||||
}),
|
||||
new Property({
|
||||
name: 'syncing',
|
||||
getter: 'eth_syncing',
|
||||
outputFormatter: formatters.outputSyncingFormatter
|
||||
}),
|
||||
new Property({
|
||||
name: 'gasPrice',
|
||||
getter: 'eth_gasPrice',
|
||||
var methods = function () {
|
||||
var getBalance = new Method({
|
||||
name: 'getBalance',
|
||||
call: 'eth_getBalance',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: formatters.outputBigNumberFormatter
|
||||
}),
|
||||
new Property({
|
||||
name: 'accounts',
|
||||
getter: 'eth_accounts'
|
||||
}),
|
||||
new Property({
|
||||
name: 'blockNumber',
|
||||
getter: 'eth_blockNumber',
|
||||
outputFormatter: utils.toDecimal
|
||||
})
|
||||
];
|
||||
});
|
||||
|
||||
properties.forEach(function(p) { p.attachToObject(Eth.prototype) });
|
||||
var getStorageAt = new Method({
|
||||
name: 'getStorageAt',
|
||||
call: 'eth_getStorageAt',
|
||||
params: 3,
|
||||
inputFormatter: [null, utils.toHex, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var getCode = new Method({
|
||||
name: 'getCode',
|
||||
call: 'eth_getCode',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var getBlock = new Method({
|
||||
name: 'getBlock',
|
||||
call: blockCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, function (val) { return !!val; }],
|
||||
outputFormatter: formatters.outputBlockFormatter
|
||||
});
|
||||
|
||||
var getUncle = new Method({
|
||||
name: 'getUncle',
|
||||
call: uncleCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
|
||||
outputFormatter: formatters.outputBlockFormatter,
|
||||
|
||||
});
|
||||
|
||||
var getCompilers = new Method({
|
||||
name: 'getCompilers',
|
||||
call: 'eth_getCompilers',
|
||||
params: 0
|
||||
});
|
||||
|
||||
var getBlockTransactionCount = new Method({
|
||||
name: 'getBlockTransactionCount',
|
||||
call: getBlockTransactionCountCall,
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var getBlockUncleCount = new Method({
|
||||
name: 'getBlockUncleCount',
|
||||
call: uncleCountCall,
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var getTransaction = new Method({
|
||||
name: 'getTransaction',
|
||||
call: 'eth_getTransactionByHash',
|
||||
params: 1,
|
||||
outputFormatter: formatters.outputTransactionFormatter
|
||||
});
|
||||
|
||||
var getTransactionFromBlock = new Method({
|
||||
name: 'getTransactionFromBlock',
|
||||
call: transactionFromBlockCall,
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputBlockNumberFormatter, utils.toHex],
|
||||
outputFormatter: formatters.outputTransactionFormatter
|
||||
});
|
||||
|
||||
var getTransactionReceipt = new Method({
|
||||
name: 'getTransactionReceipt',
|
||||
call: 'eth_getTransactionReceipt',
|
||||
params: 1,
|
||||
outputFormatter: formatters.outputTransactionReceiptFormatter
|
||||
});
|
||||
|
||||
var getTransactionCount = new Method({
|
||||
name: 'getTransactionCount',
|
||||
call: 'eth_getTransactionCount',
|
||||
params: 2,
|
||||
inputFormatter: [null, formatters.inputDefaultBlockNumberFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var sendRawTransaction = new Method({
|
||||
name: 'sendRawTransaction',
|
||||
call: 'eth_sendRawTransaction',
|
||||
params: 1,
|
||||
inputFormatter: [null]
|
||||
});
|
||||
|
||||
var sendTransaction = new Method({
|
||||
name: 'sendTransaction',
|
||||
call: 'eth_sendTransaction',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputTransactionFormatter]
|
||||
});
|
||||
|
||||
var call = new Method({
|
||||
name: 'call',
|
||||
call: 'eth_call',
|
||||
params: 2,
|
||||
inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter]
|
||||
});
|
||||
|
||||
var estimateGas = new Method({
|
||||
name: 'estimateGas',
|
||||
call: 'eth_estimateGas',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputCallFormatter],
|
||||
outputFormatter: utils.toDecimal
|
||||
});
|
||||
|
||||
var compileSolidity = new Method({
|
||||
name: 'compile.solidity',
|
||||
call: 'eth_compileSolidity',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var compileLLL = new Method({
|
||||
name: 'compile.lll',
|
||||
call: 'eth_compileLLL',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var compileSerpent = new Method({
|
||||
name: 'compile.serpent',
|
||||
call: 'eth_compileSerpent',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var submitWork = new Method({
|
||||
name: 'submitWork',
|
||||
call: 'eth_submitWork',
|
||||
params: 3
|
||||
});
|
||||
|
||||
var getWork = new Method({
|
||||
name: 'getWork',
|
||||
call: 'eth_getWork',
|
||||
params: 0
|
||||
});
|
||||
|
||||
return [
|
||||
getBalance,
|
||||
getStorageAt,
|
||||
getCode,
|
||||
getBlock,
|
||||
getUncle,
|
||||
getCompilers,
|
||||
getBlockTransactionCount,
|
||||
getBlockUncleCount,
|
||||
getTransaction,
|
||||
getTransactionFromBlock,
|
||||
getTransactionReceipt,
|
||||
getTransactionCount,
|
||||
call,
|
||||
estimateGas,
|
||||
sendRawTransaction,
|
||||
sendTransaction,
|
||||
compileSolidity,
|
||||
compileLLL,
|
||||
compileSerpent,
|
||||
submitWork,
|
||||
getWork
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
var properties = function () {
|
||||
return [
|
||||
new Property({
|
||||
name: 'coinbase',
|
||||
getter: 'eth_coinbase'
|
||||
}),
|
||||
new Property({
|
||||
name: 'mining',
|
||||
getter: 'eth_mining'
|
||||
}),
|
||||
new Property({
|
||||
name: 'hashrate',
|
||||
getter: 'eth_hashrate',
|
||||
outputFormatter: utils.toDecimal
|
||||
}),
|
||||
new Property({
|
||||
name: 'syncing',
|
||||
getter: 'eth_syncing',
|
||||
outputFormatter: formatters.outputSyncingFormatter
|
||||
}),
|
||||
new Property({
|
||||
name: 'gasPrice',
|
||||
getter: 'eth_gasPrice',
|
||||
outputFormatter: formatters.outputBigNumberFormatter
|
||||
}),
|
||||
new Property({
|
||||
name: 'accounts',
|
||||
getter: 'eth_accounts'
|
||||
}),
|
||||
new Property({
|
||||
name: 'blockNumber',
|
||||
getter: 'eth_blockNumber',
|
||||
outputFormatter: utils.toDecimal
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
Eth.prototype.contract = function (abi) {
|
||||
var factory = new Contract(this.web3, abi);
|
||||
return factory;
|
||||
};
|
||||
|
||||
module.exports = Eth;
|
||||
|
||||
|
@ -24,21 +24,29 @@ var utils = require('../../utils/utils');
|
||||
var Property = require('../property');
|
||||
|
||||
var Net = function (web3) {
|
||||
this.web3 = web3;
|
||||
this._requestManager = web3._requestManager;
|
||||
|
||||
var self = this;
|
||||
|
||||
properties().forEach(function(p) {
|
||||
p.attachToObject(self);
|
||||
p.setRequestManager(web3._requestManager);
|
||||
});
|
||||
};
|
||||
|
||||
/// @returns an array of objects describing web3.eth api properties
|
||||
var properties = [
|
||||
new Property({
|
||||
name: 'listening',
|
||||
getter: 'net_listening'
|
||||
}),
|
||||
new Property({
|
||||
name: 'peerCount',
|
||||
getter: 'net_peerCount',
|
||||
outputFormatter: utils.toDecimal
|
||||
})
|
||||
];
|
||||
|
||||
var properties = function () {
|
||||
return [
|
||||
new Property({
|
||||
name: 'listening',
|
||||
getter: 'net_listening'
|
||||
}),
|
||||
new Property({
|
||||
name: 'peerCount',
|
||||
getter: 'net_peerCount',
|
||||
outputFormatter: utils.toDecimal
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
module.exports = Net;
|
||||
|
@ -24,49 +24,59 @@ var Method = require('../method');
|
||||
var formatters = require('../formatters');
|
||||
|
||||
var Shh = function (web3) {
|
||||
this.web3 = web3;
|
||||
this._requestManager = web3._requestManager;
|
||||
|
||||
var self = this;
|
||||
|
||||
methods().forEach(function(method) {
|
||||
method.attachToObject(self);
|
||||
method.setRequestManager(web3._requestManager);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
var post = new Method({
|
||||
name: 'post',
|
||||
call: 'shh_post',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputPostFormatter]
|
||||
});
|
||||
|
||||
var newIdentity = new Method({
|
||||
name: 'newIdentity',
|
||||
call: 'shh_newIdentity',
|
||||
params: 0
|
||||
});
|
||||
var methods = function () {
|
||||
|
||||
var hasIdentity = new Method({
|
||||
name: 'hasIdentity',
|
||||
call: 'shh_hasIdentity',
|
||||
params: 1
|
||||
});
|
||||
var post = new Method({
|
||||
name: 'post',
|
||||
call: 'shh_post',
|
||||
params: 1,
|
||||
inputFormatter: [formatters.inputPostFormatter]
|
||||
});
|
||||
|
||||
var newGroup = new Method({
|
||||
name: 'newGroup',
|
||||
call: 'shh_newGroup',
|
||||
params: 0
|
||||
});
|
||||
var newIdentity = new Method({
|
||||
name: 'newIdentity',
|
||||
call: 'shh_newIdentity',
|
||||
params: 0
|
||||
});
|
||||
|
||||
var addToGroup = new Method({
|
||||
name: 'addToGroup',
|
||||
call: 'shh_addToGroup',
|
||||
params: 0
|
||||
});
|
||||
var hasIdentity = new Method({
|
||||
name: 'hasIdentity',
|
||||
call: 'shh_hasIdentity',
|
||||
params: 1
|
||||
});
|
||||
|
||||
var methods = [
|
||||
post,
|
||||
newIdentity,
|
||||
hasIdentity,
|
||||
newGroup,
|
||||
addToGroup
|
||||
];
|
||||
var newGroup = new Method({
|
||||
name: 'newGroup',
|
||||
call: 'shh_newGroup',
|
||||
params: 0
|
||||
});
|
||||
|
||||
methods.forEach(function(method) { method.attachToObject(Shh.prototype) });
|
||||
var addToGroup = new Method({
|
||||
name: 'addToGroup',
|
||||
call: 'shh_addToGroup',
|
||||
params: 0
|
||||
});
|
||||
|
||||
return [
|
||||
post,
|
||||
newIdentity,
|
||||
hasIdentity,
|
||||
newGroup,
|
||||
addToGroup
|
||||
];
|
||||
};
|
||||
|
||||
module.exports = Shh;
|
||||
|
||||
|
@ -27,8 +27,8 @@ var icapRegistrarAbi= require('../contracts/ICAPRegistrar.json');
|
||||
var globalNameregAddress = '0xc6d9d2cd449a754c494264e1809c50e34d64562b';
|
||||
var ibanNameregAddress = '0xa1a111bc074c9cfa781f0c38e63bd51c91b8af00';
|
||||
|
||||
module.exports = {
|
||||
namereg: contract(globalRegistrarAbi).at(globalNameregAddress),
|
||||
ibanNamereg: contract(icapRegistrarAbi).at(ibanNameregAddress)
|
||||
};
|
||||
//module.exports = {
|
||||
//namereg: contract(globalRegistrarAbi).at(globalNameregAddress),
|
||||
//ibanNamereg: contract(icapRegistrarAbi).at(ibanNameregAddress)
|
||||
//};
|
||||
|
||||
|
@ -29,6 +29,11 @@ var Property = function (options) {
|
||||
this.setter = options.setter;
|
||||
this.outputFormatter = options.outputFormatter;
|
||||
this.inputFormatter = options.inputFormatter;
|
||||
this.requestManager = null;
|
||||
};
|
||||
|
||||
Property.prototype.setRequestManager = function (rm) {
|
||||
this.requestManager = rm;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -66,6 +71,14 @@ Property.prototype.extractCallback = function (args) {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Should attach function to method
|
||||
*
|
||||
* @method attachToObject
|
||||
* @param {Object}
|
||||
* @param {Function}
|
||||
*/
|
||||
Property.prototype.attachToObject = function (obj) {
|
||||
var proto = {
|
||||
get: this.buildGet()
|
||||
@ -90,7 +103,7 @@ var asyncGetterName = function (name) {
|
||||
Property.prototype.buildGet = function () {
|
||||
var property = this;
|
||||
return function get() {
|
||||
return property.formatOutput(this.web3._requestManager.send({
|
||||
return property.formatOutput(property.requestManager.send({
|
||||
method: property.getter
|
||||
}));
|
||||
};
|
||||
@ -99,7 +112,7 @@ Property.prototype.buildGet = function () {
|
||||
Property.prototype.buildAsyncGet = function () {
|
||||
var property = this;
|
||||
return function get(callback) {
|
||||
this.web3._requestManager.sendAsync({
|
||||
property.requestManager.sendAsync({
|
||||
method: property.getter
|
||||
}, function (err, result) {
|
||||
callback(err, property.formatOutput(result));
|
||||
@ -107,84 +120,4 @@ Property.prototype.buildAsyncGet = function () {
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Should attach function to method
|
||||
*
|
||||
* @method attachToObject
|
||||
* @param {Object}
|
||||
* @param {Function}
|
||||
*/
|
||||
//Property.prototype.attachToObject = function (obj) {
|
||||
//var proto = {
|
||||
//get: this.get.bind(this),
|
||||
//};
|
||||
|
||||
//var names = this.name.split('.');
|
||||
//var name = names[0];
|
||||
//if (names.length > 1) {
|
||||
//obj[names[0]] = obj[names[0]] || {};
|
||||
//obj = obj[names[0]];
|
||||
//name = names[1];
|
||||
//}
|
||||
|
||||
//Object.defineProperty(obj, name, proto);
|
||||
|
||||
//var toAsyncName = function (prefix, name) {
|
||||
//return prefix + name.charAt(0).toUpperCase() + name.slice(1);
|
||||
//};
|
||||
|
||||
//var func = this.getAsync.bind(this);
|
||||
//func.request = this.request.bind(this);
|
||||
|
||||
//obj[toAsyncName('get', name)] = func;
|
||||
//};
|
||||
|
||||
/**
|
||||
* Should be used to get value of the property
|
||||
*
|
||||
* @method get
|
||||
* @return {Object} value of the property
|
||||
*/
|
||||
//Property.prototype.get = function () {
|
||||
//return this.formatOutput(RequestManager.getInstance().send({
|
||||
//method: this.getter
|
||||
//}));
|
||||
//};
|
||||
|
||||
/**
|
||||
* Should be used to asynchrounously get value of property
|
||||
*
|
||||
* @method getAsync
|
||||
* @param {Function}
|
||||
*/
|
||||
//Property.prototype.getAsync = function (callback) {
|
||||
//var self = this;
|
||||
//RequestManager.getInstance().sendAsync({
|
||||
//method: this.getter
|
||||
//}, function (err, result) {
|
||||
//if (err) {
|
||||
//return callback(err);
|
||||
//}
|
||||
//callback(err, self.formatOutput(result));
|
||||
//});
|
||||
//};
|
||||
|
||||
/**
|
||||
* Should be called to create pure JSONRPC request which can be used in batch request
|
||||
*
|
||||
* @method request
|
||||
* @param {...} params
|
||||
* @return {Object} jsonrpc request
|
||||
*/
|
||||
//Property.prototype.request = function () {
|
||||
//var payload = {
|
||||
//method: this.getter,
|
||||
//params: [],
|
||||
//callback: this.extractCallback(Array.prototype.slice.call(arguments))
|
||||
//};
|
||||
//payload.format = this.formatOutput.bind(this);
|
||||
//return payload;
|
||||
//};
|
||||
|
||||
module.exports = Property;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index');
|
||||
var Web3 = require('../index');
|
||||
var web3 = new Web3();
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
|
||||
// use sendTransaction as dummy
|
||||
|
@ -1,9 +1,11 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index');
|
||||
var Web3 = require('../index');
|
||||
var web3 = new Web3();
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
var bn = require('bignumber.js');
|
||||
|
||||
/*
|
||||
describe('lib/web3/batch', function () {
|
||||
describe('execute', function () {
|
||||
it('should execute batch request', function (done) {
|
||||
@ -199,3 +201,4 @@ describe('lib/web3/batch', function () {
|
||||
});
|
||||
});
|
||||
|
||||
*/
|
||||
|
@ -1,12 +1,14 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index');
|
||||
var Web3 = require('../index');
|
||||
var web3 = new Web3();
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
var FakeHttpProvider2 = require('./helpers/FakeHttpProvider2');
|
||||
var utils = require('../lib/utils/utils');
|
||||
var BigNumber = require('bignumber.js');
|
||||
var sha3 = require('../lib/utils/sha3');
|
||||
|
||||
/*
|
||||
var desc = [{
|
||||
"name": "balance(address)",
|
||||
"type": "function",
|
||||
@ -571,3 +573,4 @@ describe('contract', function () {
|
||||
});
|
||||
});
|
||||
|
||||
*/
|
||||
|
@ -31,7 +31,7 @@ var tests = [{
|
||||
}
|
||||
}];
|
||||
|
||||
|
||||
/*
|
||||
var testPolling = function (tests) {
|
||||
|
||||
describe('web3.eth.filter.polling', function () {
|
||||
@ -118,3 +118,4 @@ var testPolling = function (tests) {
|
||||
|
||||
testPolling(tests);
|
||||
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
var chai = require('chai');
|
||||
var BigNumber = require('bignumber.js');
|
||||
var web3 = require('../index');
|
||||
var utils = require('../lib/utils/utils.js');
|
||||
var assert = chai.assert;
|
||||
|
||||
var tests = [
|
||||
@ -14,7 +14,7 @@ describe('lib/utils/utils', function () {
|
||||
describe('fromAscii', function () {
|
||||
tests.forEach(function (test) {
|
||||
it('should turn ' + test.value + ' to ' + test.expected, function () {
|
||||
assert.strictEqual(web3.fromAscii(test.value), test.expected);
|
||||
assert.strictEqual(utils.fromAscii(test.value), test.expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
var chai = require('chai');
|
||||
var BigNumber = require('bignumber.js');
|
||||
var web3 = require('../index');
|
||||
var utils = require('../lib/utils/utils.js');
|
||||
var assert = chai.assert;
|
||||
|
||||
var tests = [
|
||||
@ -13,7 +13,7 @@ describe('lib/utils/utils', function () {
|
||||
describe('fromUtf8', function () {
|
||||
tests.forEach(function (test) {
|
||||
it('should turn ' + test.value + ' to ' + test.expected, function () {
|
||||
assert.strictEqual(web3.fromUtf8(test.value), test.expected);
|
||||
assert.strictEqual(utils.fromUtf8(test.value), test.expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
var chai = require('chai');
|
||||
var BigNumber = require('bignumber.js');
|
||||
var web3 = require('../index');
|
||||
var utils = require('../lib/utils/utils.js');
|
||||
var assert = chai.assert;
|
||||
|
||||
var tests = [
|
||||
@ -14,7 +14,7 @@ describe('lib/utils/utils', function () {
|
||||
describe('toAscii', function () {
|
||||
tests.forEach(function (test) {
|
||||
it('should turn ' + test.value + ' to ' + test.expected, function () {
|
||||
assert.strictEqual(web3.toAscii(test.value), test.expected);
|
||||
assert.strictEqual(utils.toAscii(test.value), test.expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
var chai = require('chai');
|
||||
var BigNumber = require('bignumber.js');
|
||||
var web3 = require('../index');
|
||||
var utils = require('../lib/utils/utils.js');
|
||||
var assert = chai.assert;
|
||||
|
||||
var tests = [
|
||||
@ -13,7 +13,7 @@ describe('lib/utils/utils', function () {
|
||||
describe('toUtf8', function () {
|
||||
tests.forEach(function (test) {
|
||||
it('should turn ' + test.value + ' to ' + test.expected, function () {
|
||||
assert.strictEqual(web3.toUtf8(test.value), test.expected);
|
||||
assert.strictEqual(utils.toUtf8(test.value), test.expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,7 +1,8 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
var web3 = require('../lib/web3');
|
||||
var Web3 = require('../lib/web3');
|
||||
var web3 = new Web3();
|
||||
|
||||
|
||||
var tests = [{
|
||||
|
@ -1,6 +1,7 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index');
|
||||
var Web3 = require('../index');
|
||||
var web3 = new Web3();
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
|
||||
var method = 'listening';
|
||||
|
@ -1,6 +1,7 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index.js');
|
||||
var Web3 = require('../index.js');
|
||||
var web3 = new Web3();
|
||||
var u = require('./helpers/test.utils.js');
|
||||
|
||||
describe('web3.net', function() {
|
||||
|
@ -1,6 +1,7 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var web3 = require('../index');
|
||||
var Web3 = require('../index');
|
||||
var web3 = new Web3();
|
||||
var FakeHttpProvider = require('./helpers/FakeHttpProvider');
|
||||
|
||||
var method = 'peerCount';
|
||||
|
@ -58,6 +58,7 @@ var tests = [{
|
||||
call: 'shh_newFilter'
|
||||
}];
|
||||
|
||||
/*
|
||||
describe('shh', function () {
|
||||
describe(method, function () {
|
||||
tests.forEach(function (test, index) {
|
||||
@ -80,5 +81,6 @@ describe('shh', function () {
|
||||
});
|
||||
});
|
||||
});
|
||||
*/
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user