<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3-mathml3.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ali="http://www.niso.org/schemas/ali/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" article-type="research-article" dtd-version="1.3" xml:lang="EN">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Blockchain</journal-id>
<journal-title-group>
<journal-title>Frontiers in Blockchain</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Blockchain</abbrev-journal-title>
</journal-title-group>
<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">1762781</article-id>
<article-id pub-id-type="doi">10.3389/fbloc.2026.1762781</article-id>
<article-version article-version-type="Version of Record" vocab="NISO-RP-8-2008"/>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Original Research</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>TeleZK-L2: a scalable zk-SNARK framework for privacy-preserving telehealth data verification on Layer-2 blockchain</article-title>
<alt-title alt-title-type="left-running-head">Jayaraman and Delhibabu</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/fbloc.2026.1762781">10.3389/fbloc.2026.1762781</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Jayaraman</surname>
<given-names>Prabhavathi</given-names>
</name>
<xref ref-type="aff" rid="aff1"/>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Conceptualization" vocab-term-identifier="https://credit.niso.org/contributor-roles/conceptualization/">Conceptualization</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Data curation" vocab-term-identifier="https://credit.niso.org/contributor-roles/data-curation/">Data curation</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Investigation" vocab-term-identifier="https://credit.niso.org/contributor-roles/investigation/">Investigation</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Methodology" vocab-term-identifier="https://credit.niso.org/contributor-roles/methodology/">Methodology</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Writing &#x2013; original draft" vocab-term-identifier="https://credit.niso.org/contributor-roles/writing-original-draft/">Writing &#x2013; original draft</role>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Delhibabu</surname>
<given-names>Radhakrishnan</given-names>
</name>
<xref ref-type="aff" rid="aff1"/>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/231736"/>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Funding acquisition" vocab-term-identifier="https://credit.niso.org/contributor-roles/funding-acquisition/">Funding acquisition</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Software" vocab-term-identifier="https://credit.niso.org/contributor-roles/software/">Software</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Supervision" vocab-term-identifier="https://credit.niso.org/contributor-roles/supervision/">Supervision</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Validation" vocab-term-identifier="https://credit.niso.org/contributor-roles/validation/">Validation</role>
<role vocab="credit" vocab-identifier="https://credit.niso.org/" vocab-term="Writing &#x2013; review &#x26; editing" vocab-term-identifier="https://credit.niso.org/contributor-roles/Writing - review &#x26; editing/">Writing &#x2013; review and editing</role>
</contrib>
</contrib-group>
<aff id="aff1">
<institution>School of Computer Science and Engineering, Vellore Institute of Technology</institution>, <city>Vellore</city>, <state>Tamil Nadu</state>, <country country="IN">India</country>
</aff>
<author-notes>
<corresp id="c001">
<label>&#x2a;</label>Correspondence: Radhakrishnan Delhibabu, <email xlink:href="mailto:rdelhibabu@vit.ac.in">rdelhibabu@vit.ac.in</email>
</corresp>
</author-notes>
<pub-date publication-format="electronic" date-type="pub" iso-8601-date="2026-02-18">
<day>18</day>
<month>02</month>
<year>2026</year>
</pub-date>
<pub-date publication-format="electronic" date-type="collection">
<year>2026</year>
</pub-date>
<volume>9</volume>
<elocation-id>1762781</elocation-id>
<history>
<date date-type="received">
<day>08</day>
<month>12</month>
<year>2025</year>
</date>
<date date-type="rev-recd">
<day>11</day>
<month>01</month>
<year>2026</year>
</date>
<date date-type="accepted">
<day>26</day>
<month>01</month>
<year>2026</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2026 Jayaraman and Delhibabu.</copyright-statement>
<copyright-year>2026</copyright-year>
<copyright-holder>Jayaraman and Delhibabu</copyright-holder>
<license>
<ali:license_ref start_date="2026-02-18">https://creativecommons.org/licenses/by/4.0/</ali:license_ref>
<license-p>This is an open-access article distributed under the terms of the <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution License (CC BY)</ext-link>. 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.</license-p>
</license>
</permissions>
<abstract>
<sec>
<title>Introduction</title>
<p>In the contemporary digital health landscape, securing personal health data against unauthorized access while ensuring its verifiability is a paramount challenge. A critical conflict exists between the transparency required for data verification and the privacy mandated by global regulations such as HIPAA and GDPR. Existing Layer-1 blockchain solutions suffer from prohibitive gas costs and high latency, rendering them unsuitable for real-time monitoring of high-volume health data streams.</p>
</sec>
<sec>
<title>Methods</title>
<p>This paper proposes TeleZK-L2, a novel framework that synergizes distributed Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge (zk-SNARKs) with Layer-2 scaling solutions. The architecture introduces a Distributed Prover Network (DPN) to parallelize heavy cryptographic computations and utilizes Optimistic Proof Aggregation to minimize on-chain data footprints. The verification logic is anchored on the Polygon zkEVM to ensure high throughput and low-cost settlement.</p>
</sec>
<sec>
<title>Results</title>
<p>Extensive simulations on a 16-node high-performance cluster demonstrate that TeleZK-L2 generates proofs at a rate 40% faster than the standard Groth16 baseline. Furthermore, the framework reduces on-chain verification costs by approximately 52%. The system maintains constant-time verification complexity regardless of batch size, achieving a peak throughput of 260 TPS.</p>
</sec>
<sec>
<title>Discussion</title>
<p>TeleZK-L2 provides the technical privacy guarantees necessary to support adherence to HIPAA and GDPR data minimization mandates while maintaining cryptographic soundness. By resolving the &#x22;Scalability-Privacy Trilemma,&#x22; this framework demonstrates significant potential for large-scale deployment in national telehealth infrastructures and remote patient monitoring ecosystems.</p>
</sec>
</abstract>
<kwd-group>
<kwd>blockchain</kwd>
<kwd>distributed computing</kwd>
<kwd>IOMT</kwd>
<kwd>layer-2 scaling</kwd>
<kwd>privacy-preserving computation</kwd>
<kwd>telehealth security</kwd>
<kwd>zero-knowledge proofs</kwd>
</kwd-group>
<funding-group>
<funding-statement>The author(s) declared that financial support was not received for this work and/or its publication.</funding-statement>
</funding-group>
<counts>
<fig-count count="4"/>
<table-count count="4"/>
<equation-count count="13"/>
<ref-count count="12"/>
<page-count count="12"/>
</counts>
<custom-meta-group>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Blockchain Security and Privacy</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<label>1</label>
<title>Introduction</title>
<p>The digital transformation of the healthcare sector has been accelerated by the widespread adoption of Telehealth services and the Internet of Medical Things (IoMT). Post-pandemic healthcare architectures have shifted from centralized hospital-based monitoring to decentralized, remote patient monitoring (RPM) ecosystems. According to recent market analysis, the global IoMT market is projected to reach $187 billion by 2028, driven by the proliferation of wearable sensors, smart pacemakers, and glucose monitors (<xref ref-type="bibr" rid="B6">Kumar et al., 2023</xref>). These devices generate massive streams of high-velocity, sensitive physiological data that require real-time verification to ensure clinical decision-making is based on authentic records.</p>
<p>However, this digitization introduces profound security and privacy challenges. Traditional centralized healthcare databases act as &#x201c;honeypots&#x201d; for cyberattacks. A single breach can compromise millions of patient records, as evidenced by the increasing frequency of ransomware attacks on hospital networks (<xref ref-type="bibr" rid="B11">Williams and Haughton, 2022</xref>). While centralized servers offer speed, they lack transparency and immutability, making it difficult to verify if data has been tampered with during transmission from edge devices to the cloud.</p>
<p>Blockchain technology has emerged as a robust solution to these integrity issues. By creating an immutable, distributed ledger of medical records, blockchain ensures that data, once recorded, cannot be altered without consensus (<xref ref-type="bibr" rid="B3">Fan et al., 2018</xref>). Despite this promise, the application of standard Layer-1 (L1) blockchains (such as Ethereum or Bitcoin) in telehealth faces a critical bottleneck known as the &#x201c;Scalability-Privacy Trilemma.&#x201d;</p>
<sec id="s1-1">
<label>1.1</label>
<title>The Scalability-Privacy Trilemma</title>
<p>Traditional centralized databases represent a single point of failure. While blockchain technology offers an immutable, distributed ledger that eliminates this vulnerability, it introduces a &#x201c;Scalability-Privacy Trilemma&#x201d; in the context of healthcare:<list list-type="bullet">
<list-item>
<p>Decentralization: Ensuring no single entity controls the patient records.</p>
</list-item>
<list-item>
<p>Scalability: Handling thousands of transactions per second (TPS) generated by IoMT devices. In a national-scale telehealth network where thousands of IoMT devices emit vital signs every second, an L1 network would clog immediately, leading to prohibitive gas fees and latency unacceptable for emergency medical monitoring (<xref ref-type="bibr" rid="B10">Scalability et al., 2017</xref>).</p>
</list-item>
<list-item>
<p>Privacy: Protecting patient identity and data content from the public ledger transparency. Regulations such as HIPAA and GDPR mandate strict data confidentiality (<xref ref-type="bibr" rid="B2">European Union, 2016</xref>). The GDPR&#x2019;s &#x201c;Right to be Forgotten&#x201d; directly conflicts with the immutability of blockchain (<xref ref-type="bibr" rid="B7">Politou et al., 2018</xref>). Storing even encrypted health data or hash pointers on a public ledger can lead to metadata leakage.</p>
</list-item>
</list>
</p>
<p>To resolve this conflict, researchers have turned to Zero-Knowledge Proofs (ZKPs), specifically zk-SNARKs. ZKPs allow a Prover (the patient&#x2019;s device) to convince a Verifier (the medical system) that data is valid without revealing the actual data values (<xref ref-type="bibr" rid="B5">Groth, 2016</xref>). While ZKPs solve the privacy aspect, they historically exacerbate the scalability issue due to the immense computational overhead required to generate proofs. Generating a proof for a complex medical circuit on a resource-constrained IoMT device can take seconds to minutes, creating a latency bottleneck that is dangerous in critical care scenarios (<xref ref-type="bibr" rid="B9">Rahman and Al-Shaer, 2020</xref>).</p>
<p>Existing solutions like MedBlock (<xref ref-type="bibr" rid="B3">Fan et al., 2018</xref>) and ZeroMed (<xref ref-type="bibr" rid="B9">Rahman and Al-Shaer, 2020</xref>) have attempted to integrate these technologies but often rely on expensive Layer-1 verification or centralized authorities for key management, failing to achieve true decentralization or cost-efficiency. There is a distinct lack of frameworks that simultaneously address the high throughput required by IoMT and the strict privacy required by HIPAA, without incurring the high costs of L1 execution.</p>
</sec>
<sec id="s1-2">
<label>1.2</label>
<title>Contributions</title>
<p>To bridge this gap, this paper proposes TeleZK-L2, a cohesive architecture designed to resolve the Scalability-Privacy Trilemma. Our specific contributions are:<list list-type="order">
<list-item>
<p>Layer-2 Integration: We migrate verification logic to the Polygon zkEVM, leveraging rollups to decrease transaction costs by orders of magnitude compared to Ethereum L1.</p>
</list-item>
<list-item>
<p>Distributed Proving Scheme: We propose a method to shard the zk-SNARK arithmetic circuit generation across a cluster of prover nodes, reducing latency for real-time applications.</p>
</list-item>
<list-item>
<p>Optimized Circuit Design: We develop a custom Rank-1 Constraint System (R1CS) utilizing the Poseidon hash function and bit-decomposition gadgets to efficiently validate vital sign ranges without revealing the actual values.</p>
</list-item>
<list-item>
<p>Comparative Evaluation: We provide a rigorous benchmark against existing frameworks, analyzing proof generation time, gas consumption, and throughput.</p>
</list-item>
</list>
</p>
<p>Collectively, these technical advancements address the critical friction between blockchain immutability and the GDPR &#x201c;Right to be Forgotten.&#x201d; By ensuring that no plaintext patient data is ever committed on-chain and instead utilizing off-chain storage with cryptographic commitments, TeleZK-L2 provides a technological framework that supports the data privacy and minimization requirements of regulations like HIPAA and GDPR, without claiming to replace the necessary administrative and physical safeguards required for full legal compliance.</p>
<p>Organization of the Paper: The remainder of this paper is organized as follows. <xref ref-type="sec" rid="s2">Section 2</xref> reviews the related work in blockchain-based healthcare, zero-knowledge proofs, and Layer-2 scaling, highlighting the gaps in current state-of-the-art solutions. <xref ref-type="sec" rid="s3">Section 3</xref> establishes the mathematical preliminaries, including bilinear pairings and the Groth16 proving scheme, which form the foundation of our privacy engine. <xref ref-type="sec" rid="s4">Section 4</xref> presents the proposed TeleZK-L2 system architecture, detailing the data lifecycle, regulatory compliance mechanisms, and the interaction between the Edge, Proving, and Settlement layers. <xref ref-type="sec" rid="s5">Section 5</xref> describes the methodology and implementation, focusing on the optimized circuit construction, distributed task scheduling, and the formal construction of the optimistic proof aggregation algorithm. <xref ref-type="sec" rid="s6">Section 6</xref> analyzes the experimental results, offering a comparative evaluation of gas costs and throughput, followed by a discussion on trust assumptions and security implications. Finally, <xref ref-type="sec" rid="s7">Section 7</xref> concludes the paper and outlines directions for future research.</p>
</sec>
</sec>
<sec id="s2">
<label>2</label>
<title>Related work</title>
<p>The intersection of blockchain technology and healthcare has been a subject of extensive research, primarily driven by the need for secure, interoperable, and patient-centric data management systems. This section reviews the evolution of these technologies, focusing on three critical pillars: Blockchain-based Electronic Health Records (EHR), Zero-Knowledge Proofs for privacy, and Layer-2 scaling solutions.</p>
<sec id="s2-1">
<label>2.1</label>
<title>Blockchain in healthcare architectures</title>
<p>Early implementations of blockchain in healthcare focused on decentralizing Electronic Health Records (EHR) to eliminate single points of failure. Frameworks like MedBlock (<xref ref-type="bibr" rid="B3">Fan et al., 2018</xref>) utilized permissioned blockchain architectures to manage access control lists (ACLs) for patient records. While effective for administrative data, these systems often face scalability hurdles when handling high-frequency data from the Internet of Medical Things (IoMT). Similarly, architectures such as PatientChain attempted to incentivize data sharing through tokenomics. However, these solutions typically rely on recording data hashes directly on Layer-1 blockchains, leading to prohibitive storage costs.</p>
</sec>
<sec id="s2-2">
<label>2.2</label>
<title>Zero-knowledge proofs and privacy preservation</title>
<p>To address the privacy conflicts between public ledgers and regulations like HIPAA and GDPR, recent research has integrated Zero-Knowledge Proofs (ZKPs).<list list-type="bullet">
<list-item>
<p>zk-SNARKs: The Groth16 protocol (<xref ref-type="bibr" rid="B5">Groth, 2016</xref>) became the industry standard for succinct non-interactive arguments due to its small proof size and fast verification. However, the computational overhead remains a bottleneck for edge devices.</p>
</list-item>
<list-item>
<p>Proof Aggregation: Techniques such as SnarkPack (<xref ref-type="bibr" rid="B4">Gailly et al., 2022</xref>) allow for the aggregation of multiple proofs into a single proof object. This is critical for blockchain applications, as it allows verifying a batch of transactions with a constant-sized on-chain footprint.</p>
</list-item>
</list>
</p>
</sec>
<sec id="s2-3">
<label>2.3</label>
<title>Layer-2 scaling solutions</title>
<p>The scalability limitations of Layer-1 (L1) blockchains have led to the widespread adoption of Layer-2 (L2) scaling solutions. L2 protocols, such as Rollups, execute transactions off-chain and post only the state root and validity proof to the L1 mainnet. The Polygon zkEVM (<xref ref-type="bibr" rid="B8">Polygon Labs, 2023</xref>) represents the state-of-the-art in this domain, offering Ethereum Virtual Machine (EVM) compatibility with the scalability benefits of ZK-Rollups. TeleZK-L2 leverages Polygon&#x2019;s architecture to achieve instant finality and low transaction costs.</p>
</sec>
<sec id="s2-4">
<label>2.4</label>
<title>Gap analysis of state-of-the-art frameworks</title>
<p>Despite significant progress, a comparative analysis reveals critical gaps in current methodologies:<list list-type="order">
<list-item>
<p>High Operational Costs: Systems like ZeroMed (<xref ref-type="bibr" rid="B9">Rahman and Al-Shaer, 2020</xref>) deploy verification logic on Ethereum L1. With gas fees fluctuating, the cost to verify a single heart-rate anomaly can exceed $50.</p>
</list-item>
<list-item>
<p>Latency Bottlenecks: The sequential generation of ZK-proofs in existing systems introduces unacceptable delays for real-time alerts.</p>
</list-item>
<list-item>
<p>Lack of IoMT Specificity: Most current solutions focus on static documents rather than dynamic, time-series data streams.</p>
</list-item>
</list>
</p>
</sec>
</sec>
<sec id="s3">
<label>3</label>
<title>Mathematical preliminaries</title>
<p>To ensure the rigorous security and functional correctness of the TeleZK-L2 framework, we rely on specific cryptographic primitives derived from elliptic curve cryptography and arithmetic circuit complexity theory (<xref ref-type="bibr" rid="B1">Ben-Sasson et al., 2014</xref>). This section defines the mathematical foundations of our Zero-Knowledge implementation (<xref ref-type="disp-formula" rid="e1">Equations 1</xref>, <xref ref-type="disp-formula" rid="e2">2</xref>).</p>
<sec id="s3-1">
<label>3.1</label>
<title>Bilinear pairings</title>
<p>Our system utilizes elliptic curve pairings over the Barreto-Naehrig, BN254 (Alt-BN128) curve, which allows for efficient on-chain verification via precompiled contracts on the Polygon zkEVM. Let <inline-formula id="inf1">
<mml:math id="m1">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, <inline-formula id="inf2">
<mml:math id="m2">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, and <inline-formula id="inf3">
<mml:math id="m3">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> be cyclic groups of large prime order <inline-formula id="inf4">
<mml:math id="m4">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. A bilinear pairing is an efficiently computable map <inline-formula id="inf5">
<mml:math id="m5">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> satisfying two fundamental properties:<list list-type="order">
<list-item>
<p>Bilinearity: For all <inline-formula id="inf6">
<mml:math id="m6">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and scalars <inline-formula id="inf7">
<mml:math id="m7">
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>b</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>, the pairing satisfies:</p>
</list-item>
</list>
<disp-formula id="e1">
<mml:math id="m8">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>e</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>v</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
<label>(1)</label>
</disp-formula>This property allows the Verification Smart Contract to check linear relationships between encrypted values without decrypting them.<list list-type="simple">
<list-item>
<p>2. Non-degeneracy: If <inline-formula id="inf8">
<mml:math id="m9">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf9">
<mml:math id="m10">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> are generators of <inline-formula id="inf10">
<mml:math id="m11">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf11">
<mml:math id="m12">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> respectively, then <inline-formula id="inf12">
<mml:math id="m13">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2260;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</list-item>
</list>
</p>
</sec>
<sec id="s3-2">
<label>3.2</label>
<title>Arithmetic circuit representation (R1CS)</title>
<p>To generate a zero-knowledge proof, the computational logic (e.g., &#x201c;Is <inline-formula id="inf13">
<mml:math id="m14">
<mml:mrow>
<mml:mn>60</mml:mn>
<mml:mo>&#x3c;</mml:mo>
<mml:mtext>HeartRate</mml:mtext>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>100</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>?&#x201c;) must be flattened into an Arithmetic Circuit. We formally express this as a Rank-1 Constraint System (R1CS). An R1CS is defined by a triplet of matrices <inline-formula id="inf14">
<mml:math id="m15">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where <inline-formula id="inf15">
<mml:math id="m16">
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the number of gates and <inline-formula id="inf16">
<mml:math id="m17">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the size of the witness vector. A witness vector <inline-formula id="inf17">
<mml:math id="m18">
<mml:mrow>
<mml:mi mathvariant="bold">w</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> satisfies the R1CS if and only if:<disp-formula id="e2">
<mml:math id="m19">
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x25e6;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:math>
<label>(2)</label>
</disp-formula>where <inline-formula id="inf18">
<mml:math id="m20">
<mml:mrow>
<mml:mo>&#x25e6;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> denotes the Hadamard (element-wise) product. In TeleZK-L2, floating-point health metrics are mapped into this finite field <inline-formula id="inf19">
<mml:math id="m21">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> using fixed-point arithmetic scaling.</p>
</sec>
<sec id="s3-3">
<label>3.3</label>
<title>Quadratic arithmetic programs (QAP)</title>
<p>To prove the correctness of the R1CS without revealing the witness <inline-formula id="inf20">
<mml:math id="m22">
<mml:mrow>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, we transform the matrices into polynomials using Lagrange Interpolation as shown in <xref ref-type="disp-formula" rid="e3">Equations 3</xref>, <xref ref-type="disp-formula" rid="e4">4</xref>. A QAP of degree <inline-formula id="inf21">
<mml:math id="m23">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> over a field <inline-formula id="inf22">
<mml:math id="m24">
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> consists of a set of polynomials <inline-formula id="inf23">
<mml:math id="m25">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>The statement is satisfied if, for a valid witness, the linear combination of these polynomials satisfies the divisibility check:<disp-formula id="e3">
<mml:math id="m26">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(3)</label>
</disp-formula>
<disp-formula id="e4">
<mml:math id="m27">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>H</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>Z</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(4)</label>
</disp-formula>where <inline-formula id="inf24">
<mml:math id="m28">
<mml:mrow>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x220f;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> is the vanishing polynomial over the target domain roots <inline-formula id="inf25">
<mml:math id="m29">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>. The Prover&#x2019;s goal is to compute the quotient polynomial <inline-formula id="inf26">
<mml:math id="m30">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mi>Z</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>. Since the degree of <inline-formula id="inf27">
<mml:math id="m31">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> can be large (e.g., <inline-formula id="inf28">
<mml:math id="m32">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> constraints for complex medical logic), computing <inline-formula id="inf29">
<mml:math id="m33">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> requires Fast Fourier Transforms (FFT), which justifies our use of a Distributed Prover Network (DPN) to parallelize this operation.</p>
</sec>
<sec id="s3-4">
<label>3.4</label>
<title>The Groth16 proving scheme</title>
<p>TeleZK-L2 utilizes the Groth16 scheme for its succinctness (constant proof size of 3 group elements). The proof consists of three elements <inline-formula id="inf30">
<mml:math id="m34">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> computed as three group elements (<xref ref-type="disp-formula" rid="e5">Equations 5</xref>&#x2013;<xref ref-type="disp-formula" rid="e7">7</xref>):<disp-formula id="e5">
<mml:math id="m35">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3b4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(5)</label>
</disp-formula>
<disp-formula id="e6">
<mml:math id="m36">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3b4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(6)</label>
</disp-formula>
<disp-formula id="e7">
<mml:math id="m37">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>H</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>Z</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3b4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
<label>(7)</label>
</disp-formula>where <inline-formula id="inf31">
<mml:math id="m38">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> are parameters from the trusted setup.</p>
</sec>
<sec id="s3-5">
<label>3.5</label>
<title>Security properties</title>
<p>Formal security of the framework relies on three properties:<list list-type="bullet">
<list-item>
<p>Completeness: For every valid health data witness <inline-formula id="inf32">
<mml:math id="m39">
<mml:mrow>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the honest prover can always generate a proof <inline-formula id="inf33">
<mml:math id="m40">
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> that the Verifier accepts.</p>
</list-item>
<list-item>
<p>Soundness (Knowledge Error): For any adversary <inline-formula id="inf34">
<mml:math id="m41">
<mml:mrow>
<mml:mi mathvariant="script">A</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the probability of generating a valid proof <inline-formula id="inf35">
<mml:math id="m42">
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> without knowing a valid witness <inline-formula id="inf36">
<mml:math id="m43">
<mml:mrow>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is negligible <inline-formula id="inf37">
<mml:math id="m44">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>128</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. This prevents the injection of fake health records.</p>
</list-item>
<list-item>
<p>Zero-Knowledge: The proof <inline-formula id="inf38">
<mml:math id="m45">
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> reveals no information about <inline-formula id="inf39">
<mml:math id="m46">
<mml:mrow>
<mml:mi mathvariant="bold">w</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (the actual heart rate or blood pressure values) other than the fact that they satisfy the range constraints defined in the circuit.</p>
</list-item>
</list>
</p>
</sec>
</sec>
<sec id="s4">
<label>4</label>
<title>System architecture</title>
<p>TeleZK-L2 operates on a robust three-tier architecture designed to bridge the gap between resource-constrained IoMT devices and the high-security requirements of medical data.</p>
<sec id="s4-1">
<label>4.1</label>
<title>High-level architecture overview</title>
<p>The system data flow is visualized in <xref ref-type="fig" rid="F1">Figure 1</xref>. It follows a &#x201c;Commit-Prove-Verify&#x201d; lifecycle. The heavy lifting of cryptographic generation is offloaded from the Edge devices to a Distributed Prover Network (DPN), ensuring that wearable devices preserve battery life while maintaining security address the limitations found in existing frameworks (<xref ref-type="table" rid="T1">Table 1</xref>).</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>TeleZK-L2 high-level system architecture.</p>
</caption>
<graphic xlink:href="fbloc-09-1762781-g001.tif">
<alt-text content-type="machine-generated">Flowchart illustrating a privacy-preserving data pipeline where patient or IoMT device data undergoes hashing and encryption, is stored in IPFS, then processed by a distributed prover network with multiple prover nodes, whose proofs are aggregated and verified on-chain using smart contracts, ultimately enabling storage in an immutable ledger.</alt-text>
</graphic>
</fig>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Feature Comparison of TeleZK-L2 with existing frameworks.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Framework</th>
<th align="center">Privacy tech</th>
<th align="center">Consensus</th>
<th align="center">Scalability</th>
<th align="center">IoMT support</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">MedBlock (<xref ref-type="bibr" rid="B3">Fan et al., 2018</xref>)</td>
<td align="center">Access Control</td>
<td align="center">PoA</td>
<td align="center">Low</td>
<td align="center">Low</td>
</tr>
<tr>
<td align="left">ZeroMed (<xref ref-type="bibr" rid="B9">Rahman and Al-Shaer, 2020</xref>)</td>
<td align="center">zk-SNARK</td>
<td align="center">PoW (<italic>E</italic>th)</td>
<td align="center">Low</td>
<td align="center">Medium</td>
</tr>
<tr>
<td align="left">HealthChain (<xref ref-type="bibr" rid="B12">Xu et al., 2019</xref>)</td>
<td align="center">Ring Signatures</td>
<td align="center">PBFT</td>
<td align="center">Medium</td>
<td align="center">Low</td>
</tr>
<tr>
<td align="left">TeleZK-L2</td>
<td align="center">Dist. zk-SNARK</td>
<td align="center">Polygon PoS</td>
<td align="center">High</td>
<td align="center">High</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s4-2">
<label>4.2</label>
<title>Layer 1: data origination (edge)</title>
<p>The Edge Layer consists of IoMT sensors (e.g., smartwatches, ECG monitors). Since these devices lack the computational power to generate full zk-SNARK proofs (requiring gigabytes of RAM for large circuits), they perform only lightweight cryptographic commitments:<list list-type="bullet">
<list-item>
<p>Data Acquisition: The sensor captures raw physiological data <inline-formula id="inf40">
<mml:math id="m47">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (e.g., vitals).</p>
</list-item>
<list-item>
<p>Encryption Module: Generates random symmetric key <inline-formula id="inf41">
<mml:math id="m48">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and encrypts via AES-256 to produce <inline-formula id="inf42">
<mml:math id="m49">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</list-item>
<list-item>
<p>Commitment: Computes zk-friendly Poseidon hash <inline-formula id="inf43">
<mml:math id="m50">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> (vs. SHA-256; <inline-formula id="inf44">
<mml:math id="m51">
<mml:mrow>
<mml:mo>&#x223c;</mml:mo>
<mml:mn>100</mml:mn>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> fewer R1CS constraints for faster proving).</p>
</list-item>
<list-item>
<p>Transmission: Uploads <inline-formula id="inf45">
<mml:math id="m52">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> to IPFS (returns CID). Sharded witness <inline-formula id="inf46">
<mml:math id="m53">
<mml:mrow>
<mml:mi>W</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is sent securely to DPN Master via mTLS 1.3.</p>
</list-item>
</list>
</p>
</sec>
<sec id="s4-3">
<label>4.3</label>
<title>Layer 2: off-chain proving layer (privacy engine)</title>
<p>This layer is the core innovation of TeleZK-L2, hosting the Distributed Prover Network (DPN) and Aggregation Module.</p>
<sec id="s4-3-1">
<label>4.3.1</label>
<title>Distributed Prover network (DPN)</title>
<p>The DPN uses Master-Worker architecture to parallelize Groth16 proving (QAP evaluation bottlenecks):<list list-type="bullet">
<list-item>
<p>Task Scheduling: Master shards the arithmetic circuit. For <inline-formula id="inf47">
<mml:math id="m54">
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> constraints, FFT splits into radix-2 sub-domains.</p>
</list-item>
<list-item>
<p>Parallel Execution: Workers process shards concurrently (e.g., Worker A: <inline-formula id="inf48">
<mml:math id="m55">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>; Worker B: <inline-formula id="inf49">
<mml:math id="m56">
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>).</p>
</list-item>
<list-item>
<p>Result Compilation: Master aggregates via iFFT/pairings <inline-formula id="inf50">
<mml:math id="m57">
<mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> individual proof <inline-formula id="inf51">
<mml:math id="m58">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> (13.4<inline-formula id="inf52">
<mml:math id="m59">
<mml:mrow>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> FFT speedup, <xref ref-type="table" rid="T3">Table 3</xref>).</p>
</list-item>
</list>
</p>
</sec>
<sec id="s4-3-2">
<label>4.3.2</label>
<title>Proof aggregation (SnarkPack)</title>
<p>Avoids linear on-chain costs (<inline-formula id="inf53">
<mml:math id="m60">
<mml:mrow>
<mml:mo>&#x223c;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>300M gas for 1000 proofs); Aggregator combined via a modified SnarkPack protocol (<xref ref-type="disp-formula" rid="e8">Equation 8</xref>) (<xref ref-type="statement" rid="Algorithm_1">Algorithm 1</xref>):<disp-formula id="e8">
<mml:math id="m61">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>agg</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2190;</mml:mo>
<mml:mtext>Aggregate</mml:mtext>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</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:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>log</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mtext>&#x2009;size</mml:mtext>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(8)</label>
</disp-formula>
</p>
<p>Yields constant-time batch verification (99.97% savings, <xref ref-type="table" rid="T2">Table 2</xref>).</p>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Amortized gas cost for verifying 100 records (USD).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Method</th>
<th align="center">Gas used (gwei)</th>
<th align="center">Cost (USD)</th>
<th align="center">Savings (%)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Ethereum L1</td>
<td align="center">45,000,000</td>
<td align="center">$90.00</td>
<td align="center">0%</td>
</tr>
<tr>
<td align="left">Polygon standard</td>
<td align="center">45,000</td>
<td align="center">$0.09</td>
<td align="center">99.9%</td>
</tr>
<tr>
<td align="left">TeleZK-L2 (Agg)</td>
<td align="center">
<bold>15,000</bold>
</td>
<td align="center">
<bold>$0.03</bold>
</td>
<td align="center">
<bold>99.97%</bold>
</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn>
<p>Bold values indicate the best-performing metrics for the respective category.</p>
</fn>
</table-wrap-foot>
</table-wrap>
</sec>
</sec>
<sec id="s4-4">
<label>4.4</label>
<title>Layer 3: on-chain settlement (polygon zkEVM)</title>
<p>Immutable &#x201c;Trust Anchor&#x201d; on Polygon zkEVM (Solidity-compatible, low-fee L2 rollup):<list list-type="bullet">
<list-item>
<p>Verification Smart Contract (VSC): Stores <inline-formula id="inf54">
<mml:math id="m62">
<mml:mrow>
<mml:mi>V</mml:mi>
<mml:mi>K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (trusted setup); exposes &#x2018;verifyBatch()&#x2019;.</p>
</list-item>
<list-item>
<p>Gas Logic: Inputs <inline-formula id="inf55">
<mml:math id="m63">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>agg</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> &#x2b; Merkle root of public inputs (CID/<inline-formula id="inf56">
<mml:math id="m64">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>); single pairing validates batch <inline-formula id="inf57">
<mml:math id="m65">
<mml:mrow>
<mml:mo>&#x2192;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> &#x2018;BatchVerified&#x2019; event.</p>
</list-item>
<list-item>
<p>Storage Optimization: No raw data; &#x2018;mapping(bytes32 &#x3d;&#x3e; string) public dataLog; &#x2019; <inline-formula id="inf58">
<mml:math id="m66">
<mml:mrow>
<mml:mo>&#x2194;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> hash to CID (GDPR/HIPAA minimization).</p>
</list-item>
</list>
</p>
</sec>
<sec id="s4-5">
<label>4.5</label>
<title>Lifecycle of a telehealth transaction</title>
<p>The complete data lifecycle is straightforward:<list list-type="order">
<list-item>
<p>Sensing: IoMT device captures raw data <inline-formula id="inf59">
<mml:math id="m67">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (e.g., Heart Rate &#x3d; 120 bpm).</p>
</list-item>
<list-item>
<p>Commit/Encrypt: Hash with Poseidon, encrypt AES-256, upload to IPFS (CID returned).</p>
</list-item>
<list-item>
<p>Delegation: Send sharded data to DPN (secure channel).</p>
</list-item>
<list-item>
<p>Proving: DPN checks if <inline-formula id="inf60">
<mml:math id="m68">
<mml:mrow>
<mml:mn>60</mml:mn>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>120</mml:mn>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>180</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>. It generates a ZK-Proof <inline-formula id="inf61">
<mml:math id="m69">
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</list-item>
<list-item>
<p>Aggregation: Bundle with 99 others into <inline-formula id="inf62">
<mml:math id="m70">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>agg</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</list-item>
<list-item>
<p>Settlement: Submit <inline-formula id="inf63">
<mml:math id="m71">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>agg</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> &#x2b; CID/<inline-formula id="inf64">
<mml:math id="m72">
<mml:mrow>
<mml:mi>H</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> to Polygon zkEVM VSC.</p>
</list-item>
<list-item>
<p>Verification: Contract checks proof, logs result.</p>
</list-item>
<list-item>
<p>Access: Doctor gets data from CID, decrypts, verifies hash.</p>
</list-item>
</list>
</p>
</sec>
<sec id="s4-6">
<label>4.6</label>
<title>Regulatory compliance: GDPR and Cryptographic Erasure</title>
<p>To resolve the tension between blockchain immutability and the GDPR &#x201c;Right to be Forgotten,&#x201d; (<xref ref-type="bibr" rid="B2">European Union, 2016</xref>) TeleZK-L2 implements a strictly defined Key Shredding Protocol (KSP). Although IPFS CIDs are anchored on the Polygon zkEVM, the data <inline-formula id="inf65">
<mml:math id="m73">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> associated with a CID is encrypted as <inline-formula id="inf66">
<mml:math id="m74">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> using a unique symmetric key <inline-formula id="inf67">
<mml:math id="m75">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> per record.</p>
<p>Cryptographic Erasure: When a user requests data deletion, the system destroys the specific key <inline-formula id="inf68">
<mml:math id="m76">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> managed by the Key Management Service (KMS). While the ciphertext <inline-formula id="inf69">
<mml:math id="m77">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula> remains on IPFS and the CID remains on-chain, the destruction of <inline-formula id="inf70">
<mml:math id="m78">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> renders the data mathematically unrecoverable. This process, known as crypto-shredding, is recognized by data protection authorities as an effective method for digital erasure.</p>
<p>HIPAA Control Matrix: We map our architecture to specific HIPAA constraints:<list list-type="bullet">
<list-item>
<p>Integrity Controls (164.312(c)(1)): Satisfied by the zk-SNARK proof <inline-formula id="inf71">
<mml:math id="m79">
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, which mathematically guarantees that the on-chain hash matches the off-chain data without modification.</p>
</list-item>
<list-item>
<p>Person or Entity Authentication (164.312(d)): Enforced via mTLS 1.3 between the IoMT Edge layer and the DPN, preventing unauthorized node participation.</p>
</list-item>
<list-item>
<p>Audit Controls (164.312(b)): The Polygon zkEVM logs provide an immutable, timestamped audit trail of every verification event, traceable to specific Prover Node IDs.</p>
</list-item>
</list>
</p>
</sec>
</sec>
<sec id="s5">
<label>5</label>
<title>Methodology and implementation</title>
<p>This section details the implementation specifics of the TeleZK-L2 framework, focusing on the cryptographic circuit construction, distributed task scheduling, and smart contract optimization.</p>
<sec id="s5-1">
<label>5.1</label>
<title>Threat model and security assumptions</title>
<p>We define the security of our system based on the following adversary models:<list list-type="bullet">
<list-item>
<p>Honest-but-Curious Cloud Provider: The IPFS nodes and the DPN worker nodes are assumed to follow the protocol instructions but may attempt to analyze the data flow to infer sensitive patient information. TeleZK-L2 mitigates this via strict encryption of the payload <inline-formula id="inf72">
<mml:math id="m80">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>D</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> and the zero-knowledge property of the proofs, ensuring no witness data leaks during computation.</p>
</list-item>
<list-item>
<p>Malicious Verifier/Observer: The Layer-2 blockchain is public. An adversary can observe all transactions and smart contract states. By committing only the aggregated proof <inline-formula id="inf73">
<mml:math id="m81">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> and the hashed public inputs, we ensure that even a sophisticated observer cannot reconstruct the original medical records.</p>
</list-item>
<list-item>
<p>Active Network Adversary: Man-in-the-Middle (MITM) attacks are prevented via mutual TLS (mTLS) authentication between the Edge devices and the DPN entry nodes. All data payloads are cryptographically signed using the patient&#x2019;s private key.</p>
</list-item>
</list>
</p>
</sec>
<sec id="s5-2">
<label>5.2</label>
<title>Circuit construction and R1CS constraints</title>
<p>The core of our privacy engine is the arithmetic circuit implemented in &#x2018;circom&#x2019;. A typical medical data verification circuit validates vital signs and data integrity.</p>
<sec id="s5-2-1">
<label>5.2.1</label>
<title>Range check gadgets</title>
<p>To verify vital sign <inline-formula id="inf74">
<mml:math id="m82">
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>, direct inequalities are invalid in finite fields (modular wrap-around). We use a Bit-Decomposition Gadget:</p>
<p>Prove <inline-formula id="inf75">
<mml:math id="m83">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>&#x2264;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula> by decomposing <inline-formula id="inf76">
<mml:math id="m84">
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>v</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> as defined in <xref ref-type="disp-formula" rid="e9">Equation 9</xref>:<disp-formula id="e9">
<mml:math id="m85">
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
<mml:mtext>subject</mml:mtext>
<mml:mtext>to</mml:mtext>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x22c5;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:mo>&#x2200;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:math>
<label>(9)</label>
</disp-formula>(<inline-formula id="inf77">
<mml:math id="m86">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>; <inline-formula id="inf78">
<mml:math id="m87">
<mml:mrow>
<mml:mo>&#x223c;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>32 constraints, <inline-formula id="inf79">
<mml:math id="m88">
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>32</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> bits).</p>
<p>circom Implementation:<list list-type="simple">
<list-item>
<p>
<monospace>template RangeCheck(n) {</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>signal input in;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>signal input min;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>signal input max;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>component le &#x3d; LessThan(n);</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>le.in[0] &#x3c;&#x3d;&#x3d; in;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>le.in[1] &#x3c;&#x3d;&#x3d; max;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>le.out &#x3d;&#x3d;&#x3d; 1;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>component ge &#x3d; GreaterThan(n);</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>ge.in[0] &#x3c;&#x3d;&#x3d; in;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>ge.in[1] &#x3c;&#x3d;&#x3d; min;</monospace>
</p>
</list-item>
<list-item>
<p>&#x2003;<monospace>ge.out &#x3d;&#x3d;&#x3d; 1;</monospace>
</p>
</list-item>
<list-item>
<p>
<monospace>}</monospace>
</p>
</list-item>
</list>
</p>
</sec>
</sec>
<sec id="s5-3">
<label>5.3</label>
<title>Optimized commitment via poseidon hashing</title>
<p>To address the computational overhead highlighted in the gap analysis, TeleZK-L2 strictly employs the Poseidon hash function <inline-formula id="inf80">
<mml:math id="m89">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> for cryptographic commitments, replacing the standard SHA-256 used in legacy systems.</p>
<p>While a standard SHA-256 compression function requires approximately 25,000 R1CS constraints per block, Poseidon is designed specifically for Zero-Knowledge friendliness, operating directly over the scalar field <inline-formula id="inf81">
<mml:math id="m90">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> of the BN254 curve. Our implementation utilizes a width-3 Poseidon sponge construction <inline-formula id="inf82">
<mml:math id="m91">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> with full and partial rounds optimized for 128-bit security. This reduces the circuit complexity to approximately 160 constraints per hash input.</p>
<p>For a witness <inline-formula id="inf83">
<mml:math id="m92">
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>, the circuit enforces the relationship shown in <xref ref-type="disp-formula" rid="e10">Equation 10</xref>:<disp-formula id="e10">
<mml:math id="m93">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">public</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x003D;</mml:mo>
<mml:mo>&#x003D;</mml:mo>
<mml:mo>&#x003D;</mml:mo>
<mml:mtext>Poseidon</mml:mtext>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(10)</label>
</disp-formula>
</p>
<p>This substitution reduces the proving time for the commitment component by a factor of roughly <inline-formula id="inf84">
<mml:math id="m94">
<mml:mrow>
<mml:mn>150</mml:mn>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, ensuring that the circuit remains lightweight enough for the Distributed Prover Network to process batches efficiently.</p>
</sec>
<sec id="s5-4">
<label>5.4</label>
<title>Formal construction of optimistic proof aggregation</title>
<p>To formalize the security of Algorithm 1, we define the underlying pairing checks. Standard Groth16 verification requires checking the validity equation (<xref ref-type="disp-formula" rid="e11">Equation 11</xref>):<disp-formula id="e11">
<mml:math id="m95">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(11)</label>
</disp-formula>where <inline-formula id="inf85">
<mml:math id="m96">
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> corresponds to the public input encoding. In our aggregated scheme, verifying <inline-formula id="inf86">
<mml:math id="m97">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> proofs individually would require <inline-formula id="inf87">
<mml:math id="m98">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> pairings. We reduce this to a constant number using a random linear combination protocol.</p>
<p>Let <inline-formula id="inf88">
<mml:math id="m99">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula> be a batch of proofs where <inline-formula id="inf89">
<mml:math id="m100">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>. The verifier samples a random challenge <inline-formula id="inf90">
<mml:math id="m101">
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">F</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> via the Fiat-Shamir transcript (<xref ref-type="statement" rid="Algorithm_1">Algorithm 1</xref>, Step 2). The aggregated proof <inline-formula id="inf91">
<mml:math id="m102">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> is constructed as a random linear combination (<xref ref-type="disp-formula" rid="e12">Equation 12</xref>):<disp-formula id="e12">
<mml:math id="m103">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mstyle displaystyle="true">
<mml:munderover>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
</mml:mstyle>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:mo>&#x2026;</mml:mo>
</mml:mrow>
</mml:math>
<label>(12)</label>
</disp-formula>
</p>
<p>However, simply summing <inline-formula id="inf92">
<mml:math id="m104">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf93">
<mml:math id="m105">
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> elements is insufficient due to the bilinear property. We employ an inner product argument to prove that the aggregated witness satisfies the aggregated polynomial constraints. The final on-chain verification equation (<xref ref-type="disp-formula" rid="e13">Equation 13</xref>):<disp-formula id="e13">
<mml:math id="m106">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:math>
<label>(13)</label>
</disp-formula>
</p>
<p>Soundness Argument: The security relies on the Schwartz-Zippel lemma. If any proof <inline-formula id="inf94">
<mml:math id="m107">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> in the batch is invalid, the probability that the random linear combination satisfies the pairing equation is bounded by <inline-formula id="inf95">
<mml:math id="m108">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>/</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="double-struck">F</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, where <inline-formula id="inf96">
<mml:math id="m109">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> is the degree of the polynomials. For the BN254 curve, <inline-formula id="inf97">
<mml:math id="m110">
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="double-struck">F</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x2248;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>254</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>, rendering the soundness error negligible <inline-formula id="inf98">
<mml:math id="m111">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>100</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="s5-5">
<label>5.5</label>
<title>Distributed Proving logic</title>
<p>The DPN utilizes a customized scheduler to decompose the Fast Fourier Transform (FFT) operations across the network (<xref ref-type="fig" rid="F2">Figure 2</xref>).</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Distributed Proving Logic: Decomposition of FFT and MSM tasks.</p>
</caption>
<graphic xlink:href="fbloc-09-1762781-g002.tif">
<alt-text content-type="machine-generated">Flowchart showing a master node labeled task scheduler distributing shard tasks to three workers: Worker 1 computes FFT x sub one, Worker 2 computes MSM G sub one, Worker 3 computes MSM G sub two. Outputs from all workers are sent to an aggregator, which combines polynomials to produce the final proof pi.</alt-text>
</graphic>
</fig>
<p>The Master Node acts as an orchestrator. It receives the witness <inline-formula id="inf99">
<mml:math id="m112">
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> and the Proving Key <inline-formula id="inf100">
<mml:math id="m113">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mi>K</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>. It splits the polynomial evaluation domain into <inline-formula id="inf101">
<mml:math id="m114">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> shards. Worker nodes compute the evaluations on their respective sub-domains and return the results. The Master then performs an inverse FFT (iFFT) to recover the coefficients. This map-reduce pattern allows us to scale horizontally.</p>
</sec>
<sec id="s5-6">
<label>5.6</label>
<title>Smart contract optimization (polygon zkEVM cardona)</title>
<p>VSC on testnet Chain ID 2442 optimized:<list list-type="bullet">
<list-item>
<p>Calldata vs. Memory: We force the public inputs to remain in &#x201c;calldata&#x201d; rather than copying them to &#x2018;memory&#x2019;, saving approximately 200 gas per input.</p>
</list-item>
<list-item>
<p>Static Calls: The pairing check utilizes the precompiled contract at address &#x2018;0 &#xd7; 08&#x2018;. We invoke this using low-level assembly &#x2018;staticcall&#x2019; to minimize overhead.</p>
</list-item>
<list-item>
<p>Event Emission: Instead of storing the full verification data on-chain (which is expensive SSTORE operations), we emit a &#x2018;BatchVerified&#x2019; event containing the IPFS CID. This leverages the cheaper LOG operations (375 gas &#x2b;8 gas/byte) compared to SSTORE (20,000 gas).</p>
</list-item>
</list>
</p>
</sec>
<sec id="s5-7">
<label>5.7</label>
<title>Operational algorithms</title>
<p>We implement an optimistic proof aggregation protocol using the &#x2a;&#x2a;Fiat-Shamir heuristic&#x2a;&#x2a; to generate a random linear combination of individual proofs. This replaces naive batch verification loops with a constant-time check.</p>
<p>
<statement content-type="algorithm" id="Algorithm_1">
<label>Algorithm 1</label>
<title>Optimistic proof aggregation (TeleZK-L2).</title>
<p>
<list list-type="simple">
<list-item>
<p>
<bold>Require</bold>: Batch of Proofs <inline-formula id="inf102">
<mml:math id="m115">
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a0;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</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:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</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:mrow>
</mml:math>
</inline-formula>, Public Inputs <inline-formula id="inf103">
<mml:math id="m116">
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<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:mo>,</mml:mo>
<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:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>
<bold>Ensure</bold>: Aggregate Proof <inline-formula id="inf104">
<mml:math id="m117">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>1:&#x2003;<bold>Step 1: Commitment Phase</bold>
</p>
</list-item>
<list-item>
<p>2:&#x2003;Serialize all proofs and inputs into a transcript <inline-formula id="inf105">
<mml:math id="m118">
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>3:&#x2003;<inline-formula id="inf106">
<mml:math id="m119">
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
<mml:mo>&#x2190;</mml:mo>
<mml:mtext>Keccak</mml:mtext>
<mml:mn>256</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<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:mrow>
</mml:math>
</inline-formula> <inline-formula id="inf107">
<mml:math id="m120">
<mml:mrow>
<mml:mfenced open="" close=")">
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<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:mfenced>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>4:&#x2003;<bold>Step 2: Fiat-Shamir Challenge Generation</bold>
</p>
</list-item>
<list-item>
<p>5:&#x2003;Generate random scalar <inline-formula id="inf108">
<mml:math id="m121">
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> from transcript: <inline-formula id="inf109">
<mml:math id="m122">
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo>&#x2190;</mml:mo>
<mml:mtext>HashToField</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>6:&#x2003;<bold>Step 3: Weighted Aggregation</bold>
</p>
</list-item>
<list-item>
<p>7:&#x2003;Initialize accumulators <inline-formula id="inf110">
<mml:math id="m123">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>8:&#x2003;<bold>for</bold> <inline-formula id="inf111">
<mml:math id="m124">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula> to <inline-formula id="inf112">
<mml:math id="m125">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> <bold>do</bold>
</p>
</list-item>
<list-item>
<p>9:&#x2003;&#x2003;Compute weight <inline-formula id="inf113">
<mml:math id="m126">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>10:&#x2003;&#x2003;<inline-formula id="inf114">
<mml:math id="m127">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2190;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
<mml:mi>A</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
<italic>//Elliptic Curve Addition</italic>
</p>
</list-item>
<list-item>
<p>11:&#x2003;&#x2003;<inline-formula id="inf115">
<mml:math id="m128">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2190;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>12:&#x2003;<bold>end for</bold>
</p>
</list-item>
<list-item>
<p>13:&#x2003;<bold>Step 4: Finalize</bold>
</p>
</list-item>
<list-item>
<p>14:&#x2003;Compute cross-terms <inline-formula id="inf116">
<mml:math id="m129">
<mml:mrow>
<mml:mi>Z</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> using Inner Product Argument logic</p>
</list-item>
<list-item>
<p>15:&#x2003;<inline-formula id="inf117">
<mml:math id="m130">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2190;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sum</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>Z</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>16:&#x2003;<bold>return</bold> <inline-formula id="inf118">
<mml:math id="m131">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
</list>
</p>
</statement>
</p>
</sec>
</sec>
<sec sec-type="results|discussion" id="s6">
<label>6</label>
<title>Experimental results and discussion</title>
<p>To evaluate the performance and scalability of TeleZK-L2, we conducted a series of simulations designed to replicate a regional telehealth network under varying data loads. The experiments focused on three key performance indicators (KPIs): on-chain gas consumption, system throughput (TPS), and end-to-end proof generation latency.</p>
<sec id="s6-1">
<label>6.1</label>
<title>Experimental setup</title>
<p>The simulation environment consisted of a 16-node high-performance cluster deployed on AWS.<list list-type="bullet">
<list-item>
<p>Cluster: 16<inline-formula id="inf119">
<mml:math id="m132">
<mml:mrow>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> AWS c5.4xlarge (16 vCPU, 32&#xa0;GB RAM/node); 10Gbps LAN.</p>
</list-item>
<list-item>
<p>Blockchain: Polygon zkEVM Cardona Testnet (Chain ID 2442).</p>
</list-item>
<list-item>
<p>Stack: Rust/arkworks (Groth16), Node. js (API), Solidity 0.8.19 (zkEVM).</p>
</list-item>
<list-item>
<p>Dataset: 10K synthetic vitals (HR: 60&#x2013;180 bpm, BP: 90&#x2013;140/60&#x2013;90&#xa0;mmHg, 1&#xa0;Hz).</p>
</list-item>
<list-item>
<p>Runs: 5 iterations, <inline-formula id="inf120">
<mml:math id="m133">
<mml:mrow>
<mml:mo>&#xb1;</mml:mo>
<mml:mn>5</mml:mn>
<mml:mi>%</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> (95% CI).</p>
</list-item>
</list>
</p>
</sec>
<sec id="s6-2">
<label>6.2</label>
<title>Comparative analysis</title>
<p>We benchmarked TeleZK-L2 vs. baselines (client-side Groth16, standard Polygon L2):<list list-type="order">
<list-item>
<p>Ethereum L1 (Baseline): Standard Groth16 verification on the Ethereum Mainnet, representing the highest security but highest cost verification standard.</p>
</list-item>
<list-item>
<p>Polygon Standard (L2): Groth16 verification on Polygon PoS without proof aggregation, representing a typical Layer-2 scaling approach.</p>
</list-item>
<list-item>
<p>TeleZK-L2 (Proposed): Our solution using Distributed Proving and Optimistic Proof Aggregation on Polygon zkEVM, designed for maximum scalability.</p>
</list-item>
</list>
</p>
<sec id="s6-2-1">
<label>6.2.1</label>
<title>Feature comparison</title>
</sec>
<sec id="s6-2-2">
<label>6.2.2</label>
<title>Gas cost efficiency</title>
<p>As demonstrated, the standard L2 approach exhibits linear cost growth <inline-formula id="inf121">
<mml:math id="m134">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. In contrast, TeleZK-L2 achieves near constant cost <inline-formula id="inf122">
<mml:math id="m135">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> for the on-chain verification component (<xref ref-type="fig" rid="F3">Figure 3</xref>). For a batch of 100 proofs, TeleZK-L2 incurs a gas cost of approximately 150,000 Gas (amortized), where as the standard approach would cost over 6,000,000 Gas. This represents a cost reduction of 99.97% relative to Ethereum L1 verification (<xref ref-type="table" rid="T2">Table 2</xref>).</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Gas Cost Analysis: TeleZK-L2 maintains constant gas costs regardless of batch size.</p>
</caption>
<graphic xlink:href="fbloc-09-1762781-g003.tif">
<alt-text content-type="machine-generated">Line chart comparing gas cost in 10 to the power of 5 Gwei versus batch size for Standard L2 (Linear) and TeleZK-L2 (Aggregated). Standard L2 increases linearly, while TeleZK-L2 remains nearly constant across batch sizes.</alt-text>
</graphic>
</fig>
<p>We compared TeleZK-L2 against three baselines: standard Ethereum (L1), standard Optimistic Rollups (L2), and a non-aggregated ZK Rollup.</p>
<p>As demonstrated, the standard L2 approach exhibits linear cost growth <inline-formula id="inf123">
<mml:math id="m136">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. In contrast, TeleZK-L2 achieves near constant cost <inline-formula id="inf124">
<mml:math id="m137">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> for the on-chain verification component. For a batch of 100 proofs, TeleZK-L2 incurs a gas cost of approximately 150,000 Gas (amortized), whereas the standard approach would cost over 6,000,000 Gas. This represents a cost reduction of <bold>97.5%</bold> relative to standard L2 verification, and over <bold>99.9%</bold> relative to L1 verification.</p>
<p>We compared TeleZK-L2 against three baselines: standard Ethereum (L1), standard Optimistic Rollups (L2), and a non-aggregated ZK Rollup.</p>
</sec>
<sec id="s6-2-3">
<label>6.2.3</label>
<title>Throughput and saturation analysis</title>
<p>We measured the system&#x2019;s maximum throughput (Transactions Per Second - TPS) by gradually increasing the load until the DPN saturated.</p>
<p>The 16-node DPN achieved a peak throughput of 260 TPS as shown in the saturation analysis (<xref ref-type="fig" rid="F4">Figure 4</xref>). The single-node baseline saturated at roughly 72 TPS. The saturation point in TeleZK-L2 is dictated by the network bandwidth required to shuffle the polynomial shards between the Master and Workers. This suggests that for larger deployments, optimizing the inter-node communication protocol (e.g., using UDP instead of TCP for shard transmission) could yield further gains.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Throughput comparison showing TeleZK-L2 achieving 260 TPS saturation point.</p>
</caption>
<graphic xlink:href="fbloc-09-1762781-g004.tif">
<alt-text content-type="machine-generated">Line chart titled System Throughput compares throughput in transactions per second against batch size. TeleZK-L2 with 16 nodes shows a steep throughput increase with larger batch sizes, reaching about 250 TPS at 500. The Baseline single node remains much lower, below 70 TPS across all batch sizes.</alt-text>
</graphic>
</fig>
<p>
<xref ref-type="table" rid="T3">Table 3</xref> clearly shows that the distributed nature of the framework drastically reduces the FFT and MSM computation times (<xref ref-type="table" rid="T3">Table 3</xref>), which are the mathematical bottlenecks of zk-SNARKs.</p>
<table-wrap id="T3" position="float">
<label>TABLE 3</label>
<caption>
<p>End-to-end latency breakdown (seconds) for heavy workload.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Stage</th>
<th align="center">Single prover</th>
<th align="center">16-Node DPN</th>
<th align="center">Improvement</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Circuit loading</td>
<td align="center">2.5s</td>
<td align="center">0.5s</td>
<td align="center">5x</td>
</tr>
<tr>
<td align="left">Witness generation</td>
<td align="center">15.0s</td>
<td align="center">1.2s</td>
<td align="center">12.5x</td>
</tr>
<tr>
<td align="left">FFT computation</td>
<td align="center">60.5s</td>
<td align="center">4.5s</td>
<td align="center">13.4x</td>
</tr>
<tr>
<td align="left">MSM computation</td>
<td align="center">40.0s</td>
<td align="center">3.0s</td>
<td align="center">13.3x</td>
</tr>
<tr>
<td align="left">Aggregation</td>
<td align="center">N/A</td>
<td align="center">0.3s</td>
<td align="center">-</td>
</tr>
<tr>
<td align="left">Total time</td>
<td align="center">
<bold>118.0s</bold>
</td>
<td align="center">
<bold>9.5s</bold>
</td>
<td align="center">12.4x</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn>
<p>Bold values indicate the best-performing metrics for the respective category.</p>
</fn>
</table-wrap-foot>
</table-wrap>
</sec>
<sec id="s6-2-4">
<label>6.2.4</label>
<title>On-chain verifier complexity</title>
<p>To validate the efficiency claims, weprofiled the compiled Solidity verifier, with the optimization results detailed below (<xref ref-type="table" rid="T4">Table 4</xref>).</p>
<table-wrap id="T4" position="float">
<label>TABLE 4</label>
<caption>
<p>TeleZK-L2 on-chain verifier metrics (batch size &#x3d; 100).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Metric</th>
<th align="center">Standard Groth16</th>
<th align="center">TeleZK-L2 (aggregated)</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Verifier code size</td>
<td align="center">4.2&#xa0;KB</td>
<td align="center">6.8&#xa0;KB</td>
</tr>
<tr>
<td align="left">Calldata size</td>
<td align="center">32,000 Bytes</td>
<td align="center">448 Bytes</td>
</tr>
<tr>
<td align="left">Pairing checks</td>
<td align="center">300</td>
<td align="center">4 (Constant)</td>
</tr>
<tr>
<td align="left">Gas per batch</td>
<td align="center">
<inline-formula id="inf125">
<mml:math id="m138">
<mml:mrow>
<mml:mo>&#x2248;</mml:mo>
<mml:mn>6,000,000</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center">158,400</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The aggregated verifier maintains a constant cost profile because it only performs four pairing operations regardless of batch size, checking the single aggregated proof <inline-formula id="inf126">
<mml:math id="m139">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">agg</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula> against the hashed public inputs. The slight increase in code size is due to the inclusion of the inner product argument logic, which is a one-time deployment cost.</p>
</sec>
</sec>
<sec id="s6-3">
<label>6.3</label>
<title>Energy efficiency on edge devices</title>
<p>A crucial, often overlooked aspect of IoMT security is energy consumption. Wearable devices operate on small batteries. Running a full Groth16 prover on a Raspberry Pi Zero (simulating a smart hub) consumes approximately 150 Joules per proof. In TeleZK-L2, the edge device only performs symmetric encryption (AES) and hashing (SHA-256). Our measurements show this consumes less than 5 Joules. This 30x reduction in energy consumption significantly extends the operational lifespan of battery-powered medical sensors, making the framework practical for continuous 24/7 monitoring.</p>
</sec>
<sec id="s6-4">
<label>6.4</label>
<title>Discussion</title>
<p>The results indicate that TeleZK-L2 effectively solves the scalability bottleneck that has hindered the adoption of blockchain in healthcare. The transition from linear gas growth to constant gas cost is the most significant finding. This &#x201c;amortization of trust&#x201d; means that as the network grows, the cost per user actually <italic>decreases</italic>, making it economically viable for national-scale healthcare systems.</p>
<sec id="s6-4-1">
<label>6.4.1</label>
<title>Trust assumptions in Distributed Proving</title>
<p>Unlike client-side proving where the witness never leaves the user&#x2019;s device, our Distributed Prover Network (DPN) introduces specific trust assumptions. Since the DPN workers perform the FFT and MSM operations required to generate the proof, they must access sharded segments of the witness <inline-formula id="inf127">
<mml:math id="m140">
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>We operate under a variation of the <italic>honest-but-curious</italic> model for the DPN workers. The security of the patient data relies on two factors:<list list-type="bullet">
<list-item>
<p>Data Sharding: The Master Node splits the witness vector into <inline-formula id="inf128">
<mml:math id="m141">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula> disjoint shards. Individual worker nodes only process a fraction of the computational trace. While they could theoretically collude to reconstruct the full witness, this requires simultaneous compromise of multiple distinct worker nodes.</p>
</list-item>
<list-item>
<p>Ephemeral Processing: Workers are stateless; they compute the polynomial evaluations and immediately discard the witness segments. They do not store data long-term.</p>
</list-item>
</list>
</p>
<p>However, we acknowledge that this model assumes the DPN Master node acts as a trusted dispatcher. If the Master node is compromised, patient privacy could be at risk. Future work will explore implementing the DPN inside Trusted Execution Environments (TEEs) like Intel SGX to provide hardware-level isolation for these computations.</p>
</sec>
<sec id="s6-4-2">
<label>6.4.2</label>
<title>Cryptographic dependencies and the trusted setup</title>
<p>A significant security consideration for TeleZK-L2 is its reliance on the Groth16 proving scheme, which requires a trusted setup phase to generate the Structured Reference String (SRS). In a healthcare context, this introduces a &#x201c;toxic waste&#x201d; risk: if the entropy used to generate the setup is not destroyed, a malicious entity could forge validity proofs for fake medical data, compromising the integrity of the diagnostic system.</p>
<p>To mitigate this, we propose that the setup ceremony be conducted via a Multi-Party Computation (MPC) modeled after the &#x201c;Powers of Tau&#x201d; protocol. This ceremony would be distributed across competing stakeholders (e.g., healthcare providers, insurance auditors, and regulatory bodies). Security holds as long as at least one participant acts honestly and destroys their randomness. Furthermore, the resulting verification keys are hardcoded into the immutable smart contract to prevent key substitution attacks.</p>
<p>While newer &#x201c;transparent&#x201d; SNARKs (like STARKs or Halo2) eliminate this trust assumption entirely, they currently incur higher on-chain gas costs due to larger proof sizes (approx. 20KB vs. Groth16&#x2019;s 200B). Therefore, Groth16 remains the pragmatic choice for cost-constrained Layer-2 environments, provided the setup ceremony is rigorously audited.</p>
</sec>
</sec>
</sec>
<sec sec-type="conclusion" id="s7">
<label>7</label>
<title>Conclusion</title>
<p>This paper presented TeleZK-L2, a scalable framework for privacy-preserving telehealth verification. By combining a distributed prover network with Polygon Layer-2 rollups, we achieved a 40% reduction in proof generation time compared to baseline clusters and a 12<inline-formula id="inf129">
<mml:math id="m142">
<mml:mrow>
<mml:mo>&#xd7;</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> speedup compared to single nodes. The extensive simulation results confirm that TeleZK-L2 is ready for high-throughput environments, offering a robust solution to the conflict between data utility and patient privacy.</p>
<p>Future work will focus on two key areas to further harden the system. First, we aim to implement the Distributed Prover Network (DPN) within Trusted Execution Environments (TEEs), such as Intel SGX, to mitigate the honest-but-curious trust assumptions associated with worker nodes. Second, we will explore the migration from Groth16 to transparent SNARK protocols (e.g., Halo2 or STARKs) to eliminate the trusted setup requirement entirely, as Layer-2 verification costs continue to decrease.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s8">
<title>Data availability statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec sec-type="author-contributions" id="s9">
<title>Author contributions</title>
<p>PJ: Conceptualization, Data curation, Investigation, Methodology, Writing &#x2013; original draft. RD: Funding acquisition, Software, Supervision, Validation, Writing &#x2013; review and editing.</p>
</sec>
<sec sec-type="COI-statement" id="s11">
<title>Conflict of interest</title>
<p>The author(s) declared that this work was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="ai-statement" id="s12">
<title>Generative AI statement</title>
<p>The author(s) declared that generative AI was not used in the creation of this manuscript.</p>
<p>Any alternative text (alt text) provided alongside figures in this article has been generated by Frontiers with the support of artificial intelligence and reasonable efforts have been made to ensure accuracy, including review by the authors wherever possible. If you identify any issues, please contact us.</p>
</sec>
<sec sec-type="disclaimer" id="s13">
<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">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ben-Sasson</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Chiesa</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Garman</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Green</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Miers</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Tromer</surname>
<given-names>E.</given-names>
</name>
<etal/>
</person-group> (<year>2014</year>). <article-title>Zerocash: decentralized anonymous payments from bitcoin</article-title>. <source>IEEE Symposium Secur. Priv.</source>, <fpage>459</fpage>&#x2013;<lpage>474</lpage>. <pub-id pub-id-type="doi">10.1109/SP.2014.13</pub-id>
</mixed-citation>
</ref>
<ref id="B2">
<mixed-citation publication-type="journal">
<collab>European Union</collab> (<year>2016</year>). <article-title>Regulation (EU) 2016/679 of the European parliament and of the council (general data protection regulation)</article-title>. <source>Official J. Eur. Union</source> <volume>L119</volume>, <fpage>1</fpage>&#x2013;<lpage>88</lpage>.</mixed-citation>
</ref>
<ref id="B3">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Fan</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Ren</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>MedBlock: efficient and secure medical data sharing Via blockchain</article-title>. <source>J. Med. Syst.</source> <volume>42</volume> (<issue>8</issue>), <fpage>1</fpage>&#x2013;<lpage>11</lpage>. <pub-id pub-id-type="doi">10.1007/s10916-018-0993-7</pub-id>
<pub-id pub-id-type="pmid">29931655</pub-id>
</mixed-citation>
</ref>
<ref id="B4">
<mixed-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Gailly</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Maller</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Nitulescu</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2022</year>). &#x201c;<article-title>SnarkPack: practical SNARK aggregation</article-title>,&#x201d; in <source>Financial cryptography and data security</source> (<publisher-name>Springer</publisher-name>), <fpage>203</fpage>&#x2013;<lpage>229</lpage>.</mixed-citation>
</ref>
<ref id="B5">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Groth</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>On the size of pairing-based non-interactive arguments</article-title>.&#x201d;<source>Adv. Cryptol. &#x2013; EUROCRYPT</source> <fpage>305</fpage>&#x2013;<lpage>326</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-662-49896-511</pub-id>
</mixed-citation>
</ref>
<ref id="B6">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kumar</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Tiwari</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Zymbler</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2023</year>). <article-title>Internet of things is a revolutionary approach for future technology enhancement: a review</article-title>. <source>J. Big Data</source> <volume>6</volume> (<issue>1</issue>), <fpage>1</fpage>&#x2013;<lpage>21</lpage>. <pub-id pub-id-type="doi">10.1186/s40537-019-0268-2</pub-id>
</mixed-citation>
</ref>
<ref id="B7">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Politou</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Alepis</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Patsakis</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Forgetting personal data and revoking consent under the GDPR: challenges and proposed solutions</article-title>. <source>J. Cybersecurity</source> <volume>4</volume> (<issue>1</issue>), <fpage>tyy001</fpage>. <pub-id pub-id-type="doi">10.1093/cybsec/tyy001</pub-id>
</mixed-citation>
</ref>
<ref id="B8">
<mixed-citation publication-type="web">
<collab>Polygon Labs</collab> (<year>2023</year>). <article-title>Polygon zkEVM: scalable ethereum with zero-knowledge rollups</article-title>. <comment>Available online at: <ext-link ext-link-type="uri" xlink:href="https://polygon.technology/polygon-zkevm">https://polygon.technology/polygon-zkevm</ext-link>.</comment>
</mixed-citation>
</ref>
<ref id="B9">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rahman</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Al-Shaer</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>ZeroMed: zero knowledge for medical data sharing and verification</article-title>. <source>IEEE Internet Things J.</source> <volume>7</volume> (<issue>10</issue>), <fpage>9872</fpage>&#x2013;<lpage>9883</lpage>. <pub-id pub-id-type="doi">10.1109/JIOT.2020.2990057</pub-id>
</mixed-citation>
</ref>
<ref id="B10">
<mixed-citation publication-type="book">
<collab>Scalability, Security, and Decentralization</collab> (<year>2017</year>). <source>The blockchain trilemma</source>. <publisher-name>Ethereum Foundation Blog</publisher-name>. <comment>Available online at: <ext-link ext-link-type="uri" xlink:href="https://ethereum.org/en/developers/docs/scaling/">https://ethereum.org/en/developers/docs/scaling/</ext-link>.</comment>
</mixed-citation>
</ref>
<ref id="B11">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Williams</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Haughton</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>The rising threat of ransomware in the healthcare sector: analysis and mitigation strategies</article-title>. <source>Cybersecurity Priv. J.</source> <volume>4</volume> (<issue>2</issue>), <fpage>112</fpage>&#x2013;<lpage>128</lpage>.</mixed-citation>
</ref>
<ref id="B12">
<mixed-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xu</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Xue</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Tian</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Hong</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hong</surname>
<given-names>P.</given-names>
</name>
<etal/>
</person-group> (<year>2019</year>). <article-title>HealthChain: a privacy-preserving scheme for smart healthcare system based on blockchain</article-title>. <source>IEEE Internet Things J.</source> <volume>6</volume> (<issue>5</issue>), <fpage>8285</fpage>&#x2013;<lpage>8296</lpage>. <pub-id pub-id-type="doi">10.1109/JIOT.2019.2913861</pub-id>
</mixed-citation>
</ref>
</ref-list>
<fn-group>
<fn fn-type="custom" custom-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/3119047/overview">Hossein Abroshan</ext-link>, Anglia Ruskin University School of Computing and Information Science, United Kingdom</p>
</fn>
<fn fn-type="custom" custom-type="reviewed-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2592731/overview">Nader Sohrabi Safa</ext-link>, University of Worcester, United Kingdom</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/3316226/overview">Christoph Jungbauer</ext-link>, University of Vienna, Austria</p>
</fn>
</fn-group>
</back>
</article>