mirror of
https://github.com/status-im/web3.js.git
synced 2025-02-23 03:28:07 +00:00
Merge branch 'develop' of http://github.com/ethereum/web3.js into develop
This commit is contained in:
commit
b165acdd46
@ -14,7 +14,7 @@
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/**
|
||||
/**
|
||||
* @file formatters.js
|
||||
* @author Marek Kotewicz <marek@ethdev.com>
|
||||
* @date 2015
|
||||
@ -37,7 +37,7 @@ var SolidityParam = require('./param');
|
||||
*/
|
||||
var formatInputInt = function (value) {
|
||||
BigNumber.config(c.ETH_BIGNUMBER_ROUNDING_MODE);
|
||||
var result = utils.padLeft(utils.toTwosComplement(value).round().toString(16), 64);
|
||||
var result = utils.padLeft(utils.toTwosComplement(value).toString(16), 64);
|
||||
return new SolidityParam(result);
|
||||
};
|
||||
|
||||
@ -158,7 +158,7 @@ var formatOutputUInt = function (param) {
|
||||
* @returns {BigNumber} input bytes formatted to real
|
||||
*/
|
||||
var formatOutputReal = function (param) {
|
||||
return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
|
||||
return formatOutputInt(param).dividedBy(new BigNumber(2).pow(128));
|
||||
};
|
||||
|
||||
/**
|
||||
@ -169,7 +169,7 @@ var formatOutputReal = function (param) {
|
||||
* @returns {BigNumber} input bytes formatted to ureal
|
||||
*/
|
||||
var formatOutputUReal = function (param) {
|
||||
return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
|
||||
return formatOutputUInt(param).dividedBy(new BigNumber(2).pow(128));
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -375,7 +375,7 @@ var toBigNumber = function(number) {
|
||||
* @return {BigNumber}
|
||||
*/
|
||||
var toTwosComplement = function (number) {
|
||||
var bigNumber = toBigNumber(number);
|
||||
var bigNumber = toBigNumber(number).round();
|
||||
if (bigNumber.lessThan(0)) {
|
||||
return new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(bigNumber).plus(1);
|
||||
}
|
||||
|
@ -33,6 +33,8 @@ module.exports = {
|
||||
InvalidResponse: function (result){
|
||||
var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
|
||||
return new Error(message);
|
||||
},
|
||||
ConnectionTimeout: function (ms){
|
||||
return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -28,11 +28,11 @@ var errors = require('./errors');
|
||||
|
||||
// workaround to use httpprovider in different envs
|
||||
var XMLHttpRequest; // jshint ignore: line
|
||||
var XHR2 = require('xhr2');; // jshint ignore: line
|
||||
|
||||
// browser
|
||||
if (typeof window !== 'undefined' && window.XMLHttpRequest) {
|
||||
XMLHttpRequest = window.XMLHttpRequest; // jshint ignore: line
|
||||
|
||||
// node
|
||||
} else {
|
||||
XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest; // jshint ignore: line
|
||||
@ -41,8 +41,9 @@ if (typeof window !== 'undefined' && window.XMLHttpRequest) {
|
||||
/**
|
||||
* HttpProvider should be used to send rpc calls over http
|
||||
*/
|
||||
var HttpProvider = function (host) {
|
||||
var HttpProvider = function (host, timeout) {
|
||||
this.host = host || 'http://localhost:8545';
|
||||
this.timeout = timeout || 0;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -53,7 +54,15 @@ var HttpProvider = function (host) {
|
||||
* @return {XMLHttpRequest} object
|
||||
*/
|
||||
HttpProvider.prototype.prepareRequest = function (async) {
|
||||
var request = new XMLHttpRequest();
|
||||
var request;
|
||||
|
||||
if (async) {
|
||||
request = new XHR2();
|
||||
request.timeout = this.timeout;
|
||||
}else {
|
||||
request = new XMLHttpRequest();
|
||||
}
|
||||
|
||||
request.open('POST', this.host, async);
|
||||
request.setRequestHeader('Content-Type','application/json');
|
||||
return request;
|
||||
@ -80,7 +89,7 @@ HttpProvider.prototype.send = function (payload) {
|
||||
try {
|
||||
result = JSON.parse(result);
|
||||
} catch(e) {
|
||||
throw errors.InvalidResponse(request.responseText);
|
||||
throw errors.InvalidResponse(request.responseText);
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -94,23 +103,27 @@ HttpProvider.prototype.send = function (payload) {
|
||||
* @param {Function} callback triggered on end with (err, result)
|
||||
*/
|
||||
HttpProvider.prototype.sendAsync = function (payload, callback) {
|
||||
var request = this.prepareRequest(true);
|
||||
var request = this.prepareRequest(true);
|
||||
|
||||
request.onreadystatechange = function() {
|
||||
if (request.readyState === 4) {
|
||||
if (request.readyState === 4 && request.timeout !== 1) {
|
||||
var result = request.responseText;
|
||||
var error = null;
|
||||
|
||||
try {
|
||||
result = JSON.parse(result);
|
||||
} catch(e) {
|
||||
error = errors.InvalidResponse(request.responseText);
|
||||
error = errors.InvalidResponse(request.responseText);
|
||||
}
|
||||
|
||||
callback(error, result);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
request.ontimeout = function() {
|
||||
callback(errors.ConnectionTimeout(this.timeout));
|
||||
};
|
||||
|
||||
try {
|
||||
request.send(JSON.stringify(payload));
|
||||
} catch(error) {
|
||||
@ -139,4 +152,3 @@ HttpProvider.prototype.isConnected = function() {
|
||||
};
|
||||
|
||||
module.exports = HttpProvider;
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
"bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2",
|
||||
"crypto-js": "^3.1.4",
|
||||
"utf8": "^2.1.1",
|
||||
"xhr2": "*",
|
||||
"xmlhttprequest": "*"
|
||||
},
|
||||
"browser": {
|
||||
|
37
test/helpers/FakeXHR2.js
Normal file
37
test/helpers/FakeXHR2.js
Normal file
@ -0,0 +1,37 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var util = require('util');
|
||||
|
||||
var FakeXHR2 = function () {
|
||||
this.responseText = "{}";
|
||||
this.readyState = 4;
|
||||
this.onreadystatechange = null;
|
||||
this.async = true;
|
||||
this.headers = {
|
||||
'Content-Type': 'text/plain'
|
||||
};
|
||||
};
|
||||
|
||||
FakeXHR2.prototype.open = function (method, host, async) {
|
||||
assert.equal(method, 'POST');
|
||||
assert.notEqual(host, null);
|
||||
assert.equal(async === true, true);
|
||||
this.async = async;
|
||||
};
|
||||
|
||||
FakeXHR2.prototype.setRequestHeader = function(name, value) {
|
||||
this.headers[name] = value;
|
||||
};
|
||||
|
||||
FakeXHR2.prototype.send = function (payload) {
|
||||
assert.equal(typeof payload, 'string');
|
||||
if (this.async) {
|
||||
assert.equal(typeof this.onreadystatechange, 'function');
|
||||
this.onreadystatechange();
|
||||
return;
|
||||
}
|
||||
return this.responseText;
|
||||
};
|
||||
|
||||
module.exports = FakeXHR2;
|
@ -5,6 +5,7 @@ var SandboxedModule = require('sandboxed-module');
|
||||
SandboxedModule.registerBuiltInSourceTransformer('istanbul');
|
||||
var HttpProvider = SandboxedModule.require('../lib/web3/httpprovider', {
|
||||
requires: {
|
||||
'xhr2': require('./helpers/FakeXHR2'),
|
||||
'xmlhttprequest': require('./helpers/FakeXMLHttpRequest')
|
||||
},
|
||||
singleOnly: true
|
||||
@ -28,7 +29,7 @@ describe('lib/web3/httpprovider', function () {
|
||||
assert.equal(typeof result, 'object');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('isConnected', function () {
|
||||
@ -36,7 +37,6 @@ describe('lib/web3/httpprovider', function () {
|
||||
var provider = new HttpProvider();
|
||||
|
||||
assert.isBoolean(provider.isConnected());
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
21
test/soldity.formatters.formatInputInt.js
Normal file
21
test/soldity.formatters.formatInputInt.js
Normal file
@ -0,0 +1,21 @@
|
||||
var chai = require('chai');
|
||||
var assert = chai.assert;
|
||||
var formatters = require('../lib/solidity/formatters.js');
|
||||
var SolidityParam = require('../lib/solidity/param');
|
||||
|
||||
var tests = [
|
||||
{ input: 1, result: new SolidityParam('0000000000000000000000000000000000000000000000000000000000000001') },
|
||||
{ input: 1.1, result: new SolidityParam('0000000000000000000000000000000000000000000000000000000000000001') },
|
||||
{ input: -1.1, result: new SolidityParam('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') },
|
||||
{ input: -1, result: new SolidityParam('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') }
|
||||
];
|
||||
|
||||
describe('formatters', function () {
|
||||
describe('inputAddressFormatter', function () {
|
||||
tests.forEach(function(test){
|
||||
it('should return the correct value', function () {
|
||||
assert.deepEqual(formatters.formatInputInt(test.input), test.result);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user