/
BasicDecoder.php
39 lines (30 loc) · 1.16 KB
/
BasicDecoder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
namespace Enjin\BlockchainTools\Ethereum\ABI\DataBlockDecoder;
use Enjin\BlockchainTools\Ethereum\ABI\Contract\ContractFunctionValueType;
use Enjin\BlockchainTools\Ethereum\ABI\DataBlockDecoder;
use Enjin\BlockchainTools\HexConverter;
use Enjin\BlockchainTools\HexNumber\HexUInt\HexUInt256;
class BasicDecoder extends DataBlockDecoder
{
public function addString(ContractFunctionValueType $valueType, string $value)
{
$value = HexConverter::hexToString($value);
parent::addString($valueType, $value);
}
public function addDynamicLengthBytes(ContractFunctionValueType $valueType, $value)
{
$value = HexConverter::hexToBytes($value);
parent::addDynamicLengthBytes($valueType, $value);
}
public function add(ContractFunctionValueType $valueType, $value)
{
$dataType = $valueType->dataType();
if ($dataType->aliasedFrom() === 'bool') {
$value = (bool) HexUInt256::fromHex($value)->toDecimal();
}
if ($dataType->baseType() === 'address') {
$value = HexUInt256::fromHex($value)->toHexUInt160Bottom();
}
parent::add($valueType, $value);
}
}