fn encode_eip4844_payload(&self, chain_id: u64, signature: Option<&Signature>) -> RlpStream {
        let mut stream = RlpStream::new();

        // `EIP4844` adds two new fields to the `EIP1559` transaction.
        // `list_size` is set to the same values from `encode_eip1559_payload`
        // increased by two.
        let list_size = if signature.is_some() { 14 } else { 11 };
        stream.begin_list(list_size);

        stream.append(&chain_id);
        stream.append(&self.nonce);
        stream.append(&self.max_priority_fee_per_gas);
        stream.append(&self.gas_price);
        stream.append(&self.gas);

        // The field to deviates slightly from the semantics with the
        // exception that it MUST NOT be nil and therefore must always
        // represent a 20-byte address. This means that blob transactions
        // cannot have the form of a create transaction.
        stream.append(self.to.as_ref().unwrap());

        stream.append(&self.value);
        stream.append(&self.data);

        self.rlp_append_access_list(&mut stream);

        stream.append(&self.max_fee_per_blob_gas.unwrap());
        stream.append_list(self.blob_versioned_hashes.as_ref().unwrap());

        if let Some(signature) = signature {
            self.rlp_append_signature(&mut stream, signature);
        }

        stream
    }
Encodes a [`eip4844`] transaction: <https://eips.ethereum.org/EIPS/eip-4844>
core/lib/eth_signer/src/raw_ethereum_tx.rs