12 this->write_buffer_to(ser);
14 this->write_array_to(ser);
18 void rlp_value::write_array_to(
serializer& ser)
const {
21 for(
const auto& val : this->m_values) {
24 static constexpr unsigned char array_size_offset = 0xc0;
26 ser.
write(buf.data(), buf.size());
29 void rlp_value::write_buffer_to(serializer& ser)
const {
30 static constexpr unsigned char max_single_byte_value = 0x80;
32 if(this->m_buffer.
size() == 1) {
34 std::memcpy(&b, this->m_buffer.
data_at(0), 1);
35 if(b < std::byte(max_single_byte_value)) {
41 this->m_buffer.
size(),
42 max_single_byte_value);
43 ser.write(this->m_buffer.
data(), this->m_buffer.size());
48 static constexpr size_t max_onebyte_length = 55;
49 if(len <= max_onebyte_length) {
50 ser << static_cast<unsigned char>(len + offset);
53 assert(len < (std::numeric_limits<size_t>::max() - offset));
55 ser << std::byte(static_cast<unsigned char>(
56 len_ser.size() + max_onebyte_length + offset));
58 for(
auto b : len_ser) {
73 auto vec = std::vector<std::byte>();
76 std::memcpy(&b, buf.data_at(end_idx), 1);
77 if(b != std::byte(0) || !vec.empty()) {
90 if(!access_list.empty()) {
91 for(
const auto& access_tuple : access_list) {
93 for(
const auto& storage_key : access_tuple.m_storage_keys) {
96 rlp_access_list.push_back(
101 return rlp_access_list;
Serializer implementation for buffer.
auto data() -> void *
Returns a raw pointer to the start of the buffer data.
auto size() const -> size_t
Returns the number of bytes contained in the buffer.
auto data_at(size_t offset) -> void *
Returns a raw pointer to the start of the buffer data.
This class contains a value that can be serialized into, or was deserialized from,...
void write_to(serializer &ser) const
Serializes the rlp_value in RLP representation into the passed serializer.
Interface for serializing objects into and out of raw bytes representations.
virtual auto write(const void *data, size_t len) -> bool=0
Attempts to write the given raw data into the buffer starting at the current cursor position.
std::vector< evm_access_tuple > evm_access_list
Type alias for a list of storage key accesses.
auto serialize_size(size_t size) -> std::vector< std::byte >
Creates a binary representation for sizes that exceed the single-byte presentation.
auto rlp_encode_access_list(const parsec::agent::runner::evm_access_list &access_list) -> rlp_value
RLP encodes an access list.
auto make_rlp_value(const T &obj, bool trim_leading_zeroes=false) -> rlp_value
Turns an existing value into an rlp_value by first serializing it as a cbdc::buffer,...
@ buffer
A singular RLP value (byte array)
@ array
A collection of RLP values.
void serialize_rlp_length(serializer &ser, size_t len, unsigned char offset)
Serializes the passed len from the given offset as RLP compatible size representation as documented i...
auto make_buffer(const T &obj) -> std::enable_if_t< std::is_same_v< B, nuraft::ptr< nuraft::buffer > >, nuraft::ptr< nuraft::buffer > >
Serialize object into nuraft::buffer using a cbdc::nuraft_serializer.
auto operator<<(serializer &ser, const parsec::agent::rpc::request &req) -> serializer &
auto make_rlp_array(const Args &... values) -> rlp_value
Turns multiple rlp_value objects into an rlp_value of type array.