forked from cerc-io/plugeth
negative integers support
This commit is contained in:
parent
f85f77f6cc
commit
46b932ccc0
16
lib/abi.js
16
lib/abi.js
@ -57,9 +57,10 @@ var findMethodIndex = function (json, methodName) {
|
|||||||
|
|
||||||
/// @param string string to be padded
|
/// @param string string to be padded
|
||||||
/// @param number of characters that result string should have
|
/// @param number of characters that result string should have
|
||||||
|
/// @param sign, by default 0
|
||||||
/// @returns right aligned string
|
/// @returns right aligned string
|
||||||
var padLeft = function (string, chars) {
|
var padLeft = function (string, chars, sign) {
|
||||||
return new Array(chars - string.length + 1).join("0") + string;
|
return new Array(chars - string.length + 1).join(sign ? sign : "0") + string;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// @param expected type prefix (string)
|
/// @param expected type prefix (string)
|
||||||
@ -86,8 +87,17 @@ var setupInputTypes = function () {
|
|||||||
/// @returns right-aligned byte representation of int
|
/// @returns right-aligned byte representation of int
|
||||||
var formatInt = function (value) {
|
var formatInt = function (value) {
|
||||||
var padding = 32 * 2;
|
var padding = 32 * 2;
|
||||||
if (typeof value === 'number')
|
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);
|
value = value.toString(16);
|
||||||
|
|
||||||
|
}
|
||||||
else if (value.indexOf('0x') === 0)
|
else if (value.indexOf('0x') === 0)
|
||||||
value = value.substr(2);
|
value = value.substr(2);
|
||||||
else if (typeof value === 'string')
|
else if (typeof value === 'string')
|
||||||
|
@ -55,7 +55,7 @@ describe('abi', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse input uint', function() {
|
it('should parse input uint256', function() {
|
||||||
|
|
||||||
// given
|
// given
|
||||||
var d = clone(description);
|
var d = clone(description);
|
||||||
@ -88,6 +88,9 @@ describe('abi', function() {
|
|||||||
// then
|
// then
|
||||||
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
||||||
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
||||||
|
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||||
|
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
|
||||||
|
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -106,6 +109,9 @@ describe('abi', function() {
|
|||||||
// then
|
// then
|
||||||
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
||||||
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
||||||
|
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||||
|
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
|
||||||
|
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -124,6 +130,9 @@ describe('abi', function() {
|
|||||||
// then
|
// then
|
||||||
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
assert.equal(parser.test(1), "0000000000000000000000000000000000000000000000000000000000000001");
|
||||||
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
assert.equal(parser.test(10), "000000000000000000000000000000000000000000000000000000000000000a");
|
||||||
|
assert.equal(parser.test(-1), "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
||||||
|
assert.equal(parser.test(-2), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
|
||||||
|
assert.equal(parser.test(-16), "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0");
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user