<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Blockchain</journal-id>
<journal-title>Frontiers in Blockchain</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Blockchain</abbrev-journal-title>
<issn pub-type="epub">2624-7852</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1222614</article-id>
<article-id pub-id-type="doi">10.3389/fbloc.2023.1222614</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Blockchain</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Enhanced scalability and privacy for blockchain data using Merklized transactions</article-title>
<alt-title alt-title-type="left-running-head">Davies</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fbloc.2023.1222614">10.3389/fbloc.2023.1222614</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Davies</surname>
<given-names>Jack</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1939219/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>Research and Development</institution>, <institution>nChain</institution>, <addr-line>London</addr-line>, <country>United Kingdom</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Centre for Networks and Collective Behaviour</institution>, <institution>University of Bath</institution>, <addr-line>Bath</addr-line>, <country>United Kingdom</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1354277/overview">Luigi Vigneri</ext-link>, IOTA Foundation, Germany</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2337377/overview">Lianna Zhao</ext-link>, Imperial College London, United Kingdom</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2338138/overview">Darcy Camargo</ext-link>, IOTA Foundation, Germany</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Jack Davies, <email>j.davies@nchain.com</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>09</day>
<month>01</month>
<year>2024</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>6</volume>
<elocation-id>1222614</elocation-id>
<history>
<date date-type="received">
<day>14</day>
<month>05</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>20</day>
<month>12</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2024 Davies.</copyright-statement>
<copyright-year>2024</copyright-year>
<copyright-holder>Davies</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>Blockchain technology has evolved beyond the use case of electronic cash and is increasingly used to secure, store, and distribute data for many applications. Distributed ledgers such as Bitcoin have the ability to record data of any kind alongside the transfer of monetary value. This property can be used to provide a source of immutable, tamper-evident data for a wide variety applications spanning from the supply chain to distributed social media. However, this paradigm also presents new challenges regarding the scalability of data storage protocols, such that the data can be efficiently accessed by a large number of users, in addition to maintaining privacy for data stored on the blockchain. Here, we present a new mechanism for constructing blockchain transactions using Merkle trees comprised of transaction fields. Our construction allows for transaction data to be verified field-wise using Merkle proofs. We show how the technique can be implemented either at the system level or as a second layer protocol that does not require changes to the underlying blockchain. This technique allows users to efficiently verify blockchain data by separately checking targeted individual data items stored in transactions. Furthermore, we outline how our protocol can afford users improved privacy in a blockchain context by enabling network-wide data redaction. This feature of our design can be used by blockchain nodes to facilitate easier compliance with regulations such as GDPR and the right to be forgotten.</p>
</abstract>
<kwd-group>
<kwd>blockchain</kwd>
<kwd>scalability</kwd>
<kwd>privacy</kwd>
<kwd>efficiency</kwd>
<kwd>networks</kwd>
<kwd>data</kwd>
<kwd>redaction</kwd>
<kwd>compliance</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Blockchain Technologies</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>1 Introduction</title>
<p>The use of the blockchain as a data source for various applications has significantly increased in recent years <xref ref-type="bibr" rid="B2">Ali et al. (2017)</xref>; <xref ref-type="bibr" rid="B13">Sgantzos and Grigg (2019)</xref>, <xref ref-type="bibr" rid="B8">Liang et al. (2020)</xref>. Blockchains such as Bitcoin and its derivatives utilise a scripting language to lock and spend the native blockchain token. These scripts generally contain opcodes that operate on small items of data, such as public keys and digital signatures, for the purpose of transferring funds and verifying transactions. However, it is also possible to use these scripts to embed any kind of data on the blockchain. This data is sometimes called &#x2018;arbitrary&#x2019; data because it does not relate to the conditions used to transfer the funds themselves <xref ref-type="bibr" rid="B9">Matzutt et al. (2018)</xref>. There are several ways in which data can be embedded on Bitcoin-like chains using the scripting language, and the use of these methods has grown substantially over time <xref ref-type="bibr" rid="B4">Bartoletti and Pompianu (2017)</xref>. One of the primary motivations for including such data on the blockchain is that it creates an immutable record for the data, which can improve transparency for a wide range of applications by enabling reliable proofs of data integrity <xref ref-type="bibr" rid="B4">Bartoletti and Pompianu (2017)</xref>; <xref ref-type="bibr" rid="B13">Sgantzos and Grigg (2019)</xref>; <xref ref-type="bibr" rid="B1">Aitsam and Chantaraskul (2020)</xref>.</p>
<p>Despite the compelling use case for embedding arbitrary, non-payment data on the blockchain, the ability to do so has given rise to new problems and challenges. Most notably the inclusion of illicit data on the blockchain <xref ref-type="bibr" rid="B16">Zhang et al. (2021)</xref>; <xref ref-type="bibr" rid="B1">Aitsam and Chantaraskul (2020)</xref>; <xref ref-type="bibr" rid="B6">Deuber et al. (2019)</xref>. These are cases where illegal or inappropriate data has been added to the ledger either for directly nefarious purposes or to undermine the credibility of the blockchain itself. In addition, issues have been raised regarding the &#x201c;right to be forgotten&#x201d; <xref ref-type="bibr" rid="B3">Ateniese et al. (2017)</xref> and the need for compliance with legal requirements around data processing, such as the General Data Protection Regulation (GDPR) <xref ref-type="bibr" rid="B14">Shah et al. (2019)</xref>. The existence of these concerns when embedding data on the blockchain has brought with it calls for blockchain implementations and designs to build in mitigations for these issues, such as the ability for illegal data to be redacted from the blockchain <xref ref-type="bibr" rid="B9">Matzutt et al. (2018)</xref>.</p>
<p>A range of previous efforts have been made to address these problems by introducing data redaction capabilities to blockchain designs <xref ref-type="bibr" rid="B16">Zhang et al. (2021)</xref>. Early proposals <xref ref-type="bibr" rid="B12">Rajasekhar et al. (2018)</xref>; <xref ref-type="bibr" rid="B3">Ateniese et al. (2017)</xref> that sought to enable redaction for blockchain data relied upon Chameleon hashes. While tackling the issue directly, these solutions also introduce the problems of needing central coordination and allowing mutability of block data, undermining the desired immutability property in general. The use of voting or consensus-based mechanisms to remove data from the blockchain at the system level have also been proposed <xref ref-type="bibr" rid="B6">Deuber et al. (2019)</xref>; <xref ref-type="bibr" rid="B16">Zhang et al. (2021)</xref>. Such techniques require a high level of network-wide coordination and do not allow individual nodes to unilaterally remove data locally, whilst also requiring changes at the blockchain protocol level.</p>
<p>As identified in <xref ref-type="bibr" rid="B16">Zhang et al. (2021)</xref>, other mechanisms include the creation of &#x201c;meta-transactions&#x201d; or by pruning data directly from the blockchain. The creation of such meta-transactions leads to general transaction mutability and in some cases allows for the removal of full transaction history from the blockchain. The pruning-based mechanisms introduce the concept of block expiry for older data, which may force users to spend transactions within a given time period to avoid their loss in the system. However, these mechanisms benefit from their efficiency as they do not rely on heavy cryptographic primitives and are lightweight in nature. More recently, ring signatures have been suggested as a method to improve the scalability and privacy of blockchain redaction techniques <xref ref-type="bibr" rid="B7">Huang et al. (2021)</xref>, but this also mandates changes to the underlying blockchain protocol and can sacrifice immutability as a system-wide property.</p>
<p>In related problem spaces, <xref ref-type="bibr" rid="B8">Liang et al. (2020)</xref> addresses the challenge of resilience to data loss within a network, while <xref ref-type="bibr" rid="B15">Yang et al. (2018)</xref> outlines a method to provide secure proof of deletion using the blockchain. These mechanisms utilise the blockchain to improve concerns around the use of data, but they do not directly address the issue of ensuring blockchain data can be handled efficiently and privately in compliance with GDPR and other laws.</p>
<p>This paper presents a novel approach to the redaction and management of sensitive blockchain data. The proposed mechanism builds on concepts from the meta-transaction and pruning frameworks <xref ref-type="bibr" rid="B16">Zhang et al. (2021)</xref> to solve the problem using Merklized transactions. The solution has the following properties:<list list-type="simple">
<list-item>
<p>&#x2022; enables transaction redaction without introducing mutability to the underyling blockchain</p>
</list-item>
<list-item>
<p>&#x2022; does not require a central authority to coordinate data redaction</p>
</list-item>
<list-item>
<p>&#x2022; allows any blockchain node to unilaterally redact transaction data from their copy of the blockchain</p>
</list-item>
<list-item>
<p>&#x2022; is scalable and allows lightweight proof-of-existence verification for blockchain data</p>
</list-item>
</list>
</p>
<p>We also build on the core solution to outline how blockchain regulatory protocols can be implemented to enable nodes to more easily comply with GDPR and other legislation.</p>
</sec>
<sec id="s2">
<title>2 Background</title>
<p>In the following we describe the necessary background to build up our proposed blockchain redaction mechanism. In general the mechanism we outline in this paper is blockchain-agnostic, and can therefore be applied to any blockchain that uses a typical transaction-based ledger. The protocol outlined in this paper can be applied to any such blockchain by choosing appropriate fields of the transaction as the leaves of each transaction Merkle tree, as explained in <xref ref-type="sec" rid="s3">Section 3</xref>. The proposed design does not depend on the consensus algorithm (e.g., Proof-of-Work, Proof-of-Stake) of the underlying blockchain, and can be applied whether the blockchain uses a UTXO-based transaction structure like Bitcoin or an account-based structure like Ethereum. For the purposes of this paper, we use Bitcoin as an illustrative example to show directly how the solution applies to Bitcoin-like chains, such as Bitcoin Core (BTC), Bitcoin Cash (BCH), or Bitcoin Satoshi&#x2019;s Vision (BSV).</p>
<sec id="s2-1">
<title>2.1 Bitcoin</title>
<p>Bitcoin is a peer-to-peer electronic cash system that enables multiple parties to transact directly with one another, without needing to rely on trusted third party as a mediator. The system maintains a distributed ledger, formed of blocks of many transactions, and utilises a Proof-of-Work (PoW) consensus algorithm to append new blocks to the chain. The native token of the blockchain, denominated in <italic>Satoshis</italic>, can be transferred between users through new transactions whereby digital signatures allow the movement of funds to be validated.</p>
<p>The blockchain ledger is maintained by a network of nodes. Each node is responsible for aggregating and ordering users&#x2019; transactions into blocks and attempting to find a PoW solution for their block by expending computational power. The nodes are incentivised to do this through a block reward, which itself contains a block subsidy and transaction fees. The block subsidy halves approximately every 4&#xa0;years, meaning that over time the incentive to create blocks is increasingly made up of the fees paid in each transaction.</p>
<p>Once a transaction has been included in the blockchain, or has reached a certain depth due to subsequent blocks built on top, it becomes computationally infeasible to alter the its data or claim an alternative record existed in its place. This is a statement of the immutability property of Bitcoin-like chains. This property should be distinguished from indelibility, or the property that data can be removed from the blockchain. Bitcoin-like chains are immutable due to the PoW process, but they are not indelible since data can be pruned from the blockchain. The data that can typically be pruned from the blockchain is anything that cannot be used in a future spending transaction, such as in transactions whose outputs have already been spent. The data stored using the most common embedding methods <xref ref-type="bibr" rid="B4">Bartoletti and Pompianu (2017)</xref> can also be pruned in this way.</p>
</sec>
<sec id="s2-2">
<title>2.2 Blocks</title>
<p>A Bitcoin block (<italic>B</italic>) is used to collect and order a batch of transactions. These blocks are produced by Bitcoin nodes in regular time intervals of approximately 10&#xa0;min and comprise three core components as shown in <xref ref-type="fig" rid="F1">Figure 1</xref>.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>The data structure of a Bitcoin block.</p>
</caption>
<graphic xlink:href="fbloc-06-1222614-g001.tif"/>
</fig>
<sec id="s2-2-1">
<title>2.2.1 Block header</title>
<p>The block header contains the metadata of a block including the protocol version number, timestamp, previous block hash and two PoW parameters (bits and nonce). The header also contains a Merkle root, which uniquely summarises the ordered set of transactions contained in the block using a Merkle tree <xref ref-type="bibr" rid="B10">Merkle (1980)</xref>.</p>
</sec>
<sec id="s2-2-2">
<title>2.2.2 Transaction list</title>
<p>The second component is the full list of transactions included in the block. Each transaction is itself a separate data structure containing additional fields, and the first transaction in the block is called the <italic>coinbase</italic> transaction. The transaction count is simply a variable field which encodes the total number of transactions included within the block.</p>
<p>The block header has multiple important functions. First, it creates a one-way link to the previous block header, which gives rise to the chain of blocks that constitute the overall blockchain data structure. The block header also encodes the PoW expended to create the block that can be easily verified by other nodes and entities using only the chain of successive block headers. Finally, the block header contains the Merkle root as a cryptographic commitment to the set of transactions in the block, which we exploit in our protocol to achieve blockchain data redaction.</p>
</sec>
</sec>
<sec id="s2-3">
<title>2.3 Transactions</title>
<p>A Bitcoin transaction (<italic>Tx</italic>) is used to convey a transfer or value between users or to record data on the blockchain. Each transaction has a unique identifier defined as the double SHA-256 hash of the transaction contents <italic>TxID</italic>&#x2254;<italic>H</italic>(<italic>Tx</italic>).</p>
<sec id="s2-3-1">
<title>2.3.1 Transaction structure</title>
<p>The contents of each transaction must conform to a common structure as outlined in <xref ref-type="fig" rid="F2">Figure 2</xref>. Each transaction contains a version number and a locktime, in addition to a list of inputs and a list of outputs. The inputs are defined by a separate data structure containing a previous transaction identifier (<italic>TxID</italic>
<sub>
<italic>Prev</italic>
</sub>), a previous output index (<italic>vout</italic>), an unlocking script and its length, as well as a sequence number. Similarly, the outputs are defined by a separate structure, containing a Satoshi-denominated output value, a locking script and the length of the locking script.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>The data structure of a Bitcoin transaction.</p>
</caption>
<graphic xlink:href="fbloc-06-1222614-g002.tif"/>
</fig>
</sec>
<sec id="s2-3-2">
<title>2.3.2 Coinbase transactions</title>
<p>The first transaction in each block is a special case, the coinbase transaction. These transactions are used to distribute new tokens to the node that created the block, and as such these transactions are subject to different transaction validation rules. Specifically, coinbase transactions do not spend a previous transaction output, meaning the input script of a coinbase transaction can contain any arbitrary data as the script will not be validated by the blockchain protocol. We call these &#x201c;coinbase scripts&#x201d;, and we utilise them in our solution to enable redaction as a second-layer protocol that can be implemented voluntarily by any node.</p>
</sec>
</sec>
<sec id="s2-4">
<title>2.4 Merkle proofs</title>
<p>In Bitcoin, the use of a Merkle tree to encode the set of transactions in a block allows for efficient lightweight verification that a given transaction is part of a block. The mechanism used to perform such a check, given a candidate transaction <italic>Tx</italic>
<sub>
<italic>i</italic>
</sub>, located at index <italic>i</italic> in a block <italic>B</italic>, and the Merkle root <italic>R</italic>
<sub>
<italic>B</italic>
</sub> of the block, is known as a Merkle proof (<italic>&#x3c0;</italic>) <xref ref-type="bibr" rid="B10">Merkle (1980)</xref>. This proof comprises a set of hash values used to recover a candidate Merkle root <italic>R</italic>&#x2032;. If <italic>R</italic>&#x2032; &#x3d; <italic>R</italic>
<sub>
<italic>B</italic>
</sub> then the proof is valid and <italic>Tx</italic>
<sub>
<italic>i</italic>
</sub> is contained in <italic>B</italic>. Note that the entire data of <italic>Tx</italic>
<sub>
<italic>i</italic>
</sub> is required to verify such a proof.</p>
</sec>
</sec>
<sec id="s3">
<title>3 Merklized transactions</title>
<p>The goal of the following is to define a framework for managing blockchain data that has two properties. First, it should allow for the efficient verification of any item of data on the blockchain without the need for the full transaction data. Second, the scheme should enable data to be easily redacted from the chain at the discretion of a given node to increase the levels of privacy available to blockchain data.</p>
<p>An additional design principle of the proposed mechanism is that it may be implemented without change to the underlying consensus protocol of a given blockchain. While the design outlined in this section may be implemented more simply at the base layer (&#x201c;layer 1&#x201d;) for a chosen blockchain, it has been designed in such a way that it can also be deployed as a &#x201c;layer 2&#x201d; solution on top of most blockchain networks. This choice is to ensure that the proposed mechanism can be used to enable transaction data redaction regardless of whether the protocol is adopted uniformly by the nodes of a blockchain network. In what follows, we focus on the design details for the layer 2 approach, which allows any individual node to facilitate data redaction unilaterally. This can help any node meet the regulatory and legal obligations of the jurisdiction in which it operates without requiring that other nodes on the network also use this protocol.</p>
<p>The core of the proposed mechanism is to use a Merkle tree to represent the contents of each transaction stored on the blockchain. This allows for smaller subsets of the transaction data to be verified as included on the blockchain, after the transaction has been mined, without requiring the whole transaction data for the <italic>post hoc</italic> verification. In any given implementation of this mechanism, transactions may be split into different fields to form the Merkle tree to allow different subsets of information to be verified after the transaction is mined. The protocol may also be adapted to each underlying blockchain protocol by choosing different fields or subsets of transaction data to be used as leaves of the transaction Merkle tree, as appropriate.</p>
<sec id="s3-1">
<title>3.1 Transaction identifiers</title>
<p>As described previously, every Bitcoin transaction <italic>Tx</italic> has a unique identifier <italic>TxID</italic> associated with it. Because this identifier is derived from the double-hash of the transaction, this means that the entire transaction must be possessed in order to verify whether any subset of the transaction content exists on the blockchain.</p>
<p>The first aspect of the proposed solution is that a secondary identifier can be generated for each transaction. In general this can be thought of as a &#x201c;meta&#x201d; transaction identifier, and we can use the notation <italic>MTxID</italic> to refer to it. We propose that such a secondary transaction identifier must be some function <italic>F</italic> of the full transaction data, such that <italic>MTxID</italic>&#x2254;<italic>F</italic>(<italic>Tx</italic>). This ensures that all of the data within <italic>Tx</italic> can be identified by <italic>MTxID</italic>. However, to fulfil our stated goals, we must also ensure that only a subset of the contents of <italic>Tx</italic> are required to verify that something is contained within <italic>Tx</italic>. Furthermore, we must ensure that <italic>MTxID</italic> is unique to <italic>Tx</italic>.</p>
</sec>
<sec id="s3-2">
<title>3.2 Merkle-based transaction identifiers</title>
<p>The proposed mechanism to generate a secondary transaction identifier that is unique and only requires a subset of <italic>Tx</italic> to verify is to use a Merkle tree. In this approach, we define the secondary identifier as <italic>MTxID</italic> &#x3d; <italic>R</italic>, where <italic>R</italic> is the root of a Merkle tree <italic>T</italic>. In our construction, the leaves of <italic>T</italic> are comprised of the contents of <italic>Tx</italic> split into discrete segments, such that the entirety of <italic>Tx</italic> is collectively contained within the set of leaves of <italic>T</italic>.</p>
<p>This approach ensures the uniqueness of <italic>MTxID</italic> because the root is derived from successively hashing the leaves of the Merkle tree using a one-way cryptographic hash function (e.g., SHA-256). Changing any of the data within the leaves, or the order of the leaves of <italic>T</italic>, will necessarily alter the resulting <italic>MTxID</italic> identifier. An example structure of such a transaction-based Merkle tree <italic>T</italic> is shown in <xref ref-type="fig" rid="F3">Figure 3</xref>.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>A schematic outline of Merkle-based transaction identifier generation.</p>
</caption>
<graphic xlink:href="fbloc-06-1222614-g003.tif"/>
</fig>
</sec>
<sec id="s3-3">
<title>3.3 Transaction splitting</title>
<p>As outlined in other Merkle-based protocols for blockchain data applications such as <xref ref-type="bibr" rid="B5">Bruschi et al. (2021)</xref>, the use of a Merkle tree inherently allows for compact and efficient proofs of existence. The proposed system extends this property to individual fields of blockchain transactions, such that any item of data within any blockchain transaction can be independently verified in isolation. This presents a signficant efficiency gain when compared with existing blockchain Merkle proofs where the entire transaction is required.</p>
<p>In our scheme, a transaction <italic>Tx</italic> is segmented into a set of <italic>M</italic> data packets <italic>D</italic>
<sub>1</sub>, &#x2026;<italic>D</italic>
<sub>
<italic>M</italic>
</sub>. There are many possible ways the transaction data can be split and we here outline a few options as examples.</p>
<sec id="s3-3-1">
<title>3.3.1 Field-wise splitting</title>
<p>The transaction can be split simply into its component fields, whereby each field will correspond to a single leaf of the transaction Merkle tree <italic>T</italic> used to generate <italic>MTxID</italic>. For improved efficiency, some fields may be grouped together by concatenation. An example would be to group the &#x201c;non-script&#x201d; fields together and leave each script to a separate leaf of the tree, since data redaction will most likely occur for script fields.</p>
</sec>
<sec id="s3-3-2">
<title>3.3.2 Field-wise granular splitting</title>
<p>A variant of field-wise splitting would be to further split each script field into multiple data leaves, such that individual elements of a single script can later be redacted without removing the entire script.</p>
</sec>
<sec id="s3-3-3">
<title>3.3.3 Fixed number of packets</title>
<p>Each transaction may alternatively be split into a fixed number of packets, meaning packet size will be constant for a given transaction and determined by its size. Different transactions will have different sizes and therefore have different packet sizes in this scenario.</p>
</sec>
<sec id="s3-3-4">
<title>3.3.4 Fixed packet size</title>
<p>A similar strategy would be to fix the packet size for the Merkle tree and allow its number of leaves to increase depending on the size of the transaction.</p>
<p>Our scheme is agnostic to the choice of splitting methodology and can be implemented in any of these ways, depending on the use requirements of nodes or the particular use case.</p>
</sec>
</sec>
<sec id="s3-4">
<title>3.4 Binding to original transaction identifier</title>
<p>The proposed mechanism can be implemented as a layer 1 protocol simply be replacing the <italic>TxIDs</italic> with <italic>MTxIDs</italic> within the base consensus algorithm of the blockchain used. However, in a layer 2 setting where we do not modify the underlying consensus protocol, we require an alternative way to bind the secondary transaction identifier <italic>MTxID</italic> to the original identifier <italic>TxID</italic>. This can be achieved either by including <italic>TxID</italic> as an additional leaf in the transaction Merkle tree or by prepending the <italic>TxID</italic> to each leaf in the transaction Merkle tree. Both options ensure that the entire transaction <italic>Tx</italic> must be processed when <italic>MTxID</italic> is first generated and that each other leaf is inextricably linked to the full original transaction data.</p>
</sec>
<sec id="s3-5">
<title>3.5 Identifier generation</title>
<p>The steps to generate an <italic>MTxID</italic> for a given transaction <italic>Tx</italic> are outlined in the <xref ref-type="statement" rid="Algorithm_1">Algorithm 1</xref>. In this algorithm the function <italic>Merklize</italic>() generates a typical binary Merkle tree from a set of leaf data items, whose Merkle root is labelled <italic>R</italic>.</p>
<p>
<statement content-type="algorithm" id="Algorithm_1">
<label>Algorithm 1</label>
<p>Transaction Identifier Generation.<list list-type="simple">
<list-item>
<p>
<bold>Input:</bold> Transaction <italic>Tx</italic>
</p>
</list-item>
<list-item>
<p>
<bold>Output:</bold> Transaction Identifier <italic>MTxID</italic>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;1: Generate <italic>TxID</italic> &#x2190; <italic>H</italic>
<sup>2</sup>(<italic>Tx</italic>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;2: Split <italic>Tx</italic> into <italic>M</italic> packets <italic>D</italic>
<sub>1</sub>, &#x2026;, <italic>D</italic>
<sub>
<italic>M</italic>
</sub>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;3: Generate <italic>T</italic> &#x2190; <italic>Merklize</italic>(<italic>D</italic>
<sub>1</sub>, &#x2026;, <italic>D</italic>
<sub>
<italic>M</italic>
</sub>, <italic>TxID</italic>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;4: Set <italic>MTxID</italic> &#x2190; <italic>R</italic>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;5: <bold>return</bold> <italic>MTxID</italic>
</p>
</list-item>
</list>
</p>
</statement>
</p>
<p>The generation algorithm is intended to be used by a node when it first receives a new transaction in the blockchain network. In the layer 1 setting, this algorithm would be used to directly generate <italic>MTxID</italic> as the canonical transaction identifier for a given transaction <italic>Tx</italic> used for the consensus algorithm and block generation process.</p>
<p>When used at layer 2, this generation algorithm can be used by any node voluntarily using our proposed mechanism to prepare transactions for potential data redaction at a future time. If the node wishes to include a transaction in its own block, it should construct the block according to a modified block generation process (see <xref ref-type="statement" rid="Algorithm_3">Algorithm 3</xref>) that incorporates the above algorithm to ensure that the <italic>MTxID</italic> is bound to the canonical <italic>TxID</italic> for this transaction, such that the node can later redact data contained in <italic>Tx</italic> without sacrificing the ability to prove the existence of the non-redacted content of <italic>Tx</italic>, as required. If the node does not wish to include <italic>Tx</italic> in its own block, it may still store the corresponding <italic>MTxID</italic> locally for similar purposes.</p>
</sec>
<sec id="s3-6">
<title>3.6 Identifier verification</title>
<p>The corresponding protocol for verifying a secondary transaction identifier, given <italic>MTxID</italic> and <italic>Tx</italic>, is detailed in <xref ref-type="statement" rid="Algorithm_2">Algorithm 2</xref>. The root of the generated tree <italic>T</italic>&#x2032; is labelled <italic>R</italic>&#x2032;.</p>
<p>
<statement content-type="algorithm" id="Algorithm_2">
<label>Algorithm 2</label>
<p>Transaction Identifier Verification.<list list-type="simple">
<list-item>
<p>
<bold>Input:</bold> Transaction Identifier MTxID, Transaction Tx&#xa0;&#xa0;</p>
</list-item>
<list-item>
<p>
<bold>Output:</bold> True/False</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;1: Generate TxID &#x2190; H2(Tx)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;2: Split Tx into M packets D1, &#x2026;, DM</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;3: Generate T&#x2032; &#x2190; Merklize(D1, &#x2026;, DM, TxID)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;4: Set MTxID&#x2032; &#x2190; R&#x2032;</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;5: <bold>if</bold> MTxID &#x3d; MTxID&#x2032;&#xa0;<bold>then</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;6: Result &#x2190; True</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;7: <bold>else</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;8: Result &#x2190; False</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;9: <bold>end if</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;10: <bold>return</bold> Result</p>
</list-item>
</list>
</p>
</statement>
</p>
<p>This algorithm is used to verify that a given <italic>MTxID</italic> has been correctly generated for a given <italic>Tx</italic>, and therefore requires the full data of the transaction. For this reason, <xref ref-type="statement" rid="Algorithm_2">Algorithm 2</xref> is only directly relevant to blockchain nodes in a layer 1 implementation of the mechanism and during the consensus process, while a new transaction is propagating through the network for inclusion on the blockchain and when verifying a new block that contains the transaction. <xref ref-type="statement" rid="Algorithm_2">Algorithm 2</xref> may nonetheless be used at any time in a layer 2 setting by a node or a third party external to the blockchain network in possession of the full transaction data <italic>Tx</italic> to verify it has been correctly associated with an <italic>MTxID</italic> by nodes voluntarily using our proposed mechanism as a layer 2 protocol.</p>
<p>The transaction identifier verification process should not be conflated with the process of verifying, in the absence of the full transaction data <italic>Tx</italic>, whether an individual data portion <italic>D</italic>
<sub>
<italic>i</italic>
</sub> of the transaction has been included on the blockchain. This process is instead referred to as a <italic>lightweight proof of existence</italic> verification and is outlined in <xref ref-type="sec" rid="s4-4">Section 4.4</xref>.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Data redaction</title>
<p>The previous section outlined a process for generating secondary transaction identifiers for blockchain transactions. These identifiers are Merkle-based to allow the granular verification of data fields. The verification of an individual field using an <italic>MTxID</italic> is more efficient that using the traditional <italic>TxID</italic> because it does not require the verifier to obtain the full transaction data <italic>Tx</italic>. We now use this technique as a building block to enable data redaction for Bitcoin-like ledgers.</p>
<sec id="s4-1">
<title>4.1 Trusting transaction identifiers</title>
<p>Previously, deleting any part of a transaction would compromise the ability of a blockchain node to prove the existence of data contained within the rest of the transaction. The introduction of <italic>MTxID</italic>s now enables data to be redacted from the blockchain by allowing nodes to simply delete particular leaves from a transaction Merkle tree <italic>T</italic>. Deleting these leaves does not prohibit the node from providing compact proofs of existence for the remainder of the transaction, or even verifying future spending relationships with the transaction in question. However, the addition of an <italic>MTxID</italic> for each transaction is only part of the solution. Specifically, we need a mechanism to establish trust that a given <italic>MTxID</italic> has been generated correctly for the corresponding transaction. Without having a publicly known and reliable attestation of the <italic>MTxID</italic>s for each transaction, we cannot use them to prove with confidence that a particular data item actually exists on the blockchain.</p>
<p>To prove that a data element <italic>D</italic>
<sub>
<italic>i</italic>
</sub> is included in a transaction on the blockchain, we must prove both of the following:<list list-type="simple">
<list-item>
<p>&#x2022; there must be a valid proof <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub> connecting <italic>D</italic>
<sub>
<italic>i</italic>
</sub> to a secondary identifier <italic>MTxID</italic>; and</p>
</list-item>
<list-item>
<p>&#x2022; there must be a valid proof <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> that <italic>MTxID</italic> corresponds to a valid transaction <italic>Tx</italic> on the blockchain that can also be identified by <italic>TxID</italic>
</p>
</list-item>
</list>
</p>
<p>If both conditions are met, we can be convinced that <italic>D</italic>
<sub>
<italic>i</italic>
</sub> exists at the claimed location on the blockchain.</p>
<p>The first condition is met simply by obtaining <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub>, which is the set of hashes corresponding to a standard Merkle proof <xref ref-type="bibr" rid="B10">Merkle (1980)</xref> that proves the leaf data <italic>D</italic>
<sub>
<italic>i</italic>
</sub> is a member of the set of leaves of the Merkle tree corresponding the Merkle root <italic>R</italic> &#x3d; <italic>MTxID</italic> for the transaction in question.</p>
<p>The second condition is easily met in a layer 1 setting, where <italic>MTxID</italic> is simply the canonical transaction identifier for the transaction, assuming that the consensus algorithm has been modified appropriately to ensure this. In this case, the proof <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> is simply the standard Merkle proof that connects <italic>MTxID</italic> to the Merkle root <italic>R</italic>
<sub>
<italic>B</italic>
</sub> of a valid block <italic>B</italic> in the blockchain, in the same way that there exists a Merkle proof in the Bitcoin consensus algorithm that currently connects each transaction identifier <italic>TxID</italic> to a root <italic>R</italic>
<sub>
<italic>B</italic>
</sub>.</p>
<p>In a layer 2 setting however, a participating node must perform additional steps during the block generation process to ensure that a valid <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> will exist for a given <italic>MTxID</italic>. In the following subsections, we outline how a node may generate a secondary block Merkle tree, in addition to the standard Merkle tree of a Bitcoin block, and include the root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> of this secondary tree in a coinbase transaction during block generation. By including both <italic>R</italic>
<sub>
<italic>B</italic>
</sub> and this additional root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> when generating a block, the participating node establishes the required information for a valid proof <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> in the layer 2 setting. The use of <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> to verify the existence of a transaction data portion on the blockchain is then outlined in <xref ref-type="sec" rid="s4-4">Section 4.4</xref>.</p>
</sec>
<sec id="s4-2">
<title>4.2 Secondary block Merkle tree</title>
<p>To achieve such a proof, we introduce a <italic>secondary block Merkle tree</italic> denoted by <italic>T</italic>
<sub>
<italic>M</italic>
</sub> and whose root is <italic>R</italic>
<sub>
<italic>M</italic>
</sub>. For a block <italic>B</italic> containing <italic>N</italic> transactions, the leaves of <italic>T</italic>
<sub>
<italic>M</italic>
</sub> correspond to the set of secondary transaction identifiers <italic>MTxID</italic>
<sub>1</sub>, &#x2026;, <italic>MTxID</italic>
<sub>
<italic>N</italic>
</sub> for the transactions <italic>Tx</italic>
<sub>1</sub>, &#x2026;, <italic>Tx</italic>
<sub>
<italic>N</italic>
</sub> contained with the block. In other words, <italic>T</italic>
<sub>
<italic>M</italic>
</sub> is effectively a tree of Merkle trees. The proposed redaction mechanism relies on a node including the root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> in the coinbase transaction of blocks they successfully generate.</p>
<p>The structure of a secondary block Merkle tree is outlined in <xref ref-type="fig" rid="F4">Figure 4</xref>. As shown, the order of the transactions used to derive <italic>T</italic>
<sub>
<italic>M</italic>
</sub> must be the same as the order of the transactions as they appear in block <italic>B</italic> and its original block Merkle tree <italic>T</italic>
<sub>
<italic>B</italic>
</sub>. The exception is the coinbase transaction, which does not appear in the secondary tree. The coinbase transaction is necessarily excluded from <italic>T</italic>
<sub>
<italic>M</italic>
</sub> because our redaction protocol requires <italic>R</italic>
<sub>
<italic>M</italic>
</sub> to be stored in the coinbase transaction itself.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>A schematic outline of the block generation protocol for Merklized transactions.</p>
</caption>
<graphic xlink:href="fbloc-06-1222614-g004.tif"/>
</fig>
</sec>
<sec id="s4-3">
<title>4.3 Block generation protocol</title>
<p>To facilitate the redaction of data after it has been included on the blockchain in a block <italic>B</italic>, we require only that the node responsible for generating <italic>B</italic> also includes the root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> in the coinbase transaction. This represents a minor modification of the standard process of generating Bitcoin blocks that a node participating in this redaction scheme. The details of the updated block-generation protocol is shown in <xref ref-type="statement" rid="Algorithm_3">Algorithm 3</xref>. The modified process requires that the node generates the secondary Merkle tree <italic>T</italic>
<sub>
<italic>M</italic>
</sub> and includes its root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> in the coinbase transaction. A suitable option is to include the root in the coinbase script. The node can then generate the standard block Merkle tree <italic>T</italic>
<sub>
<italic>B</italic>
</sub> and generate the final block <italic>B</italic> by finding a valid proof of work solution. Crucially, the proposed solution operates at a layer above the base blockchain protocol and does not require any change to the underlying rule set used to maintain and validate the blockchain.</p>
<p>
<statement content-type="algorithm" id="Algorithm_3">
<label>Algorithm 3</label>
<p>Block Generation for Redactable Data.<list list-type="simple">
<list-item>
<p>
<bold>Input:</bold> Transaction set <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi mathvariant="double-struck">T</mml:mi>
<mml:mo>&#x2254;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mi>T</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>
<bold>Output:</bold> Block <italic>B</italic>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;1: <bold>for</bold> <italic>Tx</italic>
<sub>
<italic>i</italic>
</sub> in <italic>Tx</italic>
<sub>1</sub>, &#x2026;<italic>Tx</italic>
<sub>
<italic>N</italic>
</sub> <bold>do</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;2: Split <italic>Tx</italic>
<sub>
<italic>i</italic>
</sub> into <italic>M</italic> packets <italic>D</italic>
<sub>1</sub>, &#x2026;, <italic>D</italic>
<sub>
<italic>M</italic>
</sub>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;3: Generate <italic>R</italic>
<sub>
<italic>i</italic>
</sub> &#x2190; <italic>Merklize</italic>(<italic>D</italic>
<sub>1</sub>, &#x2026;, <italic>D</italic>
<sub>
<italic>M</italic>
</sub>, <italic>TxID</italic>
<sub>
<italic>i</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;4: Set <italic>MTxID</italic>
<sub>
<italic>i</italic>
</sub> &#x2190; <italic>R</italic>
<sub>
<italic>i</italic>
</sub>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;5: <bold>end for</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;6: Generate <italic>T</italic>
<sub>
<italic>M</italic>
</sub> &#x2190; <italic>Merklize</italic>(<italic>MTxID</italic>
<sub>1</sub>, &#x2026;, <italic>MTxID</italic>
<sub>
<italic>N</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;7: Add <italic>R</italic>
<sub>
<italic>M</italic>
</sub> to coinbase transaction <italic>Tx</italic>
<sub>
<italic>C</italic>
</sub>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;8: Generate <italic>T</italic>
<sub>
<italic>B</italic>
</sub> &#x2190; <italic>Merklize</italic>(<italic>Tx</italic>
<sub>
<italic>C</italic>
</sub>, <italic>Tx</italic>
<sub>1</sub>, &#x2026;, <italic>Tx</italic>
<sub>
<italic>N</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;9: Generate block <italic>B</italic> including <italic>R</italic>
<sub>
<italic>B</italic>
</sub>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;10: <bold>return</bold> <italic>B</italic>
</p>
</list-item>
</list>
</p>
</statement>
</p>
</sec>
<sec id="s4-4">
<title>4.4 Lightweight proof of existence</title>
<p>The core goal of the mechanism outlined in <xref ref-type="sec" rid="s3">Section 3</xref> is to prepare a transaction <italic>Tx</italic>, when it is added to the blockchain, such that a subset of its data can be verified as included on the blockchain at a later time in the absence of the full original transaction data. In other words, to allow for the verification that a data portion <italic>D</italic>
<sub>
<italic>i</italic>
</sub> &#x2208; <italic>D</italic>
<sub>1</sub>, &#x2026;, <italic>D</italic>
<sub>
<italic>M</italic>
</sub> has been included in the blockchain without access to one or more of the remaining data portions <italic>D</italic>
<sub>
<italic>j</italic>&#x2260;<italic>i</italic>
</sub> of the original <italic>Tx</italic>. As outlined previously, we require two proofs <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub> and <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> to satisfy our conditions that prove the data portion exists on the blockchain in the absence of the full transaction data.</p>
<p>The first proof <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub> is the Merkle proof connecting the data portion <italic>D</italic>
<sub>
<italic>i</italic>
</sub> to the secondary identifier <italic>MTxID</italic> and can be checked simply using a standard Merkle proof verification. This check is performed by verifying the Merkle proof <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub> for the leaf <italic>D</italic>
<sub>
<italic>i</italic>
</sub> against the Merkle root <italic>MTxID</italic>, which we denote by <italic>C</italic>
<sub>1</sub> &#x2190; <italic>MerkleVerify</italic>(<italic>D</italic>
<sub>
<italic>i</italic>
</sub>, <italic>MTxID</italic>, <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub>), setting <italic>C</italic>
<sub>1</sub> to True if the check is successful and False otherwise.</p>
<p>In the layer 2 context we are considering, the second proof <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> &#x3d; (<italic>&#x3c0;</italic>
<sub>
<italic>MTxID</italic>
</sub>, <italic>&#x3c0;</italic>
<sub>
<italic>TxID</italic>
</sub>) in fact comprises two further Merkle proofs <italic>&#x3c0;</italic>
<sub>
<italic>MTxID</italic>
</sub> and <italic>&#x3c0;</italic>
<sub>
<italic>TxID</italic>
</sub>, which connect <italic>MTxID</italic> to the secondary root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> and <italic>TxID</italic> to the standard root <italic>R</italic>
<sub>
<italic>B</italic>
</sub> respectively. In order to verify the second condition using <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub>, we must perform a total of three checks <italic>C</italic>
<sub>2</sub>, <italic>C</italic>
<sub>3</sub>, <italic>C</italic>
<sub>4</sub>. Checks <italic>C</italic>
<sub>2</sub>, <italic>C</italic>
<sub>3</sub> are simply Merkle proof verifications similar to <italic>C</italic>
<sub>1</sub> and using the same notation. The final check <italic>C</italic>
<sub>4</sub> is to confirm that both <italic>R</italic>
<sub>
<italic>M</italic>
</sub> and <italic>R</italic>
<sub>
<italic>B</italic>
</sub> have been included in the same block header <italic>H</italic>
<sub>
<italic>B</italic>
</sub> by a participating node. In combination, checks <italic>C</italic>
<sub>2</sub> to <italic>C</italic>
<sub>4</sub> prove that <italic>MTxID</italic> corresponds to the same transaction as <italic>TxID</italic> included in the block <italic>B</italic>.</p>
<p>The full lightweight proof of existence process is outlined in <xref ref-type="statement" rid="Algorithm_4">Algorithm 4</xref>. This mechanism allows anybody to verify that a data portion <italic>D</italic>
<sub>
<italic>i</italic>
</sub> has been included on the blockchain as part of <italic>Tx</italic> without requiring the other data portions <italic>D</italic>
<sub>
<italic>j</italic>&#x2260;<italic>i</italic>
</sub> comprising the original transaction.</p>
<p>
<statement content-type="algorithm" id="Algorithm_4">
<label>Algorithm 4</label>
<p>Layer 2 Lightweight Proof of Existence.<list list-type="simple">
<list-item>
<p>
<bold>Input:</bold> <italic>D</italic>
<sub>
<italic>i</italic>
</sub>, <italic>MTxID</italic>, <italic>TxID</italic>, <italic>R</italic>
<sub>
<italic>M</italic>
</sub>, <italic>R</italic>
<sub>
<italic>B</italic>
</sub>, block header <italic>H</italic>
<sub>
<italic>B</italic>
</sub>, proof <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub>, proofs <italic>&#x3c0;</italic>
<sub>
<italic>B</italic>
</sub> &#x3d; (<italic>&#x3c0;</italic>
<sub>
<italic>MTxID</italic>
</sub>, <italic>&#x3c0;</italic>
<sub>
<italic>TxID</italic>
</sub>)</p>
</list-item>
<list-item>
<p>
<bold>Output:</bold> Result</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;1: <italic>C</italic>
<sub>1</sub> &#x2190; <italic>MerkleVerify</italic>(<italic>D</italic>
<sub>
<italic>i</italic>
</sub>, <italic>MTxID</italic>, <italic>&#x3c0;</italic>
<sub>
<italic>M</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;2: <italic>C</italic>
<sub>2</sub> &#x2190; <italic>MerkleVerify</italic>(<italic>MTxID</italic>, <italic>R</italic>
<sub>
<italic>M</italic>
</sub>, <italic>&#x3c0;</italic>
<sub>
<italic>MTxID</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;3: <italic>C</italic>
<sub>3</sub> &#x2190; <italic>MerkleVerify</italic>(<italic>TxID</italic>, <italic>R</italic>
<sub>
<italic>B</italic>
</sub>, <italic>&#x3c0;</italic>
<sub>
<italic>TxID</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;4: <italic>C</italic>
<sub>4</sub> &#x2190; <italic>Check</italic>(<italic>R</italic>
<sub>
<italic>M</italic>
</sub>, <italic>R</italic>
<sub>
<italic>B</italic>
</sub> &#x2208; <italic>H</italic>
<sub>
<italic>B</italic>
</sub>)</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;5: <bold>if</bold>&#xa0;<italic>C</italic>
<sub>1</sub> <bold>and</bold> <italic>C</italic>
<sub>2</sub> <bold>and</bold> <italic>C</italic>
<sub>3</sub> <bold>and</bold> <italic>C</italic>
<sub>4</sub> <bold>then</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;6: Result &#x2190; True</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;7: <bold>else</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;8: Result &#x2190; False</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;9: <bold>end if</bold>
</p>
</list-item>
<list-item>
<p>&#xa0;&#xa0;10: <bold>return</bold> Result</p>
</list-item>
</list>
</p>
</statement>
</p>
<p>This proof of existence protocol is lightweight because it only requires the portion of the transaction <italic>D</italic>
<sub>
<italic>i</italic>
</sub> that is to be verified. For instance, if a large transaction 100 Megabytes in size has been split into 1 Kilobyte portions the verifier only needs to retrieve 0.001% of the transaction data. This represents a significant storage and bandwidth saving for any application that needs to verify small items of data stored within large transactions. The flexibility and granularity of data portions <italic>D</italic>
<sub>
<italic>i</italic>
</sub> that can be verified in this manner is constrained by the choice of how the transaction <italic>Tx</italic> was originally split into packets in <xref ref-type="statement" rid="Algorithm_3">Algorithm 3</xref> by the participating blockchain node.</p>
<p>It is anticipated that the lightweight proof of existence verification process may be performed by any blockchain node or third party that needs to verify the existence of a portion of data on the blockchain. An example application using this feature would be a video streaming service to allow users to check the metadata of a video file stored on the blockchain without needing to download the entire media file itself.</p>
<p>In both layer 1 and layer 2 implementations of the Merklized transaction protocol, it should be noted that lightweight verifications are expected to be performed at a later time after the transaction has been initially added to the blockchain. This means that transactions are still expected to be processed in the usual manner at the time they are added to the blockchain. However, by implementing the transaction Merklization process during block generation, whether at layer 1 or 2, individual fields can be later verified by any party in a lightweight manner.</p>
</sec>
<sec id="s4-5">
<title>4.5 Data redaction</title>
<p>A key benefit of the proposed transaction Merklization protocol is that individual data elements within transactions can be verified as existing on the blockchain without possessing the full transaction data. This feature is crucial to allow nodes to selectively delete some portions of transaction data without sacrificing the ability to verify others.</p>
<p>This is particularly advantageous in the event that a node is compelled by law to delete or redact some data from its local copy of the blockchain database. Typically, if a node is required to delete or redact a portion of transaction data it must delete the full transaction, making it impossible to preserve other parts of the transaction not subject to the redaction. This can render nodes unable to prove legally-compliant data exists on the blockchain in the case that it is stored in the same transaction as data which must be redacted.</p>
<p>Conversely, our mechanism allows nodes to redact only the portions of data to which legal deletion or regulations such as GDPR apply. The use of Merklized transactions, and the extensions outlined for support as a layer 2 protocol, ensure that the remaining portions of the transaction data can still be proven as part of the blockchain database even after the node has removed other components as required.</p>
<p>In this regime, the redaction of a data portion from a transaction simply involves a node deleting the specific leaves from a transaction Merkle tree <italic>T</italic> that correspond to the data that must be redacted. The deletion of a subset of leaves from a given transaction by one node does not preclude other nodes from storing and serving the remaining leaves from the same tree. This is because the Merkle tree structures used allow any node to prove the existence of any of the remaining leaves without needing to hold or access the deleted leaves. In practice, this may be done in response to a request for deletion to comply with the right to be forgotten or GDPR laws <xref ref-type="bibr" rid="B3">Ateniese et al. (2017)</xref>; <xref ref-type="bibr" rid="B14">Shah et al. (2019)</xref>. Each such request may only apply to different nodes on a jurisdictional or regional basis. Crucially, when implemented as a layer 2 protocol this allows individual nodes to act unilaterally in redacting data as required by the legal jurisdiction in which they operate, without affecting the operations of other nodes in the network. This therefore allows each node to comply with local rules and regulations regarding data protection and privacy without impinging on other nodes which may not be subject to the same legilsation across the world.</p>
</sec>
</sec>
<sec sec-type="discussion" id="s5">
<title>5 Discussion</title>
<p>We have defined a framework enabling data to be redacted from Bitcoin-like blockchains without sacrificing the integrity and utility of storing the remaining data on the blockchain. Finally we consider the properties, advantages, and limitations of the solution.</p>
<sec id="s5-1">
<title>5.1 Properties</title>
<p>The proposed protocol introduced redactability for blockchain data that can be implemented on top of the base Bitcoin protocol. This means that there is no requirement to modify the underlying blockchain infrastructure to facilitate better GDPR compliance for nodes. Moreover, the mechanism can be implemented independently by any individual node, whether in their own interest or as a public service to the network. This also presents a significant privacy benefit for the end users of blockchain networks who can now demand that their data is removed from public blockchain ledgers.</p>
<p>Our solution is also efficient because it does not rely on any heavy cryptographic primitives and is based primarily on Merkle trees which are a scalable data structure allowing compact proofs of existence. The efficiency of this method allows partial transaction verification that can allow a user to check individual aspects of a transaction, such as the transaction value or the number of outputs, without downloading the entire transaction using Merkle proofs. This presents a new way for blockchain analytics to be conducted using lower bandwidths suitable for Internet of Things devices or low-powered user hardware.</p>
</sec>
<sec id="s5-2">
<title>5.2 Complexity</title>
<p>As discussed, the key efficiency benefit afforded by the proposed protocol is during the lightweight verification processes, where only a minimal portion of the transaction data is required to verify its existence. In extreme cases, this may represent a significant saving in terms of storage and bandwidth required to obtain the data necessary for verification.</p>
<p>When assessing the overall scalability of the solution as compared with current blockchain protocols, we must consider the complexity of the process used to generate an <italic>MTxID</italic> and to generate the corresponding secondary root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> used to encode these identifiers in a block by participating nodes.</p>
<p>The time complexity of computing a standard transaction identifier <italic>TxID</italic> is determined by the time complexity of the hash function used to generate the identifier. In the case of Bitcoin, the SHA-256 hash function is used, whose complexity scales as <inline-formula id="inf2">
<mml:math id="m2">
<mml:mi mathvariant="script">O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, where <italic>n</italic> is the number of 512-bit message blocks contained in the full data of <italic>Tx</italic> <xref ref-type="bibr" rid="B11">Rachmawati et al. (2018)</xref>. The complexity associated with generating the <italic>MTxID</italic> for a given transaction will therefore depend on the size of the data packets <italic>D</italic>
<sub>
<italic>i</italic>
</sub> into which the transaction is split. If it is split into packets of approximately 512-bits, the process of generating a <italic>MTxID</italic> will scale as <inline-formula id="inf3">
<mml:math id="m3">
<mml:mi mathvariant="script">O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>l</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, where the additional <italic>log</italic>(<italic>n</italic>) arises due to the definition of <italic>MTxID</italic> as a Merkle tree requiring additional hashes to be computed upon the leaf hash values. This shows the additional time complexity required to compute <italic>MTxID</italic> is small compared to the existing complexity for generating a <italic>TxID</italic>, and therefore does not significantly impact the performance of nodes when processing transactions.</p>
<p>The generation of the additional root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> to be included in the coinbase transaction has the same complexity as generating the standard root <italic>R</italic>
<sub>
<italic>B</italic>
</sub>, which scales as <inline-formula id="inf4">
<mml:math id="m4">
<mml:mi mathvariant="script">O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> where <italic>N</italic> is the total number of transactions contained in the block. However, this should not increase the time taken to generate a block significantly as both roots can be generated in parallel and either computation represents a small fraction of the total verification process for transactions which is generally dominated by the verification of elliptic curve digital signatures.</p>
</sec>
<sec id="s5-3">
<title>5.3 Protocol extensions</title>
<p>The protocol in its current form is limited because only the transactions in blocks mined by participating miners are eligible for redaction. In addition, the protocol still requires a level of trust in the nodes themselves to faithfully create the correct secondary tree <italic>T</italic>
<sub>
<italic>M</italic>
</sub> for each of their blocks. Here we propose potential extensions to improve these aspects.</p>
<sec id="s5-3-1">
<title>5.3.1 Accounting for interim periods</title>
<p>We do not anticipate that all nodes will simultaneously implement the redaction protocol since it is not a protocol-level requirement. However, the nodes that do choose to provide the redaction service can also account for the interim periods between their blocks by creating secondary trees for the interim blocks and combining them into a summary root hash <italic>R</italic>
<sub>Int</sub>. This additional root can be included in a node&#x2019;s blocks alongside the root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> for the current block each time the node successfully generates a new block.</p>
</sec>
<sec id="s5-3-2">
<title>5.3.2 Trusting participating nodes</title>
<p>In the case where the protocol is implemented at layer 1, the underlying consensus mechanism can be updated such that the secondary identifiers <italic>MTxID</italic> are made canonical according to the protocol. This means that there is no additional trust placed on network nodes as the Merklized transaction identifier is enforced by the protocol rules directly.</p>
<p>However, when implemented at layer 2 volunatrily by individual nodes, there is no verification by the underlying blockchain protocol that the secondary Merkle tree <italic>T</italic>
<sub>
<italic>M</italic>
</sub> has been generated correctly and that the correct corresponding root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> has been included in the coinbase transaction. For instance, it is possible that the root <italic>R</italic>
<sub>
<italic>M</italic>
</sub> may be malformed either due to error or malicious intent of a participating node. This creates the need for greater trust in the participating nodes when performing lightweight proofs of verification on individual portions of transaction data.</p>
<p>Trust in participating nodes may be improved by implementing a reputation system for nodes providing this service, where reputation can be based on the proportion of successfully-generated secondary Merkle roots. In addition, it is possible for the generation of each secondary root to be checked far in advance of a data redaction request. This means that faulty roots can be easily detected in advance and incorrect proofs of existence mitigated. Additional third parties such as regulators could perform the checking procedure to support the blockchain ecosystem and prevent fraud.</p>
</sec>
</sec>
</sec>
<sec sec-type="conclusion" id="s6">
<title>6 Conclusion</title>
<p>In conclusion, we have presented a novel, Merkle-based data redaction mechanism for public blockchain networks such as BTC, BCH, and BSV. Our design enables improved privacy for the users of such blockchains by enabling nodes to redact transaction data on a granular level. This allows them to provide improved compliance guarantees and additional protections for users and applications putting data on the blockchain. Moreover, the protocol can be implemented on top of any Bitcoin-like chain, without the need to modify the underlying blockchain system, by a single participating node. The mechanism we have proposed is also highly efficient and scalable through its use of Merkle tree structures. This has the added advantage that individual characteristics of transactions, such as size or value, can be checked without obtaining the full transaction data. The effect is that our proposal reduces the bandwidth costs required to interact with blockchain-based applications that use distributed ledgers as an underlying data source. The proposed system we have outlined overcomes limitations in existing redaction protocols by removing the requirement of a central coordinating party and by ensuring that blockchain-level mutability is not introduced by our design.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s7">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/Supplementary Material, further inquiries can be directed to the corresponding author.</p>
</sec>
<sec id="s8">
<title>Author contributions</title>
<p>The author confirms being the sole contributor of this work and has approved it for publication.</p>
</sec>
<sec sec-type="COI-statement" id="s9">
<title>Conflict of interest</title>
<p>Author JD was employed by nChain.</p>
</sec>
<sec sec-type="disclaimer" id="s10">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Aitsam</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Chantaraskul</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Blockchain technology, technical challenges and countermeasures for illegal data insertion</article-title>. <source>Eng. J.</source> <volume>24</volume>, <fpage>65</fpage>&#x2013;<lpage>72</lpage>. <pub-id pub-id-type="doi">10.4186/ej.2020.24.1.65</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ali</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Shea</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Nelson</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Freedman</surname>
<given-names>M. J.</given-names>
</name>
</person-group> (<year>2017</year>). <source>Blockstack: a new decentralized internet</source>. <comment>Whitepaper</comment>.</citation>
</ref>
<ref id="B3">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Ateniese</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Magri</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Venturi</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Andrade</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>Redactable blockchain&#x2013;or&#x2013;rewriting history in bitcoin and friends</article-title>,&#x201d; in <conf-name>2017 IEEE European symposium on security and privacy (EuroS&#x26;P) (IEEE)</conf-name>, <conf-loc>Paris</conf-loc>, <conf-date>April 26-28, 2017</conf-date>, <fpage>111</fpage>.</citation>
</ref>
<ref id="B4">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Bartoletti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Pompianu</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>An analysis of bitcoin op_return metadata</article-title>,&#x201d; in <conf-name>International Conference on Financial Cryptography and Data Security</conf-name>, <conf-loc>Sliema, Malta</conf-loc>, <conf-date>April 3-7, 2017</conf-date>, <fpage>218</fpage>&#x2013;<lpage>230</lpage>.</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bruschi</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Rana</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Pagani</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Sciuto</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Tunneling trust into the blockchain: a merkle based proof system for structured documents</article-title>. <source>IEEE Access</source> <volume>9</volume>, <fpage>103758</fpage>&#x2013;<lpage>103771</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2020.3028498</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Deuber</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Magri</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Thyagarajan</surname>
<given-names>S. A. K.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Redactable blockchain in the permissionless setting</article-title>,&#x201d; in <conf-name>2019 IEEE Symposium on Security and Privacy (SP)</conf-name>, <conf-loc>San Francisco, CA, USA</conf-loc>, <conf-date>May 19 2019 to May 23 2019</conf-date>, <fpage>124</fpage>. <pub-id pub-id-type="doi">10.1109/SP.2019.00039</pub-id>
</citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Huang</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Mu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Rezaeibagha</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Du</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Scalable and redactable blockchain with update and anonymity</article-title>. <source>Inf. Sci.</source> <volume>546</volume>, <fpage>25</fpage>&#x2013;<lpage>41</lpage>. <pub-id pub-id-type="doi">10.1016/j.ins.2020.07.016</pub-id>
</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liang</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Fan</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>K.-C.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Gaudiot</surname>
<given-names>J.-L.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Secure data storage and recovery in industrial blockchain network environments</article-title>. <source>IEEE Trans. Industrial Inf.</source> <volume>16</volume>, <fpage>6543</fpage>&#x2013;<lpage>6552</lpage>. <pub-id pub-id-type="doi">10.1109/TII.2020.2966069</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Matzutt</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Hiller</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Henze</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ziegeldorf</surname>
<given-names>J. H.</given-names>
</name>
<name>
<surname>M&#xfc;llmann</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Hohlfeld</surname>
<given-names>O.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). &#x201c;<article-title>A quantitative analysis of the impact of arbitrary blockchain content on bitcoin</article-title>,&#x201d; in <source>Financial cryptography and data security</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Meiklejohn</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Sako</surname>
<given-names>K.</given-names>
</name>
</person-group> (<publisher-loc>Berlin, Heidelberg</publisher-loc>: <publisher-name>Springer Berlin Heidelberg</publisher-name>), <fpage>420</fpage>&#x2013;<lpage>438</lpage>.</citation>
</ref>
<ref id="B10">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Merkle</surname>
<given-names>R. C.</given-names>
</name>
</person-group> (<year>1980</year>). &#x201c;<article-title>Protocols for public key cryptosystems</article-title>,&#x201d; in <conf-name>1980 IEEE Symposium on Security and Privacy</conf-name>, <conf-loc>Oakland, California, USA</conf-loc>, <conf-date>April 14-16, 1980</conf-date>, <fpage>122</fpage>. <pub-id pub-id-type="doi">10.1109/SP.1980.10006</pub-id>
</citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rachmawati</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Tarigan</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ginting</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>A comparative study of message digest 5 (md5) and sha256 algorithm</article-title>. <source>J. Phys. Conf. Ser.</source> <volume>978</volume>, <fpage>012116</fpage>. <pub-id pub-id-type="doi">10.1088/1742-6596/978/1/012116</pub-id>
</citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rajasekhar</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Yalavarthy</surname>
<given-names>S. H.</given-names>
</name>
<name>
<surname>Mullapudi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Gowtham</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Redactable blockchain and it&#x2019;s implementation in bitcoin</article-title>. <source>Int. J. Eng. Technol.</source> <volume>7</volume>, <fpage>401</fpage>&#x2013;<lpage>405</lpage>. <pub-id pub-id-type="doi">10.14419/ijet.v7i1.1.9861</pub-id>
</citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sgantzos</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Grigg</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Artificial intelligence implementations on the blockchain. use cases and future applications</article-title>. <source>Future Internet</source> <volume>11</volume>, <fpage>170</fpage>. <pub-id pub-id-type="doi">10.3390/fi11080170</pub-id>
</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Shah</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Forester</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Berberich</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Rasp&#xe9;</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Mueller</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Blockchain technology: data privacy issues and potential mitigation strategies</article-title>. <source>Pract. Law</source>. Available at: <ext-link ext-link-type="uri" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.davispolk.com/sites/default/files/blockchain_technology_data_privacy_issues_and_potential_mitigation_strategies_w-021-8235.pdf">https://www.davispolk.com/sites/default/files/blockchain_technology_data_privacy_issues_and_potential_mitigation_strategies_w-021-8235.pdf</ext-link>.</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Yang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Xiang</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Blockchain-based publicly verifiable data deletion scheme for cloud storage</article-title>. <source>J. Netw. Comput. Appl.</source> <volume>103</volume>, <fpage>185</fpage>&#x2013;<lpage>193</lpage>. <pub-id pub-id-type="doi">10.1016/j.jnca.2017.11.011</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Le</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Lei</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Xiang</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Liao</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Exploring the redaction mechanisms of mutable blockchains: a comprehensive survey</article-title>. <source>Int. J. Intelligent Syst.</source> <volume>36</volume>, <fpage>5051</fpage>&#x2013;<lpage>5084</lpage>. <pub-id pub-id-type="doi">10.1002/int.22502</pub-id>
</citation>
</ref>
</ref-list>
</back>
</article>