diff --git a/src/Utils.php b/src/Utils.php index f581ca1..0fd54ca 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -397,4 +397,30 @@ class Utils } return $json; } + + /** + * toBn + * Change number or number string to bignumber. + * + * @param BigNumber|string|int $number + * @return \phpseclib\Math\BigInteger + */ + public static function toBn($number) + { + if (is_int($number)) { + $bn = new BigNumber($number); + } elseif (is_string($number)) { + $number = mb_strtolower($number); + + if (self::isZeroPrefixed($number)) { + $number = self::stripZero($number); + $bn = new BigNumber($number, 16); + } else { + $bn = new BigNumber($number); + } + } elseif (!$number instanceof BigNumber){ + throw new InvalidArgumentException('toBn number must be BigNumber, string or int.'); + } + return $bn; + } } \ No newline at end of file diff --git a/test/unit/UtilsTest.php b/test/unit/UtilsTest.php index 84b4522..de95360 100644 --- a/test/unit/UtilsTest.php +++ b/test/unit/UtilsTest.php @@ -4,6 +4,7 @@ namespace Test\Unit; use InvalidArgumentException; use Test\TestCase; +use phpseclib\Math\BigInteger; use Web3\Utils; class UtilsTest extends TestCase @@ -386,4 +387,24 @@ class UtilsTest extends TestCase $this->assertFalse($isHex); } + + /** + * testToBn + * + * @return void + */ + public function testToBn() + { + $bn = Utils::toBn(11); + + $this->assertEquals($bn->toString(), '11'); + + $bn = Utils::toBn('0x12'); + + $this->assertEquals($bn->toString(), '18'); + + $bn = Utils::toBn(0x12); + + $this->assertEquals($bn->toString(), '18'); + } } \ No newline at end of file