<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Deep Blockchain to Enable Scalable Web Applications</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Yajna</forename><surname>Pandith</surname></persName>
							<email>yajnanpandith@gmail.com</email>
							<affiliation key="aff0">
								<address>
									<settlement>Bengaluru</settlement>
									<region>Karnataka</region>
									<country key="IN">India</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Deep Blockchain to Enable Scalable Web Applications</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">65DD7301838C715C9C6B0F90FEDE7800</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T17:32+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>deep blockchain</term>
					<term>data storage</term>
					<term>web applications</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>The work delves into the exploration of deep blockchain architecture involving the introduction of higher-layer blockchains, which summarize their blocks through anchor transactions integrated into the blocks of lower-layer blockchains. The architecture is structured as follows: (I) Layer 1 -MainNet: This layer serves as the repository for registered Layer 3 blockchain roots and Layer 2 Block Merkle roots. (II) Layer 2 -Plasma Cash chain: This layer facilitates the storage of Plasma tokens, which can be redeemed for bandwidth, along with Layer 3 Block hashes. (III) Layer 3 -Multiple blockchains: These blockchains leverage the storage and bandwidth capabilities provided by Layer 2, enabling seamless packaging of NoSQL/SQL transactions and similar database operations. Sparse Merkle Trees is employed extensively, demonstrating their efficacy in delivering provable data storage through the use of Deep Merkle Proofs. Our objective is to present results highlighting re-markable throughput and low latency for Layer 3 blockchains built upon economically secure Layer 2 Plasma Cash blockchains. Collectively, these advancements lay a solid foundation for the development of scalable web applications. Our research paves the way for innovative solutions in various industries that can scale modern web applications successfully, ensuring unwavering data integrity, enhanced security, and optimized efficiency.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Layer 1 blockchains such as Ethereum and Bitcoin, on their own, cannot support the latency and throughput needs for modern web applications <ref type="bibr">[1]</ref>. Attempting to support higher throughput or lower latency with naive solutions (e.g. larger blocks, lower security consensus algorithms, etc.) sacrifices the core benefits of layer 1 blockchains <ref type="bibr" target="#b2">[2]</ref>. It is unnecessary to make these sacrifices in the name of scalability for blockchains: when one blockchain is capable of storing and retrieving state, then another blockchain's summary state variables may be stored there. This can be done in layers, where Layer i+1 blockchain's state is stored in Layer i blockchains and each blockchain uses a well-motivated consensus engine to achieve Byzantine fault tolerance <ref type="bibr" target="#b3">[3]</ref>. Using this layered approach, the key elements of a deep blockchain architecture can be specified. The blockchain paradigm <ref type="bibr" target="#b4">[4]</ref> that forms the backbone of all decentralized consensusbased transaction systems to date is as follows. A valid state transition for a blockchain of Layer 𝑖 is one which comes about through a transaction 𝑇 𝑖 𝑗 :</p><formula xml:id="formula_0">𝜎 𝑖 𝑡+1 = Υ 𝑖 (𝜎 𝑖 𝑡 , 𝑇 𝑖 𝑗 )<label>(1)</label></formula><p>where Υ 𝑖 is the Layer 𝑖 blockchain state transition function, while 𝜎 𝑖 𝑡 enables components to retain arbitrary state between transactions. Transactions are organized into blocks, which are interlinked through a parent hash within each block to reference the preceding block. Together, these blocks serve as a ledger, with block hashes employed to spot the ultimate state:</p><formula xml:id="formula_1">𝜎 𝑖 𝑡+1 ≡ Π 𝑖 (𝜎 𝑖 𝑡 , 𝐵 𝑖 𝑗 )<label>(2)</label></formula><p>𝐵 𝑖 𝑗 ≡ (. . . , (𝑇 𝑖 𝑗 0 , 𝑇 𝑖 𝑗 1 , . . .))</p><p>Π 𝑖 (𝜎 𝑖 𝑡 , 𝐵 𝑖 𝑗 ) ≡ Ω 𝑖 (𝐵 𝑖 𝑗 , Υ 𝑖 (Υ 𝑖 (𝜎 𝑖 𝑡 , 𝑇 𝑖 𝑗 0 ), 𝑇 𝑖 𝑗 1 , . . .)) <ref type="bibr" target="#b4">(4)</ref> where Ω 𝑖 is the block finalization state transition function for layer 𝑖, 𝐵 𝑖  𝑗 is the 𝑗th block of layer 𝑖 (which collates transactions and other components), and Π 𝑖 is the block-level state transition function for layer 𝑖.</p><p>In a deep blockchain system, a blockchain layer 𝑖 is said to be connected to layer 𝑖 + 1 if:</p><p>1. there exists a transaction mapping function Λ 𝑖+1 mapping blocks at layer 𝑖 + 1 into transactions 𝑇 𝑖 𝑘 at layer 𝑖 for all layer 𝑖 + 1 blocks 𝐵 𝑖+1 𝑗</p><formula xml:id="formula_3">𝑇 𝑖 𝑘 ≡ Λ 𝑖+1 (𝐵 𝑖+1 𝑗 )<label>(5)</label></formula><p>2. there exists a mapping function Ξ 𝑖 (𝑘) retrieving from blockchain layer 𝑖 a mapping 𝑓 (𝐵 𝑖+1 𝑘 ) of the blocks state of layer 𝑖 + 1 for all blocks 𝐵 𝑖+1 𝑘 Ξ 𝑖 (𝑘) ≡ 𝑓 (𝐵 𝑖+1 𝑘 )</p><p>A natural choice for transaction mapping Λ 𝑖+1 (𝐵 𝑖+1 as a transaction 𝑇 𝑖 𝑘 <ref type="bibr" target="#b5">[5]</ref>, and for the lower layer to provide the block hash back (see Figure <ref type="figure" target="#fig_0">1</ref> (left)). This paper, demonstrates a deep blockchain system for provable storage, situating a "Plasma Cash" design <ref type="bibr" target="#b6">[6]</ref> in a Layer 2 Blockchain and NoSQL/SQL/File Storage for any number of Layer 3 Blockchains (see Figure <ref type="figure">2</ref>).</p><p>Historically, the low-throughput high-latency of Layer 1 blockchains resulted in immediate pressure to drive activities off-chain <ref type="bibr" target="#b7">[7]</ref>, but only a few "off-chain" attempts can be considered deep blockchains because they lack the connected blockchains. Layer 𝑖 + 1 and layer 𝑖 may be explicitly connected in a deep blockchain system for many different reasons:</p><p>1. Higher throughput services at layer 𝑖 + 1 may be paid for using the value held in layer 𝑖 currency 2. Storing a limited set of information in layer 𝑖 + 1 in layer 𝑖 may support the security and provenance of layer 𝑖 3. Proof of fraud at layer 𝑖 + 1 can be used for economic consequences at layer 𝑖 The nascent label "Layer 2" encompasses many newly developing notions ranging from state channels to almost any approach that may help Layer 1 scale (e.g. bigger blocks), but the term "deep blockchain" is not used for all Layer 2 notions but specifically for any situation where one or more blockchains are connected in the above way.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Layer 2: Plasma Cash Blockchain</head><p>Seminal insights on multi-layer blockchains were put forth by <ref type="bibr" target="#b8">[8]</ref>, which have inspired many "Plasma" designs, and specifically motivated our implementation of what has been termed "Plasma Cash" for tracking storage and bandwidth balances. The Layer 2 Plasma Cash blockchain is connected to Layer 1 using the following trust primitives:</p><p>• User Deposit: When Alice wishes to use the services enabled by the Layer 2 blockchain, Alice deposits some Layer  With the Plasma Cash construct, the Blockchain 2.0 Objective is achieved with:</p><p>1. Layer 1 Smart Contracts supporting a Layer 2</p><p>Connection to Layer 1 storage that collectively make the cost of attacking the Layer 2 blockchain the same as the cost of attacking the Layer 1 blockchain -for Ethereum and Bitcoin Layer 1 blockchains, this is the famous "51% attack", for others it might be whatever is required to control the state of that Layer 1 Blockchain. 2. Layer 1 Cryptocurrency being used for value transfer of services between users of the Layer 2 Blockchain and the Layer 2 operator mediated through deposits, token transfers and exits mediated by Layer 1 constructs</p><p>With the Layer 2 Block Connection and trust primitives in place, Layer 2 can operate at much higher throughput than Layer 1 because of its reduced consensus, but continuing to inherit Layer 1's cost of attack and achieving the more fundamental objective. Therefore practitioners of deep blockchain engineering must develop different instincts, incorporating different software trust primitives between different constructed layers to achieve the same objective depending on the structure of between layers and the value unlocked in each.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Deep Blockchains for Provable Data Storage</head><p>The specific deep blockchain system that has developed extends the Blockchain Both NoSQL and SQL Blockchains is described in Section 5.</p><p>Just as with Layer 1 blockchain nodes, running Layer 2 and Layer 3 blockchains consists of running a node within the framework of a decentralized system, retrieving and relaying messages about new transactions and new blocks. Wolk's blockchain implementations of the Layer 2 and Layer 3 originated from Ethereum's goethereum and JPMorgan's Quorum RAFT code bases, written in Golang. RAFT is used for both Layer 2 and Layer 3 implementations due to its simple model of finality. For each blockchain, Golang package is created containing each of the interfaces specified in Appendix A, and adapted Quorum RAFT code to conform to these interfaces. There is no explicit assumption that permissioned consensus algorithms be used, however. The choice of RAFT was made purely out of simplicity, its maturity as a code base, and its capacity for high throughput -any consensus protocol that achieves finality can fit within this deep blockchain architecture. For both the Layer 2 and Layer 3 blockchains, Sparse Merkle Tree is used to support provable data storage.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Sparse Merkle Trees and Provenance</head><p>The Sparse Merkle Tree (SMT) is a persistent data structure that map fixed 𝑞-bit keys to 256-bit values in an abstract tree of height 𝑞 with 2 𝑞 leaves for any set I:</p><formula xml:id="formula_5">I = {(k0 ∈ B𝑞, v0 ∈ B256), (k1 ∈ B𝑞, v1 ∈ B256), . . .}<label>(10)</label></formula><p>The function of the SMT is to provide a unique Merkle root hash that uniquely identifies a given set of key-value pairs I, a set containing pairs of byte sequences. Each key stored in the SMT defines a Merkle branch down to one of 2 𝑞 leaves, and the leaf holds only one possible value for that key in I. The bits of the 𝑞-bit key define the path to be traversed, with the most significant bit at height 𝑞 − 1 and least significant bit at height 0. Following <ref type="bibr" target="#b11">[11]</ref> and <ref type="bibr" target="#b12">[12]</ref>, to compute the Merkle root of any SMT in practice and allow for the ideal computation of Merkle branches for the 𝑛 Merkle branches, it is useful pre-compute a set of default hashes 𝑑(ℎ) for all heights h from 0 . . . 𝑞 − 1 levels: (shown in Figure <ref type="figure" target="#fig_2">3</ref>)</p><formula xml:id="formula_6">• At level 0, 𝑑(0) ≡ 𝐻(0) • At level ℎ, 𝑑(ℎ) ≡ 𝐻(𝑑(ℎ − 1), 𝑑(ℎ − 1))</formula><p>Logarithmic insertion, deletion and retrieval operations on the SMT are defined with elemental operations:</p><p>• insert(𝑘, 𝑣) -inserts the key by traversing chunks using the bytes of 𝑘</p><p>• delete(𝑘) -deletes the key by inserting the null value for 𝑘 into the SMT • get(𝑘) -gets the value from the SMT through node / chunk traversal Typically, block proposals with SMTs as a core data structure involve bulk combinations of the above, with many inserts and deletes mutating the content of many chunks, and the Merkle root only being computed as a final step. Sparse Merkle Trees are best suited for a core primitive over more familiar Binary Merkle Trees (BMTs) because:</p><p>• when an id (a tokenID, a document key in NoSQL, a URL in File storage, a table root in SQL) is mapped to a value, you can guarantee that the id has exactly one position in the tree, which you don't get with BMTs. • when an id is NOT present in the SMT, you can also prove it with the same mechanism. This approach proves beneficial in situations where Bloom filters produce erroneous matches. • A Merkle proof for the id mapped to a specific value is straightforward, and because of sparseness the number of bytes required is much less than the depth of the tree</p><p>The key concept behind SMTs is the efficient representation of included IDs using 𝑛 hashes at 𝑛 out of 2 𝑞 leaves. Each ID, represented as a 𝑞-bit number, is associated with either a null value or its corresponding hash at a leaf node. Instead of using a Merkle proof consisting of 64 32-byte hashes from the leaf to the root, a compact representation can be achieved using proofBits, a 𝑞-bit value (e.g., uint64). Each bit in proofBits indicates whether the sisters on the path to the root use default hashes (0) or non-default hashes stored in proofBytes. Similarly, when a user receives a token from another user, they must obtain the tokenID, along with 𝑡 raw transaction bytes and 𝑡 Merkle proofs. Each Merkle proof corresponds to a specific block and verifies the token spend. It's important to note that a non-spend can also be proven, where the leaf is represented by 𝐻(0). In the optimal scenario, an SMT representing a single key-value mapping (𝑛 = 1) reduces the proof size </p><formula xml:id="formula_7">I = {(𝐾 1 , 𝑉 1 ), (𝐾 2 , 𝑉 2 )}.</formula><p>Since there are only keys in this tree, the default hashes 𝑑(ℎ) (outlined in red) appear starting at level 62, so the branches 𝐾 1 , 𝐾 2 (shown in blue circles) have Sparse Merkle proofs using default hashes from level 0 to level 62, which can be specified in a proofBits parameter. This makes for very tiny proofs and lower gas costs on Main-Net.</p><p>significantly. Instead of a 64 × 32 byte proof, the entire path from level 0 to level 63 consists of default hashes, and proofBits is a 64-bit value filled with zeros (0x0000000000000000). In this case, proofBytes is empty, and the uint64 value is 0, resulting in the most compact proof size possible: 8 bytes.</p><p>In the following favorable scenario, considering 2 ids (for example, 0x01234... and 0x89abc...), the proof of spend for each token would include a single non-default hash at the topmost level 63, and proofBits would consist of the value 1 followed by 63 zeros (0x8000000000000000). The resulting proof size would be 40 bytes.</p><p>In typical scenarios, SMTs exhibit high node density in the upper levels, ranging from level 𝑞 − 1 down to approximately level 𝑙𝑜𝑔2(𝑛). To illustrate this, consider a situation where you have 10MM Layer 2 tokens, and each token undergoes 500 transactions per token per year. This results in a total of 5B transactions for the 10MM tokens annually. Assuming a Layer 2 block frequency of 15s/block, these 5B transactions would be distributed across 2.1MM blocks per year, with an average of 2,378 transactions per Layer 2 block (500 × 10 × When incorporating these 2,378 transactions into an SMT, given that 𝑙𝑜𝑔2(2378) = 11.2, you will have a densely populated set of nodes, mostly consisting of non-default hashes, from levels 63 down to approximately level 53. Below that, you will have only one tokenID extending all the way to level 0. The proof size would amount to 32 bytes per level, resulting in a total of 320 bytes for 10 levels.</p><p>𝑞 = 64 is decided instead of 𝑞 = 256 because:</p><p>• collisions are still unlikely at q=64 ... until it is around 4B keys • the proofBits are 24 bytes smaller (uint64 instead of uint256) • less gas is spent in checkMembership on all 0 bits in proofBits • smaller 64-element array of default hashes computed instead of 256 hashes</p><p>Reducing the frequency of hashing leads to decreased gas consumption and increased user satisfaction, particularly in the Level 2 block connection. In this context, it ensures that collisions between circulating tokenIds can be definitively ruled out during deposit events. Moreover, you can combine the fixed length proofBits and variable length proofBytes into a single proof bytes input for exits, i.e.</p><p>startExit(uint64 tokenID, bytes txBytes1, bytes txBytes2, bytes proof1, bytes proof2, int blk1, int blk2) The analogous challenge interfaces will then have fewer argument inputs in the same way.</p><p>The sparseness of the SMT derives from the observation that keys will extremely rarely share paths at increasingly lower heights and naturally will share paths at increasingly higher paths. This lends itself to a representation where the SMT is chunked by byte k𝑖, where traversing the SMT from a root chunk (representing a range of keys from 0 to 2 64 -1) down to an intermediate chunk with just one leaf involves processing one additional byte, which each chunk of data storage having up to 256 child chunks specifying a range of keys each child posessing a range that is 1 256 smaller. Just as with a radix tree, the SMT is traversed from root to leaf, with an additional byte of the key causing a read of a chunk that represents up to 256 branches and the hashes of all the branches, utilizing default hashes. Golang "smt" package is implemented and a "cloud" package to map SMT operations into Cloudstore.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Layer 3 Blockchains</head><p>With the foundations of Layer 2 providing storage and bandwidth paid for with Layer 2 tokens, any number of Layer 3 blockchains may be constructed. The construction of a NoSQL and SQL blockchain is detailed here. At a high level, Layer 3 blockchains collate SQL and NoSQL transactions in Layer 3 blocks submit block transactions to Layer 2, and Layer 2 collate token and block transactions with Merkle Roots of token root and blocks submitted and included in transactions to Layer 1 blockchain. It then becomes possible to aggregate multiple proof of inclusions at the highest layers all the way to MainNet with Deep Merkle Proofs, which is illustrated here.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.1.">Layer 3 NoSQL Blockchain and Deep</head><p>Merkle Proofs • Finally, a Layer 1 Block (e.g. 10,000,002) will be proposed by some MainNet miner including the above Layer 2 submitBlock transaction and eventually be finalized by the Layer 1 consensus protocol.</p><p>A Deep Merkle Proof is formed through the aggregation of each proof of inclusion across each layer of blockchain connections in a deep blockchain down to Layer 1. In our 3 layer deep blockchain with the Layer 3 NoSQL blockchain layered on the Layer 2 Storage / Plasma Cash blockchain, there is a Layer 2-3 connection and a Layer 1-2 connection. So a full Deep Merkle Proof that a NoSQL document 𝐾1, 𝑉1 is included in the deep blockchain all the way up to MainNet consists of: in Layer 3 block Layer3KeyRoot -in our example, this would be that the Layer 3 block hash 0b101..11 hashes up to SMT root 𝑅2002 = 0x4d69..</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Layer 1 proof of inclusion of the Layer 2 block</head><p>hash in the blockHash array of the Layer 1 Smart Contract -in our example, this is that blockHash(2002) = 0xe8db</p><p>In our implementation, deep Merkle proofs are provided in response to GetKey(𝐾, 𝑉 ) to the layer 3 blockchain users as an optional deep boolean parameter and when true, returns the full combination of:</p><p>• Layer 3 Block, which includes Layer3KeyRoot</p><p>• proofBits and proofBytes for the The concept of a deep Merkle Proof is not limited to 3 layer deep blockchains, nor is the concept only applicable to NoSQL blockchains -the concept applies to multiple layers of proof of inclusion enabled through the general layering processes of deep blockchain systems generally.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.2.">Layer 3 SQL Blockchain</head><p>To support Layer 3 SQL operations in a SQL blockchain, the Layer 3 block has a structure defined as having as packing a set of encrypted SQL transactions (insert/update/delete statements) along with a Layer3KeyRoot of a Sparse Merkle Tree representing a set of table root hashes.</p><p>In our implementation, Quorum RAFT is adopted as the consensus layer for our layer 3 SQL blockchain (again, following Appendix A), which collectively follow a consensus protocol where once a leader has been identified, the leader mints a new Layer 3 block based on:</p><p>• An array of SQL transactions that is mapped into newly created chunks (created via storeChunk for table root hashes) • An array of table root hashes, key-value pairs written to Layer3KeyRoot, based on the execution of the above SQL Transactions</p><p>The minting a layer 3 block consists of the leader compiling each SQL transaction into a set of instructions to executed by a "SQL Virtual Machine" (SVM) based off of the widely used SQLite's virtual machine. In this model, a virtual machine has a program counter that increments or jumps to another line after the execution of each opcode instruction. For example, a SQL statement of "Select * from person" received by a node is mapped into a interpretable set of opcodes like this:</p><p>{"n":0,"opcode":"Init","p2":8,"p4" ":"select * from person"} {"n":1,"opcode":"OpenRead","p2" :2,"p4":"2"} {"n":2,"opcode":"Rewind","p2":7}</p><p>{"n":3,"opcode":"Column","p3":1} {"n":4,"opcode":"Column","p2" :1,"p3":2}</p><p>{"n":5,"opcode":"ResultRow","p1" :1,"p2":2} {"n":6,"opcode":"Next","p2" :3,"p5":1} {"n":7,"opcode":"Halt"} {"n":8,"opcode":"Transaction","p3" :3,"p4":"0","p5":1}</p><p>{"n":9,"opcode":"Goto","p2":1}</p><p>In our SVM Golang implementation, all opcodes are mapped into Layer 2 storeChunk and receiveChunk calls, manipulating the following chunk types:</p><p>• Database Schema chunk: represents up to 32 tables belonging to the "blockchainName". Each </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.">Paying for Storage and Bandwidth</head><p>The Layer 3 blockchain users who store NoSQL/SQL/File data with storeChunk operations give the Layer 2 operator permission to charge for bandwidth and storage in two different ways:</p><p>1. Bandwidth is paid for through (1) users signing retrieveChunk(𝑘, 𝜏, 𝜔) calls to retrieve data and obtaining recent balances, where each call uses up a tiny amount of bandwidth backed for with a token 𝜏 originated by the createBlockchain call; (2) users signing a new updateBalance(𝜏, , 𝜔) request originated by operator and agreeing to making a payment for incurred bandwidth usage and the latest token owner balance. An updateBalance response by users is mapped into layer2 transaction, where incurred bandwidth cost is deducted from token's owner balance (𝜏 ) and added to operator's allowance 𝛾(𝜏 ). 2. Storage is paid for through Block Transactions submitBlock(𝑏 3 𝑘 , 𝑘) signed by the Layer 3 blockchain operator -because chunks are identified directly inside Layer 3 blocks, a tally of the number of bytes used in each new layer 3 block is added to the SMT. The Layer 1 contract then exposes storageCharge interface to the Layer 2 operator where a recently signed Layer 2 block transaction (containing a tally of the number of bytes, signed by the Layer 3 blockchain operator) is used to deduct the layer 3 operator's balance since the last time it was called. This is detailed below.</p><p>In this way Layer 3 Blockchains pay for the services of the Layer 2 blockchain. The lifecycle of a short lived Layer 3 blockchain is shown in Figure <ref type="figure" target="#fig_6">5</ref>, which is expounded in the next section.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.1.">Layer 2 Plasma Tokens for Bandwidth Payments</head><p>In this section it is explained how Layer 2 Tokens can form a unidirectional payment channel, where each signed Later, multiple (lots and lots) of signed GetKey calls are done by the Layer 3 User, each executed using retrieveChunk signed calls. At some point, the user hits Σ𝑚𝑎𝑥 = .02𝑝𝐸𝑇 𝐻 and uses updateBalance to agree that its balance is 0.98 pETH, which is included in Layer 2's token transaction block and submitted to Layer 1. Finally, the Layer 3 user can drop its blockchain, which will trigger deletion of chunks and initiate a finalizeExit process that returns the .98 ETH balance to the user.</p><p>retrieveChunk call is not a transaction to be included in a Layer 2 block (and has no nonce to increment) but simply indicative of "permission to return some data and decrement my token balance"; where the Layer 2 operator can check the signature against its record of the current owner as a condition of looking up the chunk. The Layer 2 operator must have tally aggregation capability that can aggregate numerous signed calls together and compute that token 𝜏 has some new balance (𝜏 ). In our implementation simple minute-wise Hadoop job is used to tally periodic flushes of retrieveChunk operations grouped by different 𝜏 , keeping as a short-term output (TTL=3600s) log that each minutewise change of 𝜏 was caused by specific signed operations; this balance update log is exposed to the user. When this internal tally reaches a critical threshold Σ𝑚𝑎𝑥, responses to retrieveChunk halts and can only resume with a Layer 2 updateBalance transaction submitted and included in the Layer 2 block directly in the SMT root Layer2TokenRoot. The threshold Σ𝑚𝑎𝑥 in the contract. To minimize disruptions from halting in this way, it is the responsiblity of the Layer 3 blockchain to periodically submit updateBalance, signing recent token balances provided in the retrieveChunk.</p><p>Moreover, as the token has considerable usage accumulated, and as users regularly submit sufficient updateBalance transactions to Layer 2, the value of the balance may accumulate to a great enough level that the Layer 2 operator may wish to withdraw the balance accumulated directly in the Layer 1 contract. To support this,the SMT state is expanded to include the token balance and the operator withdrawal amounts.</p><p>If users wish to transfer the token to another user of the layer 2 blockchain by submitting a token transfer operation, the updateBalance must be executed to "close" the token-based state channel.</p><p>Finally, users who wish to withdraw token 𝜏 for Layer 1 currency can do so by calling startExit with the last 2 transfers and this last updateBalance, which will redeem the denomination less the tally of what has been withdrawn by the operator. Others may challenge this exit, but only with a valid proof of user double spending 𝜏 .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6.2.">Layer 1 Storage Insurance</head><p>Because every single write of a Layer 3 blockchain is included in sequentially ordered layer 3 blocks (each of which identify a set of Chunk IDs) the layer 3 blockchain forms an itemized list of signed insurance requests that form a Layer 1 unidirectional state channel initiated by the deposit into createBlockchain. Assuming no challenges exist, if the Layer 2 operator that receives a Layer 3 block identifying a set of chunks can provide a recent proof of storage then it may deduct from this deposit. On the other hand, if the layer 3 blockchain has reason to believe that some chunk is lost, it can submit its claim to Layer 1 smart contract and demand Merkle proofs in response. The CRASH patterns of <ref type="bibr" target="#b9">[9]</ref> specify this challenge-response system in detail, which is extended to our deep blockchain in the following way:</p><p>• Insurance Request. Each Layer 3 block 𝐵 3 𝑗 ( submitted to the Layer 2 operator in the block transaction submitBlock(𝑏 3 𝑗 , 𝑗) calls ) includes (1) a seed hash 𝛾, where the seed 𝜈 (𝛾 = 𝐻(𝜈)) is held solely by the layer 3 operator and revealed when the layer 3 operator wishes to challenge the Layer 2 operator with storageChallenge (see below); (2) the hash of an SMT Merkle root 𝐻(Ξ) for all the chunks specified in the layer 3 block using 𝜈; (3) the total collection size in bytes 𝜎 𝑡𝑜𝑡𝑎𝑙 in all Layer 3 blocks; (4) a Ω parameter, the amount of layer 1 currency required to hold 1 GB per month (e.g. if market conditions for keeping data in 8 places in Cloudstore is $.25 GB/mo and Layer 1 currency is $500/𝐸𝑇 𝐻, then Ω would be 5 × 10 1 4 wei). The Layer 2 operator uses 𝜅 to fetch the list of chunks the Layer 3 operator wishes to insure, verifies that all chunks in the list are in fact available, and checks that 𝜎 𝑡𝑜𝑡𝑎𝑙 matches the Layer 2 operators own tally closely. If the chunks are missing, or the tally is not reasonable, the Layer 2 operator may reject the block. Otherwise, the Layer 2 blockchain will include the Layer 3 block hash in the BlockRoot of the next Layer 2 block. In this way, the block transaction is taken as a signed request to insure the entire Layer 3 blockchain's storage.   This payout must come from a registered balance held in the Layer 1 Smart Contract. The response must be a valid proof whose root Ξ that matches 𝐻(Ξ) originally supplied for the block. Finally, to guard against the situation that some layer 3 operator supplies a bogus 𝐻(Ξ) in the block transaction to claim this payout, the layer 2 operator can supply a small number (e.g. 5) of Merkle branches resolving to 𝜅. The economic incentives of this challenge-response system is refined to balance the layer 2 and layer 3 operators in this challenge-response pattern to be reasonable relative to Layer 1 Ethereum gas costs.</p><p>With the above mechanism in place, the layer 2 operator can charge the layer 3 operator when transaction fees are negligible. In regular conditions, the Layer 3 blockchain can see its storage fees through storageCharge; when the balance approaches zero, the Layer 3 blockchain must deposit additional Layer 1 currency to its blockchain balance at Layer 1. Finally, a call to dropBlockchain must permit the layer 2 operator the opportunity to claim a final storageCharge and close out the bandwidth balance of 𝜏 before finalizing exits (see Figure <ref type="figure" target="#fig_6">5</ref>). Since there are two sources of demand (storage charge and bandwidth charges), the layer 2 blockchain must check that the sum of both sources equal the available balance for the layer 3 blockchain.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7.">Discussion</head><p>There have been many approaches scaling blockchain architecture to support higher throughput and lower latency:</p><p>• Changing the security model of Layer 1 blockchains (c.f. NEO, EOS's approach) • Incremental improvements to Layer 1 or Layer 0 that don't change security model (c.f. larger blocks) • Having many separate chains, using sharding • State Channels • Layer 2 Plasma solutions This paper focussed on the last approach, and described how using the core ideas behind Layer 2 Plasma Cash can be extended to a deep blockchain system, forming the basis for provable data storage for widely used NoSQL + SQL developer interfaces. The concept of Deep Merkle proof for a 3 layer deep blockchain system is illustrated here and shown its conceptual viability, borrowing state channel concepts for Layer 3 NoSQL and SQL blockchains to pay for storage and bandwidth.</p><p>Deep learning architectures have advanced numerous high-scale applications in every industry in a way that is not about one specific deep learning algorithm -and instead about an approach that could not be achieved through dogmatic faith in single-layer "neural" networks. In an analogous way, deep blockchain architectures could have the potential to enable a wide range of high-scale applications in a way that might not be achieved through dogmatic faith in Layer 1 scaling innovations alone.</p><p>Blockchain practitioner instincts are to be wary of centralized consensus protocols and centralized storage. However, our use of non-local storage can be rationalized, not by demanding that every component be dogmatically decentralized, but by considering how attack vectors are reduced through judicious use of some notso-decentralized components. The attacks on storage are limited in nature due to:</p><p>• verifiability of chunks, where all 𝑘, 𝑣 pairs retrieved from non-local storage are verifiable either due to (a) 𝑘 being verified to the hash of the value 𝑣 returned (b) 𝑘 being directly included and signed by a trusted party. In this sense the attack vector is limited to the private key • the use of Ethereum SWARM (currently in POC3) as a censorship-resistant cloud storage provider.</p><p>In the event that the Layer 2 blockchain provider loses access to its Cloud Storage backend, higher layer backends can simply request chunks using the Kademlia-based DHT of Ethereum SWARM. Generally this censorship-resistance comes at the cost of higher latency responses. • cryptoeconomic incentives, wherein if a data storer can prove (with a Merkle branch) that a piece of data can no longer be accessed but has been included on chain through a valid Merkle branch</p><p>It is believed the combination of decentralized storage and cloud computing storage increases the cost of attack and that the Blockchain 1.0 Objective of Maximize decentralization must be altered in favor of the more nuanced Blockchain 2.0 Objective Maximize cost of attack, which ultimately will lead to more secure and reliable blockchain systems. One gets the best of both worlds: from centralized storage one gets low-latency, high-throughput infrastructure, and from decentralized storage one gets resilience and censorship resistance.</p><p>Concerning the use of a single centralized Layer 2 operator, it is highlighted that in all cases where Layer 1 currency is deposited (in createBlockchain), because use of the "Plasma Cash" design pattern, the owner of the tokens may withdraw its balance on the Layer 1 blockchain. This is a surprising result: that checks and balances on token ownership are possible through the use of the Layer 1 blockchain despite the Plasma operator being in 100% control; if users discover that the Layer 2 blockchain operators are malicious, they can be certain they can get the value of their tokens back, and if the data is kept in resilient Ethereum SWARM (or if they have kept their data locally), they can move to another Layer 2 operator using the same protocol.</p><p>This shows a deep blockchain that has a higher cost of attack than the deep blockchain illustrated in Figure <ref type="figure">2</ref>, utilizing 𝑁2 Layer 2 blockchains (each with their own Cloudstore) and 𝑁1 Layer 1 blockchains, each receiving the same Layer 3 submitBlock and Layer 2 submitBlock transactions respectively: Because the retrieval of layer 𝑖 + 1 data from layer 𝑖 can be verified by layer 𝑖 + 1 (checking block data: does the block hash match the block content? is it signed? does it have a parent hash? etc.; checking chunks: does the hash of the chunk data equal the chunk key), each lower layer node devolves into a dumb storage layer with some failure or attack probability (𝑝 2 1 ..𝑝 2 𝑁 2 for layer 2 blockchains, 𝑝 1  1 ..𝑝 1 𝑁 1 for layer 1 blockchains) -depending on this probabilistic model, the cost of attack may be divined. However, it seems most likely that motivated parties would attack the centralized control behind each layer (c.f. via EIP999, mining pools arewedecentralizedyet.com, governments asking the Cloudstore providers to block Layer 2 operator's accounts) -in this sense the probabilistic independence in concentrated efforts to attack layer 1 and 2 would be highly suspect. For this reason, our true faith relies in Ethereum SWARM's resource updates <ref type="bibr">([9]</ref>), where chunks may be keyed not by the hash of their content but with a resource key, which can be used for the block data without an index mechanism; all resource updates are signed so the reader can authenticate. Ethereum SWARM, because of its use of Kademlia-like protocol, is not naturally as fast as other components in Cloudstore, but kicks in when all Layer 2 blockchains Cloudstore fail or when Layer 1 itself is attacked (via 51% attacks, or unknown POS failures). If other decentralized storage services provided similar provable storage as Ethereum SWARM's resource update, so long as Layer 3 blockchain does not go Byzantine, only one answer can surface, making for unstoppable layer 3 blockchains.</p><p>The Layer 3 NoSQL and SQL blockchains developed in this paper operated under an assumption that the NoSQL + SQL transactions should be private data secured by an encryption key known only to the operators of the Layer 3 blockchain. This protects the Layer 3 blockchain from operators of Layer 2 blockchain and any Cloudstore. However, the same problem as with standard databases (MySQL, MongoDB, DynamoDB, etc.) exists with our current implementation of NoSQL/SQL Layer 3 blockchains: once someone gets access to a Layer 3 blockchain node holding the database encryption key or private key, the entire database is compromised. Therefore, provenance and immutability of the NoSQL/SQL database state changes, as manifested in Deep Merkle Proofs, differentiate a Layer 3 blockchain from standard databases. The small latency incurred with permissioned protocols (RAFT, POA) and negligible cost should be welcomed when provenance and immutability are of paramount concern.</p><p>Many other Layer 3 blockchains can be constructed using the Layer 2 storage and bandwidth infrastructure: a chain that represents the evolving state of ERC721 tokens, a chain that represents a cryptocurrency exchange where your money can never be stolen, and so forth. The state of the Layer 3 blockchain is not stored locally but instead kept in Cloudstore with storage and bandwidth costs properly accounted for using the Layer 2 tokens, themselves based on Layer 1. Layer 3 and Layer 2 nodes are therefore "light nodes" in that they can quickly catch up to the latest state by asking the layer 2 and layer 1 blockchains for the most recent finalized block. This is not possible to do for the Layer 1 blockchain, however. However, it is possible, and interesting to adapt a Layer 1 blockchain of Ethereum and make it a Layer 3 blockchain. Computation (Ethereum gas costs) can consume Layer 2 token balances in state channels along with bandwidth, contract storage can use SMTs mapped to Cloudstore (instead of Patricia Merkle Tries kept in local store) submitted in blocks to the Layer 2 blockchain, and the consensus machinery can be put in a modern sharded Proof-of-Stake framework to achieve high-throughput low-latency ambitions of Ethereum 2.0, with all layer 3 nodes. The expectation would be that a Layer 3 Ethereum blockchain would have massively lower costs due to rational models of storage and bandwidth. Other deep blockchain systems can be developed with different computational primitives than the EVM, such as Amazon's Lambda or Apache Hadoop.</p><p>It is believed that there can be many deep blockchain systems developed with higher layers resting on many Layer 1 blockchains, even to the point where multiple Layer 1 systems are dropped and many more added to provide more or less Layer 2 security. The same can be said for any layer to benefit higher layers. If the blockchain at layer 𝑖 changes its consensus algorithm from Quorum RAFT to pBFT or Casper Proof-of-Stake, the layer 𝑖 + 1 benefits; higher layer blockchains are supervenient on Layer 1, so innovations on Layer 1 are inherited by all deep blockchain systems. It is hoped that many deep blockchain systems can explore high throughput low latency scale through some of the design patterns explored here.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Deep Blockchains: In the deep blockchain architecture explored here, each layer 𝑖 + 1 is connected to layer 𝑖 with transactions submitted to layer 𝑖 for every block at layer 𝑖 + 1. Typically, block hashes and Merkle roots are submitted in transactions as key attributes of the block.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head></head><label></label><figDesc>Remarkably, users of the Layer 2 blockchain can conduct their business securely even when the Layer 2 operator has 100% control over the Layer 2 blockchain! Any sign of malicious operator Paul and the Layer 2 users can exit, and all Layer 2 token values remain secure. How can practitioners reconcile instincts to pursue this objective: Blockchain 1.0 Objective: Maximize decentralization. with an obviously centralized operator? The answer is to pursue a more nuanced objective of Blockchain 2.0 Objective: Maximize the cost of successful attacks.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Sparse Merkle Tree Illustration: Merkle branches for 2 64-bit keys 𝑘 1 = 001..00 and 𝑘 2 = 101.. hold 𝐻(𝑉 1 ) and 𝐻(𝑉 2 ) in a unique SMT root 𝑅 for a 2 key setI = {(𝐾 1 , 𝑉 1 ), (𝐾 2 , 𝑉 2 )}.Since there are only keys in this tree, the default hashes 𝑑(ℎ) (outlined in red) appear starting at level 62, so the branches 𝐾 1 , 𝐾 2 (shown in blue circles) have Sparse Merkle proofs using default hashes from level 0 to level 62, which can be specified in a proofBits parameter. This makes for very tiny proofs and lower gas costs on Main-Net.</figDesc><graphic coords="6,89.29,84.19,203.37,224.76" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: Deep Merkle Proof illustrated: The hashes key-value pair is recorded in a Layer 3 Sparse Merkle Tree, the root of which is kept in Layer3KeyRoot in the Layer 3 block. When the Layer 3 operator uses submitBlock to submit a block transaction to Layer 2, Layer 3 Block hash 302 is included in another SMT maintained by the Layer 2 operator storing all Block hashes of all Layer 3 blockchains. When the Layer 2 block 2002 is minted, the BlockRoot is set and included in Layer 1 Block 10,000,002. The individual proof of inclusion from the 2 SMTs and the portions of the raw Layer 3 and Layer 2 block form a Deep Merkle Proof for inclusion a specific record in the deep blockchain, from the highest layer to Layer 1.</figDesc><graphic coords="8,89.29,84.19,416.73,316.58" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head></head><label></label><figDesc>Layer3KeyRoot, which are shown to match 𝐻(𝐾), 𝐻(𝑉 ) • Layer 2 Block, which includes BlockRoot • proofBits and proofBytes for the BlockRoot, which are shown to match the Layer 2 Block Hash • Layer 1 blockHash record of the Layer 2 block number</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head>Figure 5 :</head><label>5</label><figDesc>Figure 5: Samples of a Layer 3 NoSQL Blockchain User in the Deep Blockchain architecture presented here. A Layer 3 user creates a Layer 3 Blockchain by sending 1 ETH to createBlockchain and receives a Plasma token (1 pETH) which is included as a deposit in Layer 2 block 2000. The Layer 3 user does 2 SetKey operations included in Layer 3 block 300, which result in the Layer 3 blockchain signing 2 storeChunk for each key-value pair. The Layer 3 blockchain mints Layer 3 Block 300 and stores it again with 3rd signed storeChunk call, finally calling Layer 2's submitBlock with the hash of Block 300. The Layer 2 operator includes this block transaction in Layer 2 Block 2001, stores it in Cloudstore, and submits it the Layer 1 blockchain with a Smart Contract call to submitBlock.Later, multiple (lots and lots) of signed GetKey calls are done by the Layer 3 User, each executed using retrieveChunk signed calls. At some point, the user hits Σ𝑚𝑎𝑥 = .02𝑝𝐸𝑇 𝐻 and uses updateBalance to agree that its balance is 0.98 pETH, which is included in Layer 2's token transaction block and submitted to Layer 1. Finally, the Layer 3 user can drop its blockchain, which will trigger deletion of chunks and initiate a finalizeExit process that returns the .98 ETH balance to the user.</figDesc><graphic coords="11,105.96,84.19,383.36,407.93" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_7"><head>Figure 6 :</head><label>6</label><figDesc>Figure 6: Three-layer deep blockchain model.</figDesc><graphic coords="13,89.29,84.19,203.37,166.35" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head></head><label></label><figDesc>For SQL, there is a root hash for each database, where the root hash changes when any table schema is updated, and where each table has a root hash that changes when any record of the table is changed; any new database content results in new chunks, where the chunk is referenced by the hash of its content.</figDesc><table><row><cell>age network (which is slow but resilient and censorship-</cell><cell cols="2">operation (approximately every 24 hours), pass-</cell></row><row><cell>resistant), layer 3 can rest on both decentralized storage</cell><cell cols="2">ing on Cloudstore costs to Layer 3 blockchains.</cell></row><row><cell>networks and mature modern cloud computing platforms.</cell><cell cols="2">Notably, Layer 3 blocks themselves are recorded</cell></row><row><cell>Again, the Blockchain 1.0 Objective must be displaced in</cell><cell cols="2">with storeChunk(𝑘, 𝑣, 𝜏, 𝜔) to store the layer 3</cell></row><row><cell>favor of the Blockchain 2.0 Objective: in this sense, more</cell><cell cols="2">block in Cloudstore and then results in a call to</cell></row><row><cell>storage variety increases the cost of attack.</cell><cell>submitBlock(𝑏 3 𝑗 , 𝑗):</cell><cell></cell></row><row><cell>Putting the elements together in a deep blockchain system for provable storage:</cell><cell>𝑇 3 𝑗 ≡ submitBlock(𝑏 3 𝑗 , 𝑗)</cell><cell>(7)</cell></row><row><cell>• Layer 1 blockchain: wishes to have a Layer 3 blockchain for When a developer NoSQL/SQL/Storage, they send Layer 1 currency into createBlockchain(blockchainName string) on MainNet; this can be refunded with a dropBlockchain(blockchainName string) operation (taking place of startExit). When storage is used in blockchainName</cell><cell cols="2">Because the block storage is signed and because the block transactions are signed, Layer 2 oper-ators collect storage payments with the layer 3 blockchain operator consent, forming a kind of "state channel" within the deep blockchain. Taken together, this is the Layer 3 Block Connection, as seen in Figure 1. The Layer 2 block consists of: -the transaction root 𝜃 2 𝑘 that utilizes the</cell></row><row><cell>through the activities of Layer 3 blockchains (as</cell><cell cols="2">SMT structure to represent just the tokens</cell></row><row><cell>recorded by the Layer 2 blockchain below), this</cell><cell>𝜏1, 𝜏2, . . . spent in block 𝑘</cell><cell></cell></row><row><cell>balance goes down. Balances can added to and withdrawn by the owner of the blockchain.</cell><cell>𝜃 2</cell><cell></cell></row><row><cell>• Layer 2 Plasma Cash Blockchain: The storage and</cell><cell></cell><cell></cell></row><row><cell>retrieval of chunks in Cloudstore are exposed to</cell><cell></cell><cell></cell></row><row><cell>Layer 3 blockchains with the following 2 APIs</cell><cell></cell><cell></cell></row><row><cell>(see Appendix A): -storeChunk(𝑘, 𝑣, 𝜏, 𝜔) -stores a key-value pair mapping (𝑘, 𝑣) in Cloudstore, backed by Layer 2 token 𝜏 (signed with 𝜔) received from the Layer 1 transaction. -retrieveChunk(𝑘, 𝜏, 𝜔) -retrieves a key-value pair mapping (𝑘, 𝑣) in Cloud-store, backed by Layer 2 token 𝜏 (again, signed with 𝜔), and returning the balance of 𝜏 used so far The Layer 2 operator will store via Cloudstore</cell><cell cols="2">• A chunk of bytes 𝑣 is stored in Cloudstore using 256-bit hash 𝑘 = 𝐻(𝑣) as the key to retrieve 𝑣. Nodes that request a chunk by key 𝑘 can verify correctness of the value 𝑣 returned from Cloud-store simply by checking if 𝑘 = 𝐻(𝑣). • Insurers of chunks can earn Layer 1 currency with valid Merkle proofs; Failure to provide valid proofs result in severe insurance payouts • Bandwidth consumed by a node, when hitting the nodes threshold must result in signed payments</cell></row><row><cell>in as many regions and cloud providers as</cell><cell cols="2">Layer 1 blockchains were initially developed without the</cell></row><row><cell>necessary to insure the chunk as follows: A new</cell><cell cols="2">concern for storage models being competitive with cloud</cell></row><row><cell>type of Layer 2 block transaction insures a set</cell><cell cols="2">computing platforms or even a passing concern for band-</cell></row><row><cell>of chunks recorded through storeChunk calls.</cell><cell cols="2">width; the birth of Bitcoin and Ethereum Layer 1 focused</cell></row><row><cell>The cause of these chunks are from any Layer</cell><cell cols="2">on birthing trustless payments and trustless computa-</cell></row><row><cell>3 blockchain needing storage and bandwidth,</cell><cell cols="2">tion mediated by a peer-to-peer network, rather than</cell></row><row><cell>where bandwidth is used in retrieveChunk</cell><cell cols="2">about nodes providing decentralized storage [10]. In con-</cell></row><row><cell>calls. When a Layer 3 blockchain mints Layer 3</cell><cell cols="2">trast, decentralized storage networks, as manifested in</cell></row><row><cell>blocks, the Layer 3 blocks themselves contain a</cell><cell cols="2">Ethereum SWARM and many other systems, promises to</cell></row><row><cell>Cloudstore key that references a list of chunks</cell><cell cols="2">have a large peer-to-peer network of nodes sharing the re-</cell></row><row><cell>2.0 Objective up one more layer written in the Layer 3 block. The block itself is</cell><cell cols="2">sponsibility to keep a portion of the world's data and com-</cell></row><row><cell>by incorporating trust primitives (Block transactions, stored in Cloudstore with another storeChunk</cell><cell cols="2">pensated proportionately for the commodity storage and</cell></row><row><cell>Sparse Merkle Trees) in provable NoSQL, SQL and Stor-call, signed by the Layer 3 blockchain owner,</cell><cell cols="2">bandwidth they provide. In these networks, a distributed</cell></row><row><cell>age services, shown in Figure 2: Layer 3 NoSQL, SQL and and the block hash 𝑏 3 𝑘 is submitted by the Layer</cell><cell cols="2">hash table (typically, with Kademlia routing layers) is</cell></row><row><cell>Storage blockchains rest on the storage and bandwidth 3 blockchain to the Layer 2 blockchain via a</cell><cell cols="2">used for logarithmic look ups of chunks, but in practice,</cell></row><row><cell>services of Layer 2, which supervene on the decentral-submitBlock(𝑏 3 𝑘 , 𝑘) block transaction. This</cell><cell cols="2">𝑂(𝑙𝑜𝑔2(𝑛)) retrieval times are just not competitive with</cell></row><row><cell>ized computation and payment services of Layer 1. Our enables the Layer 2 blockchain to meter the cumu-</cell><cell cols="2">modern UI expectations or typical developer expecta-</cell></row><row><cell>work follows Ethereum SWARM's foundational work on lative storage of blockchainName and deduct</cell><cell cols="2">tions. Nevertheless, decentralized storage networks have</cell></row><row><cell>storage and bandwidth [9] which outlines the following from the balance originally deposited in the</cell><cell cols="2">a critical role to play in providing censorship-resistance.</cell></row><row><cell cols="3">ideas that is situated in multiple layers: createBlockchain(blockchainName string) Rather than layer 3 rest solely on a decentralized stor-</cell></row></table><note>Figure 2: Deep Blockchain for Storage: Users of NoSQL/SQL/Storage Layer 3 blocks createBlockchains on Layer 1, and use Layer 2 Plasma Cash to operate their blockchain. Layer 3 blocks are submitted to the Layer2 Blockchain with block transactions and chunks are insured. Plasma Tokens are used for bandwidth. Cloudstore combines major computing platforms with Ethereum SWARM for both resilience and speed. 𝑘 ≡ KT((𝜏1, 𝑇 2 𝜏 1 ), (𝜏2, 𝑇 2 𝜏 2 ), ...) (8) -the token root 𝜏 𝑘 for all tokens 𝜏𝑗, ... 𝜏 𝑘 ≡ KT((𝜏1, 𝑇 2 𝜏 1 ), (𝜏2, 𝑇 2 𝜏 2 ), ...) (9) -array of token transactions 𝑇 2 𝑘 -array of block transactions 𝑇 ˜2 𝑘 from all Layer 3 blockchain operators using Layer 2 services an account root, using an SMT to store an accounts "balance" and a list of tokens held by that account. • Layer 3 blockchains: Any number of Layer 3 blockchains that utilize storage and bandwidth can be layered on top of the Layer 2 blockchain, regularly submitting lists of chunks based on the structure of the Layer 3 blockchain. -For NoSQL + File Storage, there is a key for each row of NoSQL or File, and a value for the row (a JSON record) or raw file contents. The root hash changes when any table is added/removed or when any table schema is updated, and where each table has a root hash that changes when any record of the table is changed; any new database content results in new chunks, where the chunk is referenced by the hash of its content. -</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head></head><label></label><figDesc>To support Layer 3 NoSQL transactions in a NoSQL blockchain, the Layer 3 blockchain has a layer 3 block structure defined as collating a set of NoSQL records along with a Layer3KeyRoot of a Sparse Merkle Tree managing a set of key-value pairs of "documents". All NoSQL records are encrypted using counter mode (CTR) encryption defining operations 𝑒𝑛𝑐𝑟𝑦𝑝𝑡(𝑑, 𝜋) and 𝑑𝑒𝑐𝑟𝑦𝑝𝑡(𝑑, 𝜋) and utilizing a database encryption key 𝜋 known only to the layer 3 blockchain user. Three operations are defined, each of which map into the SMT data structure: DeleteKey), executing storeChunk Layer 2 API calls for its users. Unless two transactions operate over the same key 𝑘, all transactions can be executed in parallel. If multiple transactions operate over the same key, only the last received transaction will have its muta-</figDesc><table><row><cell>𝑉1 = 0x778899..)]</cell><cell></cell></row><row><cell>SetKey(𝐾2, 𝑉2)]</cell><cell></cell></row><row><cell cols="2">which results in a set of SMT primitive operations:</cell></row><row><cell cols="2">insert(𝐻(𝐾1), 𝐻(𝑒𝑛𝑐𝑟𝑦𝑝𝑡(𝑉1, 𝜋))),</cell></row><row><cell cols="2">insert(𝐻(𝐾2), 𝐻(𝑒𝑛𝑐𝑟𝑦𝑝𝑡(𝑉2, 𝜋)))</cell></row><row><cell cols="2">resulting in Layer3KeyRoot = 0x83fc....</cell></row><row><cell cols="2">The chunks for both documents 𝐻(𝑉1) and</cell></row><row><cell cols="2">𝐻(𝑉2) along with chunk of the previous block</cell></row><row><cell cols="2">301 (e.b. storeChunk(0b001.., ...)) are in-</cell></row><row><cell cols="2">cluded in Layer 3 Block 302 in the ChunkIDs and</cell></row><row><cell>insured with a call to</cell><cell></cell></row><row><cell>submitBlock(0b101..11, 302)</cell><cell></cell></row><row><cell>submitted to the Layer 2 blockchain.</cell><cell></cell></row><row><cell cols="2">• When the Layer 2 blockchain processes the</cell></row><row><cell cols="2">block transactions from this new Layer 3 block</cell></row><row><cell cols="2">(and many other Layer 3 blockchains) to build</cell></row><row><cell cols="2">Layer 2 Block 2002, it will build a SMT with</cell></row><row><cell>insert(concat(blockchainName,</cell><cell>302),</cell></row><row><cell cols="2">0b001..00 (and other inserts) to generate a</cell></row><row><cell>tion succeed.</cell><cell></cell></row><row><cell>example (shown in Figure 4)</cell><cell></cell></row><row><cell>• In Layer 3 Block 302, the user wishes store doc-</cell><cell></cell></row><row><cell>ument ID 1 with key 𝐾1 mapped to encrypted</cell><cell></cell></row><row><cell>value 𝑉1 and document ID 2 mapped to encrypted</cell><cell></cell></row><row><cell>value 𝑉2. The user can submit 2 Layer 3 NoSQL</cell><cell></cell></row><row><cell>transactions:</cell><cell></cell></row><row><cell>[SetKey(𝐾1 = 0b001...00,</cell><cell></cell></row></table><note>• SetKey(𝑘, 𝑣) -stores arbitrary 𝑘, 𝑣, through a storeChunk(k, v) Layer 2 operation and a Layer 3 SMT operation on 𝜅 (insert(𝐻(𝑘), 𝐻(𝑒𝑛𝑐𝑟𝑦𝑝𝑡(𝑣, 𝜋)))) • GetKey(𝑘) -retrieves the value 𝑣 stored in the SetKey(𝑘, 𝑣) operation, through Layer 3 operation on 𝜅 get(H(k)) which returns 𝑣 ℎ followed by 𝑑𝑒𝑐𝑟𝑦𝑝𝑡(retrieveChunk(𝑣 ℎ ), 𝜋) • DeleteKey(𝑘) -removes 𝑘 from the NoSQL database, by storing (𝐻(𝑘), 0) in the SMT; subsequent calls to GetKey(k) will not return a value. The minting of a new Layer 3 NoSQL Block consists of taking each of the Layer 3 transactions (SetKey, BlockRoot (e.g. 0x4d69..). As is standard, the new BlockRoot uses the previous blocks BlockRoot as a starting point. Packaging the block transactions together with any token transactions (balance updates, transfers, deposits, etc.), the new layer 2 block 2002 with hash 0xe8db.. will be stored in Cloudstore with a call to storeChunk(0xe8db...) Txs and submitted to Layer 1 with a call to submitBlock(0xe8db..., 2002).</note></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_4"><head></head><label></label><figDesc>When an owner drops a database, the owner chunk is updated globally. Additionally, any tables associated with the database at the time of deletion should have their root hashes updated. • When an owner deletes a table, the root hash of the table is updated, the schema chunk is updated, and the database chunk is updated with the new schema chunk info and removing the table name. The owner chunk is then updated with the new database chunk info.. 𝑘 , 𝑘): for all tables updated from the SQL transactions, each table has a new root hash. Using the Layer3KeyRoot, any layer 3 node can respond to a SQL SELECT query by retrieving the the previous hash of any table from the SMT. Using the Layer3KeyRoot, any layer 3 node can respond to a SQL SELECT query by retrieving the the previous hash of any table from the SMT which proceeds just as in the NoSQL blockchain, with the analogously structured Deep Merkle Proof. Where in the NoSQL chain, each NoSQL document / row updated resulted in an updated leaf in the SMT for the newly updated document, now with the SQL chain, each SQL statement supports a new table root hash change in an update leaf in the SMT.</figDesc><table><row><cell cols="2">the index chunks (X chunks and D chunks) are</cell><cell></cell></row><row><cell cols="2">updated with new primary key information and</cell><cell></cell></row><row><cell cols="2">a record chunk is created in JSON form</cell><cell></cell></row><row><cell cols="2">{"id":42, "v":"minnie@ethmail.com"}</cell><cell></cell></row><row><cell cols="2">Because the index chunk changes, the table chunk changes. The root hash of the table is set for the first time in the child chain. When an owner updates a record in a table with a SQL statement lie update account set v =</cell><cell>table is identified by name (up to 32 bytes) and has a table chunk; • Table chunk: represents up to 32 columns belong-ing to a specific "table". Each column is identified by name (up to 27-bytes) and additional informa-tion: its column type (integer, string, float, etc.),</cell></row><row><cell cols="2">"minnie@mail.eth" where id = 42</cell><cell>whether it is a primary key, and any index infor-</cell></row><row><cell cols="2">the record has a new chunkID because of the new JSON content</cell><cell>mation; a 32-byte chunk ID points to a potential index chunk, if the column is indexed A table must have at least one primary key.</cell></row><row><cell cols="2">{"id":42, "v": "minnie@mail.eth"}</cell><cell>• Index chunk: a B+ tree, composed of intermediate</cell></row><row><cell cols="2">and so one or more index chunks are updated with a new chunkID. • When the leader node of a Layer 3 SQL blockchain mints</cell><cell>"X" chunks and data "D" chunks. Each X chunk has 32-byte pointers to additional X chunks or D chunks. D chunks form a ordered doubly linked list, and contain pointers to record chunks. • Record chunk: a 4K chunk of data that holds a JSON record for a keyed value. Our current implementation has a full implementation of single table operations thus far, but with relational database operations approachable with the same dynam-ics: • When the owner of a Layer 3 blockchain creates a new database, the owner chunk is updated and database chunk is created and the owner chunk</cell></row><row><cell cols="2">a Layer 3 block, it must include in its Layer 3 block:</cell><cell>is updated with the new database chunk informa-</cell></row><row><cell cols="2">• the SQL transactions -where for each table ref-erenced in the SQL, the leader must retrieve the previous root hash of the table in the SMT and execute the SVM operations for that table against that SMT's data. • the Chunks newly written through the execution of the SQL transactions, where chunks are only created, and never "updated". • a new Layer3KeyRoot transactions and calls submitBlock(𝑏 3</cell><cell>tion. If this is the first database created by the owner, the root hash of the owner is set for the first time. The root hash of the database is set for the first time. • When the owner of a Layer 3 blockchain creates a new table, the database chunk is updated and table chunk is created and the database chunk is updated with the new table information. This also causes the owner chunk to be updated with the new database chunk information. The root hash of the table is set for the first time in the</cell></row><row><cell></cell><cell></cell><cell>child chain.</cell></row><row><cell></cell><cell></cell><cell>• When the owner of a Layer 3 blockchain creates</cell></row><row><cell></cell><cell></cell><cell>or updates a table, this creates or changes the</cell></row><row><cell></cell><cell></cell><cell>database schema chunk. The database chunk is</cell></row><row><cell></cell><cell></cell><cell>then updated with the new schema information,</cell></row><row><cell></cell><cell></cell><cell>which in turn causes the owner chunk to be up-</cell></row><row><cell></cell><cell></cell><cell>dated with the new database chunk information.</cell></row><row><cell cols="2">With a newly minted Layer 3 block 𝑘, the Layer 3 SQL blockchain can submit a layer 2 block transaction 𝑇 3 𝑘 for the Layer 3 Block 𝑏 3 𝑘</cell><cell>• When an owner creates a new record in a table with a SQL statement such as insert into account (id, v)")</cell></row><row><cell>submitBlock(𝑏</cell><cell>3 𝑘 , 𝑘)</cell><cell>values (42, "minnie@ethmail.com")</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_5"><head></head><label></label><figDesc>Since txbytes contains 𝜎 𝑡𝑜𝑡𝑎𝑙 and Ω, the storageCharge function can deduct from balance originally deposited via createBlockchain since the last time storageCharge was called.</figDesc><table><row><cell>• Storage Charges. Under ordinary conditions, the</cell></row><row><cell>layer 2 operator can submit the most recent proof</cell></row><row><cell>of any signed block transaction to the Layer 1</cell></row><row><cell>smart contract function:</cell></row><row><cell>storageCharge(blockchainName string,</cell></row><row><cell>txbytes bytes, storagecost uint64,</cell></row><row><cell>sig bytes)</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_6"><head>•</head><label></label><figDesc>Storage Challenge-Response: CRASH proofs. If at any time, the Layer 3 blockchain wishes to challenge Layer 2's inept storage (due to a missing block or missing chunk included in the block), it may do so by demanding a CRASH proof of a specific layer 3 block, revealing 𝜈 (which must match the 𝛾 in txbytes) by calling:</figDesc><table><row><cell>]</cell><cell cols="3">storageChallenge(blockchainName</cell></row><row><cell cols="2">string,</cell><cell cols="2">blockNumber uint64,</cell><cell>seed</cell></row><row><cell cols="4">bytes32) A valid CRASH-proof response must</cell></row><row><cell cols="4">be provided by the layer 2 operator within</cell></row><row><cell cols="4">some time period (e.g. 3 to 7 days) or the</cell></row><row><cell cols="4">challenger layer 3 user will obtain a payout pro-</cell></row><row><cell cols="4">portional to 𝜎 𝑡𝑜𝑡𝑎𝑙 contained in txbytes.</cell></row><row><cell cols="4">storageResponse(blockchainName</cell></row><row><cell cols="2">string,</cell><cell>blockNumber</cell><cell>uint64,</cell></row><row><cell cols="4">proofBits uint64, proofBytes bytes)</cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">As to why two, two is indicative, but not conclusive concerning Alice's ownership, therefore a user challenge process is required.</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<title level="m" type="main">Layer 3 proof of inclusion of (𝐻(𝐾1), 𝐻(𝑉1)) in Layer 3 block Layer3KeyRoot -in our example</title>
		<imprint/>
	</monogr>
	<note>this would be that the value 𝐻(𝑉1) hashes up to SMT root 𝑅302 = 0x83fc</note>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">A systematic review of blockchain-based system: Transaction throughput latency and challenges</title>
		<author>
			<persName><forename type="first">M</forename><surname>Gracy</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><forename type="middle">R</forename><surname>Jeyavadhanam</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">2021 International Conference on Computational Intelligence and Computing Applications (ICCICA), IEEE</title>
				<imprint>
			<date type="published" when="2021">2021</date>
			<biblScope unit="page" from="1" to="6" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">On performance of pbft blockchain consensus algorithm for iotapplications with constrained devices</title>
		<author>
			<persName><forename type="first">Y</forename><surname>Meshcheryakov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Melman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Evsutin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Morozov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Koucheryavy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Access</title>
		<imprint>
			<biblScope unit="volume">9</biblScope>
			<biblScope unit="page" from="80559" to="80570" />
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Formal modeling and verification of a federated byzantine agreement algorithm for blockchain platforms</title>
		<author>
			<persName><forename type="first">J</forename><surname>Yoo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Jung</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Shin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Bae</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Jee</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE International Workshop on Blockchain Oriented Software Engineering (IWBOSE)</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2019">2019. 2019</date>
			<biblScope unit="page" from="11" to="21" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<author>
			<persName><forename type="first">G</forename><surname>Wood</surname></persName>
		</author>
		<ptr target="https://karl.tech/plasma-cash-simple-spec/" />
		<title level="m">Ethereum: A secure decentralised generalised transaction ledger</title>
				<imprint>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Immutability of distributed hash model on blockchain node storage</title>
		<author>
			<persName><forename type="first">U</forename><surname>Rahardja</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">N</forename><surname>Hidayanto</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Lutfiani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">A</forename><surname>Febiani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Q</forename><surname>Aini</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Sci. J. Informatics</title>
		<imprint>
			<biblScope unit="volume">8</biblScope>
			<biblScope unit="page" from="137" to="143" />
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<monogr>
		<author>
			<persName><forename type="first">K</forename><surname>Floersch</surname></persName>
		</author>
		<ptr target="https://karl.tech/plasma-cash-simple-spec" />
		<title level="m">Plasma cash simple spec</title>
				<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<author>
			<persName><forename type="first">E</forename><surname>Gaetani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Aniello</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Baldoni</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Lombardi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Margheri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Sassone</surname></persName>
		</author>
		<title level="m">Blockchain-based database to ensure data integrity in cloud computing environments</title>
				<imprint>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<author>
			<persName><forename type="first">J</forename><surname>Poon</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Buterin</surname></persName>
		</author>
		<ptr target="http://plasma.io/plasma.pdf" />
		<title level="m">Plasma: Scalable autonomous smart contracts</title>
				<imprint>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<author>
			<persName><forename type="first">A</forename><surname>V. Trón</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">A</forename><surname>Fischer</surname></persName>
		</author>
		<author>
			<persName><surname>Nagy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Swarm: a decentralised peer-to-peer network for messaging and storage</title>
				<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<author>
			<persName><forename type="first">S</forename><forename type="middle">K</forename><surname>Panda</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">A</forename><surname>Elngar</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">E</forename><surname>Balas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Kayed</surname></persName>
		</author>
		<title level="m">Bitcoin and blockchain: history and current applications</title>
				<imprint>
			<publisher>CRC Press</publisher>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<author>
			<persName><forename type="first">B</forename><surname>Laurie</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Kaspe</surname></persName>
		</author>
		<ptr target="https://www.links.org/files/RevocationTransparency.pdf" />
		<title level="m">Revocation transparency</title>
				<imprint>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Efficient sparse merkle trees: Caching strategies and secure (non-) membership proofs</title>
		<author>
			<persName><forename type="first">R</forename><surname>Dahlberg</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Pulls</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Peeters</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Secure IT Systems: 21st Nordic Conference, NordSec 2016</title>
				<meeting><address><addrLine>Oulu, Finland</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2016">November 2-4, 2016. 2016</date>
			<biblScope unit="page" from="199" to="215" />
		</imprint>
	</monogr>
	<note>Proceedings 21</note>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
