Add toChecksumAddress in Utils.php
See #150 (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md)
This commit is contained in:
parent
0659ec04dc
commit
d0289506dc
@ -189,7 +189,7 @@ class Utils
|
||||
|
||||
/**
|
||||
* isAddressChecksum
|
||||
*
|
||||
*
|
||||
* @param string $value
|
||||
* @return bool
|
||||
*/
|
||||
@ -212,6 +212,31 @@ class Utils
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* toChecksumAddress
|
||||
*
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public static function toChecksumAddress($value)
|
||||
{
|
||||
if (!is_string($value)) {
|
||||
throw new InvalidArgumentException('The value to toChecksumAddress function must be string.');
|
||||
}
|
||||
$value = self::stripZero(strtolower($value));
|
||||
$hash = self::stripZero(self::sha3($value));
|
||||
$ret = '0x';
|
||||
|
||||
for ($i = 0; $i < 40; $i++) {
|
||||
if (intval($hash[$i], 16) >= 8) {
|
||||
$ret .= strtoupper($value[$i]);
|
||||
} else {
|
||||
$ret .= $value[$i];
|
||||
}
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* isHex
|
||||
*
|
||||
|
@ -249,7 +249,7 @@ class UtilsTest extends TestCase
|
||||
|
||||
/**
|
||||
* testIsAddressChecksum
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testIsAddressChecksum()
|
||||
@ -291,9 +291,36 @@ class UtilsTest extends TestCase
|
||||
$isAddressChecksum = Utils::isAddressChecksum(new stdClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* testToChecksumAddress
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testToChecksumAddress()
|
||||
{
|
||||
$checksumAddressTest = [
|
||||
// All caps
|
||||
'0x52908400098527886E0F7030069857D2E4169EE7',
|
||||
'0x8617E340B3D01FA5F11F306F4090FD50E238070D',
|
||||
// All Lower
|
||||
'0xde709f2102306220921060314715629080e2fb77',
|
||||
'0x27b1fdb04752bbc536007a920d24acb045561c26',
|
||||
// Normal
|
||||
'0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed',
|
||||
'0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359',
|
||||
'0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB',
|
||||
'0xD1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb'
|
||||
];
|
||||
|
||||
for ($i=0; $i<count($checksumAddressTest); $i++) {
|
||||
$checksumAddress = Utils::toChecksumAddress(strtolower($checksumAddressTest[$i]));
|
||||
$this->assertEquals($checksumAddressTest[$i], $checksumAddress);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* testStripZero
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testStripZero()
|
||||
|
Loading…
Reference in New Issue
Block a user