encoding real on input
This commit is contained in:
parent
86b417e83f
commit
af54832d24
|
@ -117,6 +117,13 @@ var formatInputBool = function (value) {
|
||||||
return '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');
|
return '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Formats input value to byte representation of real
|
||||||
|
/// Values are multiplied by 2^m and encoded as integers
|
||||||
|
/// @returns byte representation of real
|
||||||
|
var formatInputReal = function (value) {
|
||||||
|
return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
|
||||||
|
};
|
||||||
|
|
||||||
var dynamicTypeBytes = function (type, value) {
|
var dynamicTypeBytes = function (type, value) {
|
||||||
// TODO: decide what to do with array of strings
|
// TODO: decide what to do with array of strings
|
||||||
if (arrayType(type) || prefixedType('string')(type))
|
if (arrayType(type) || prefixedType('string')(type))
|
||||||
|
@ -133,8 +140,8 @@ var setupInputTypes = function () {
|
||||||
{ type: prefixedType('int'), format: formatInputInt },
|
{ type: prefixedType('int'), format: formatInputInt },
|
||||||
{ type: prefixedType('hash'), format: formatInputInt },
|
{ type: prefixedType('hash'), format: formatInputInt },
|
||||||
{ type: prefixedType('string'), format: formatInputString },
|
{ type: prefixedType('string'), format: formatInputString },
|
||||||
{ type: prefixedType('real'), format: formatInputInt },
|
{ type: prefixedType('real'), format: formatInputReal },
|
||||||
{ type: prefixedType('ureal'), format: formatInputInt },
|
{ type: prefixedType('ureal'), format: formatInputReal },
|
||||||
{ type: namedType('address'), format: formatInputInt },
|
{ type: namedType('address'), format: formatInputInt },
|
||||||
{ type: namedType('bool'), format: formatInputBool }
|
{ type: namedType('bool'), format: formatInputBool }
|
||||||
];
|
];
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
11
lib/abi.js
11
lib/abi.js
|
@ -116,6 +116,13 @@ var formatInputBool = function (value) {
|
||||||
return '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');
|
return '000000000000000000000000000000000000000000000000000000000000000' + (value ? '1' : '0');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Formats input value to byte representation of real
|
||||||
|
/// Values are multiplied by 2^m and encoded as integers
|
||||||
|
/// @returns byte representation of real
|
||||||
|
var formatInputReal = function (value) {
|
||||||
|
return formatInputInt(new BigNumber(value).times(new BigNumber(2).pow(128)));
|
||||||
|
};
|
||||||
|
|
||||||
var dynamicTypeBytes = function (type, value) {
|
var dynamicTypeBytes = function (type, value) {
|
||||||
// TODO: decide what to do with array of strings
|
// TODO: decide what to do with array of strings
|
||||||
if (arrayType(type) || prefixedType('string')(type))
|
if (arrayType(type) || prefixedType('string')(type))
|
||||||
|
@ -132,8 +139,8 @@ var setupInputTypes = function () {
|
||||||
{ type: prefixedType('int'), format: formatInputInt },
|
{ type: prefixedType('int'), format: formatInputInt },
|
||||||
{ type: prefixedType('hash'), format: formatInputInt },
|
{ type: prefixedType('hash'), format: formatInputInt },
|
||||||
{ type: prefixedType('string'), format: formatInputString },
|
{ type: prefixedType('string'), format: formatInputString },
|
||||||
{ type: prefixedType('real'), format: formatInputInt },
|
{ type: prefixedType('real'), format: formatInputReal },
|
||||||
{ type: prefixedType('ureal'), format: formatInputInt },
|
{ type: prefixedType('ureal'), format: formatInputReal },
|
||||||
{ type: namedType('address'), format: formatInputInt },
|
{ type: namedType('address'), format: formatInputInt },
|
||||||
{ type: namedType('bool'), format: formatInputBool }
|
{ type: namedType('bool'), format: formatInputBool }
|
||||||
];
|
];
|
||||||
|
|
|
@ -380,6 +380,46 @@ describe('abi', function() {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should parse input real', function () {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var d = clone(description);
|
||||||
|
|
||||||
|
d[0].inputs = [
|
||||||
|
{ type: 'real' }
|
||||||
|
];
|
||||||
|
|
||||||
|
// when
|
||||||
|
var parser = abi.inputParser(d);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal(parser.test([1]), "0000000000000000000000000000000100000000000000000000000000000000");
|
||||||
|
assert.equal(parser.test([2.125]), "0000000000000000000000000000000220000000000000000000000000000000");
|
||||||
|
assert.equal(parser.test([8.5]), "0000000000000000000000000000000880000000000000000000000000000000");
|
||||||
|
assert.equal(parser.test([-1]), "ffffffffffffffffffffffffffffffff00000000000000000000000000000000");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should parse input ureal', function () {
|
||||||
|
|
||||||
|
// given
|
||||||
|
var d = clone(description);
|
||||||
|
|
||||||
|
d[0].inputs = [
|
||||||
|
{ type: 'ureal' }
|
||||||
|
];
|
||||||
|
|
||||||
|
// when
|
||||||
|
var parser = abi.inputParser(d);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assert.equal(parser.test([1]), "0000000000000000000000000000000100000000000000000000000000000000");
|
||||||
|
assert.equal(parser.test([2.125]), "0000000000000000000000000000000220000000000000000000000000000000");
|
||||||
|
assert.equal(parser.test([8.5]), "0000000000000000000000000000000880000000000000000000000000000000");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('outputParser', function() {
|
describe('outputParser', function() {
|
||||||
|
|
Loading…
Reference in New Issue