BigNumber support
This commit is contained in:
parent
ec74fc05d4
commit
fbcc6d0d25
|
@ -27,6 +27,8 @@ if ("build" !== 'build') {/*
|
|||
var web3 = require('./web3'); // jshint ignore:line
|
||||
*/}
|
||||
|
||||
var BigNumber = require('bignumber.js');
|
||||
|
||||
// TODO: make these be actually accurate instead of falling back onto JS's doubles.
|
||||
var hexToDec = function (hex) {
|
||||
return parseInt(hex, 16).toString();
|
||||
|
@ -85,24 +87,26 @@ var namedType = function (name) {
|
|||
var setupInputTypes = function () {
|
||||
|
||||
/// Formats input value to byte representation of int
|
||||
/// If value is negative, return it's two's complement
|
||||
/// @returns right-aligned byte representation of int
|
||||
var formatInt = function (value) {
|
||||
var padding = 32 * 2;
|
||||
if (typeof value === 'number') {
|
||||
if (value < 0) {
|
||||
|
||||
// two's complement
|
||||
// TODO: fix big numbers support
|
||||
value = ((value) >>> 0).toString(16);
|
||||
return padLeft(value, padding, 'f');
|
||||
}
|
||||
value = value.toString(16);
|
||||
|
||||
if (value instanceof BigNumber) {
|
||||
if (value.lessThan(0))
|
||||
value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
|
||||
else
|
||||
value = value.toString(16);
|
||||
}
|
||||
else if (typeof value === 'number') {
|
||||
if (value < 0)
|
||||
value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
|
||||
else
|
||||
value = new BigNumber(value).toString(16);
|
||||
}
|
||||
else if (value.indexOf('0x') === 0)
|
||||
value = value.substr(2);
|
||||
else if (typeof value === 'string')
|
||||
value = value.toHex(value);
|
||||
value = new BigNumber(value).toString(16);
|
||||
else
|
||||
value = (+value).toString(16);
|
||||
return padLeft(value, padding);
|
||||
|
@ -295,7 +299,7 @@ module.exports = {
|
|||
};
|
||||
|
||||
|
||||
},{}],2:[function(require,module,exports){
|
||||
},{"bignumber.js":undefined}],2:[function(require,module,exports){
|
||||
/*
|
||||
This file is part of ethereum.js.
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -3,6 +3,7 @@
|
|||
|
||||
<head>
|
||||
<script type="text/javascript" src="js/es6-promise/promise.min.js"></script>
|
||||
<script type="text/javascript" src="../node_modules/bignumber.js/bignumber.min.js"></script>
|
||||
<script type="text/javascript" src="../dist/ethereum.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ gulp.task('uglify', ['build'], function(){
|
|||
return uglifyFile('ethereum');
|
||||
});
|
||||
|
||||
gulp.task('uglify', ['buildDev'], function(){
|
||||
gulp.task('uglifyDev', ['buildDev'], function(){
|
||||
return uglifyFile('ethereum');
|
||||
});
|
||||
|
||||
|
@ -99,6 +99,6 @@ gulp.task('watch', function() {
|
|||
});
|
||||
|
||||
gulp.task('release', ['bower', 'lint', 'build', 'uglify']);
|
||||
gulp.task('dev', ['bower', 'lint', 'buildDev', 'uglify']);
|
||||
gulp.task('dev', ['bower', 'lint', 'buildDev', 'uglifyDev']);
|
||||
gulp.task('default', ['dev']);
|
||||
|
||||
|
|
26
lib/abi.js
26
lib/abi.js
|
@ -26,6 +26,8 @@ if (process.env.NODE_ENV !== 'build') {
|
|||
var web3 = require('./web3'); // jshint ignore:line
|
||||
}
|
||||
|
||||
var BigNumber = require('bignumber.js');
|
||||
|
||||
// TODO: make these be actually accurate instead of falling back onto JS's doubles.
|
||||
var hexToDec = function (hex) {
|
||||
return parseInt(hex, 16).toString();
|
||||
|
@ -84,24 +86,26 @@ var namedType = function (name) {
|
|||
var setupInputTypes = function () {
|
||||
|
||||
/// Formats input value to byte representation of int
|
||||
/// If value is negative, return it's two's complement
|
||||
/// @returns right-aligned byte representation of int
|
||||
var formatInt = function (value) {
|
||||
var padding = 32 * 2;
|
||||
if (typeof value === 'number') {
|
||||
if (value < 0) {
|
||||
|
||||
// two's complement
|
||||
// TODO: fix big numbers support
|
||||
value = ((value) >>> 0).toString(16);
|
||||
return padLeft(value, padding, 'f');
|
||||
}
|
||||
value = value.toString(16);
|
||||
|
||||
if (value instanceof BigNumber) {
|
||||
if (value.lessThan(0))
|
||||
value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
|
||||
else
|
||||
value = value.toString(16);
|
||||
}
|
||||
else if (typeof value === 'number') {
|
||||
if (value < 0)
|
||||
value = new BigNumber("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 16).plus(value).plus(1).toString(16);
|
||||
else
|
||||
value = new BigNumber(value).toString(16);
|
||||
}
|
||||
else if (value.indexOf('0x') === 0)
|
||||
value = value.substr(2);
|
||||
else if (typeof value === 'string')
|
||||
value = value.toHex(value);
|
||||
value = new BigNumber(value).toString(16);
|
||||
else
|
||||
value = (+value).toString(16);
|
||||
return padLeft(value, padding);
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
"dependencies": {
|
||||
"es6-promise": "*",
|
||||
"ws": "*",
|
||||
"xmlhttprequest": "*"
|
||||
"xmlhttprequest": "*",
|
||||
"bignumber.js": ">=2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bower": ">=1.3.0",
|
||||
|
|
Loading…
Reference in New Issue