This commit is contained in:
Dan 2018-04-10 06:27:02 +00:00 committed by GitHub
commit 54c603427d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 3 deletions

View File

@ -33,7 +33,7 @@ class IntegerFormatter implements IFormatter
$digit = intval($arguments[1]);
}
$bn = Utils::toBn($value);
$bnHex = $bn->toHex(true);
$bnHex = $bn->toHex($value !== '48');
$padded = mb_substr($bnHex, 0, 1);
if ($padded !== 'f') {

View File

@ -90,13 +90,13 @@ class Utils
if (is_numeric($value)) {
// turn to hex number
$bn = self::toBn($value);
$hex = $bn->toHex(true);
$hex = $bn->toHex((string)$value !== '48');
$hex = preg_replace('/^0+(?!$)/', '', $hex);
} elseif (is_string($value)) {
$value = self::stripZero($value);
$hex = implode('', unpack('H*', $value));
} elseif ($value instanceof BigNumber) {
$hex = $value->toHex(true);
$hex = $value->toHex($value->toString() !== '48');
$hex = preg_replace('/^0+(?!$)/', '', $hex);
} else {
throw new InvalidArgumentException('The value to toHex function is not support.');

View File

@ -45,5 +45,11 @@ class IntegerFormatterTest extends TestCase
$hex = $formatter->format('1', 20);
$this->assertEquals($hex, implode('', array_fill(0, 19, '0')) . '1');
$hex = $formatter->format(48);
$this->assertEquals($hex, implode('', array_fill(0, 62, '0')) . '30');
$hex = $formatter->format('48');
$this->assertEquals($hex, implode('', array_fill(0, 62, '0')) . '30');
}
}

View File

@ -87,6 +87,16 @@ class UtilsTest extends TestCase
$this->assertEquals('0x', Utils::toHex(0, true));
$this->assertEquals('0x', Utils::toHex(new BigNumber(0), true));
$this->assertEquals('0x30', Utils::toHex(48, true));
$this->assertEquals('0x30', Utils::toHex('48', true));
$this->assertEquals('30', Utils::toHex(48));
$this->assertEquals('30', Utils::toHex('48'));
$this->assertEquals('0x30', Utils::toHex(new BigNumber(48), true));
$this->assertEquals('0x30', Utils::toHex(new BigNumber('48'), true));
$this->assertEquals('30', Utils::toHex(new BigNumber(48)));
$this->assertEquals('30', Utils::toHex(new BigNumber('48')));
$this->expectException(InvalidArgumentException::class);
$hex = Utils::toHex(new stdClass);
}