Blockchain-Ethereum
view release on metacpan or search on metacpan
lib/Blockchain/Ethereum/RLP.pm view on Meta::CPAN
return (1, $short_string, STRING);
} elsif ($prefix <= LONG_STRING_MAX_LENGTH
&& $length > $long_string
&& $length > $long_string + $self->_to_integer(substr($input, 1, $long_string)))
{
# long string
my $str_length = $self->_to_integer(substr($input, 1, $long_string));
return (1 + $long_string, $str_length, STRING);
} elsif ($prefix < LIST_MAX_LENGTH && $length > $list) {
# list
return (1, $list, LIST);
} elsif ($prefix <= LONG_LIST_MAX_LENGTH
&& $length > $long_list
&& $length > $long_list + $self->_to_integer(substr($input, 1, $long_list)))
{
# long list
my $list_length = $self->_to_integer(substr($input, 1, $long_list));
return (1 + $long_list, $list_length, LIST);
}
croak "Invalid RLP input";
}
sub _to_integer {
my ($self, $b) = @_;
my $length = length($b);
croak "Invalid empty input" unless $length;
return ord($b) if $length == 1;
return ord(substr($b, -1)) + $self->_to_integer(substr($b, 0, -1)) * INPUT_LENGTH_DELIMITER;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Blockchain::Ethereum::RLP - Ethereum RLP encoding/decoding utility
=head1 VERSION
version 0.021
=head1 SYNOPSIS
Allow RLP encoding and decoding
my $rlp = Blockchain::Ethereum::RLP->new();
my $tx_params = ['0x9', '0x4a817c800', '0x5208', '0x3535353535353535353535353535353535353535', '0xde0b6b3a7640000', '0x', '0x1', '0x', '0x'];
my $encoded = $rlp->encode($params); #ec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080018080
my $encoded_tx_params = 'ec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080018080';
my $decoded = $rlp->decode(pack "H*", $encoded_tx_params); #['0x9', '0x4a817c800', '0x5208', '0x3535353535353535353535353535353535353535', '0xde0b6b3a7640000', '0x', '0x1', '0x', '0x']
=head1 METHODS
=head2 encode
Encodes the given input to RLP
=over 4
=item * C<$input> hexadecimal string or reference to an hexadecimal string array
=back
Return the encoded bytes
=head2 decode
Decode the given input from RLP to the specific return type
=over 4
=item * C<$input> RLP encoded bytes
=back
Returns an hexadecimals string or an array reference in case of multiple items
=head1 AUTHOR
REFECO <refeco@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2022 by REFECO.
This is free software, licensed under:
The MIT (X11) License
=cut
( run in 0.919 second using v1.01-cache-2.11-cpan-39bf76dae61 )