roadmap/vac/acz/rlnp2p/waku/rln-relay-enhancements.html

153 lines
20 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html><head><title>Waku RLN-RELAY Enhancements Details</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="Waku RLN-RELAY Enhancements Details"/><meta property="og:description" content="vac:acz:rlnp2p::waku:rln-relay-enhancements § %%{ init: { &amp;#039;theme&amp;#039;: &amp;#039;base&amp;#039;, &amp;#039;themeVariables&amp;#039;: { &amp;#039;primaryColor&amp;#039;: &amp;#039;#BB2528&amp;#039;, &amp;#039;primaryTextColor&amp;#039;: &amp;#039;#fff&amp;#039;, &amp;#039;primaryBorderColor&amp;#039;: &amp;#039;#7C0000&amp;#039;, &amp;#039;lineColor&amp;#039;: &amp;#039;#F8B229&amp;#039;, &amp;#039;secondaryColor&amp;#039;: &amp;#039;#006100&amp;#039;, &amp;#039;tertiaryColor&amp;#039;: &amp;#039;#fff&amp;#039; } } }%% gantt dateFormat YYYY-MM-DD section rlnp2p-waku RLN-RELAY enhancements :, 2023-06-01, 2023-09-30 due: 2023/09/30 status: 100% Description § simple membership management setup (fixed CC list) instruction on how to register to the membership set / setup up (for Waku CCs) Goal § Run RLN relay on the Waku production fleet."/><meta property="og:image" content="https://roadmap.logos.co/static/og-image.png"/><meta property="og:width" content="1200"/><meta property="og:height" content="675"/><link rel="icon" href="../../../../static/icon.png"/><meta name="description" content="vac:acz:rlnp2p::waku:rln-relay-enhancements § %%{ init: { &amp;#039;theme&amp;#039;: &amp;#039;base&amp;#039;, &amp;#039;themeVariables&amp;#039;: { &amp;#039;primaryColor&amp;#039;: &amp;#039;#BB2528&amp;#039;, &amp;#039;primaryTextColor&amp;#039;: &amp;#039;#fff&amp;#039;, &amp;#039;primaryBorderColor&amp;#039;: &amp;#039;#7C0000&amp;#039;, &amp;#039;lineColor&amp;#039;: &amp;#039;#F8B229&amp;#039;, &amp;#039;secondaryColor&amp;#039;: &amp;#039;#006100&amp;#039;, &amp;#039;tertiaryColor&amp;#039;: &amp;#039;#fff&amp;#039; } } }%% gantt dateFormat YYYY-MM-DD section rlnp2p-waku RLN-RELAY enhancements :, 2023-06-01, 2023-09-30 due: 2023/09/30 status: 100% Description § simple membership management setup (fixed CC list) instruction on how to register to the membership set / setup up (for Waku CCs) Goal § Run RLN relay on the Waku production fleet."/><meta name="generator" content="Logos Roadmaps"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com"/><link href="../../../../index.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://fonts.googleapis.com/css2?family=IBM Plex Mono&amp;family=sans-serif:wght@400;700&amp;family=sans-serif:ital,wght@0,400;0,600;1,400;1,600&amp;display=swap" rel="stylesheet" type="text/css" spa-preserve/><script src="../../../../prescript.js" type="application/javascript" spa-preserve></script><script type="application/javascript" spa-preserve>const fetchData = fetch(`../../../../static/contentIndex.json`).then(data => data.json())</script></head><body data-slug="vac/acz/rlnp2p/waku/rln-relay-enhancements"><div id="quartz-root" class="page"><div id="quartz-body"><div class="left sidebar"><h1 class="page-title"><a href="../../../..">Logos Collective Project Roadmaps</a></h1><div class="spacer mobile-only"></div><div class="search"><div id="search-icon"><p>Search</p><div></div><svg tabIndex="0" aria-labelledby="title desc" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title id="title">Search</title><desc id="desc">Search</desc><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"></path><circle cx="8" cy="8" r="7"></circle></g></svg></div><div id="search-container"><div id="search-space"><input autocomplete="off" id="search-bar" name="search" type="text" aria-label="Search for something" placeholder="Search for something"/><div id="results-container"></div></div></div></div><div class="darkmode"><input class="toggle" id="darkmode-toggle" type="checkbox" tabIndex="-1"/><label id="toggle-label-light" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xmlSpace="preserve"><title>Light mode</title><path d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z"></path></svg></label><label id="toggle-label-dark" for="darkmode-toggle" tabIndex="-1"><svg xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background='new 0 0 100 100'" xmlSpace="preserve"><title>Dark mode</title><path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65 c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z"></path></svg></label></div><div class="toc desktop-only"><button type="button" id="toc"><h3>Table of Contents</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="toc-content"><ul class="overflow"><li class="depth-0"><a href="#vacaczrlnp2pwakurln-relay-enhancements" data-for="vacaczrlnp2pwakurln-relay-enhancements">vac:acz:rlnp2p::waku:rln-relay-enhancements</a></li><li class="depth-1"><a href="#description" data-for="description">Description</a></li><li class="depth-1"><a href="#info" data-for="info">Info</a></li><li class="depth-0"><a href="#20230904---20230911" data-for="20230904---20230911">2023/09/04 - 2023/09/11</a></li><li class="depth-0"><a href="#20230828---20230904" data-for="20230828---20230904">2023/08/28 - 2023/09/04</a></li><li class="depth-1"><a href="#deliverables" data-for="deliverables">Deliverables</a></li></ul></div></div></div><div class="center"><div class="page-header"><div class="popover-hint"><h1 class="article-title">Waku RLN-RELAY Enhancements Details</h1><p class="content-meta">Sep 18, 2023, 3 min read</p></div></div><article class="popover-hint"><h2 id="vacaczrlnp2pwakurln-relay-enhancements"><code>vac:acz:rlnp2p::waku:rln-relay-enhancements</code><a aria-hidden="true" tabindex="-1" href="#vacaczrlnp2pwakurln-relay-enhancements" class="internal"> §</a></h2>
<hr/>
<pre><code class="mermaid">%%{
init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#BB2528',
'primaryTextColor': '#fff',
'primaryBorderColor': '#7C0000',
'lineColor': '#F8B229',
'secondaryColor': '#006100',
'tertiaryColor': '#fff'
}
}
}%%
gantt
dateFormat YYYY-MM-DD
section rlnp2p-waku
RLN-RELAY enhancements :, 2023-06-01, 2023-09-30
</code></pre>
<ul>
<li>due: 2023/09/30</li>
<li>status: 100%</li>
</ul>
<h3 id="description">Description<a aria-hidden="true" tabindex="-1" href="#description" class="internal"> §</a></h3>
<ul>
<li>simple membership management setup (fixed CC list)</li>
<li>instruction on how to register to the membership set / setup up (for Waku CCs)</li>
</ul>
<h4 id="goal">Goal<a aria-hidden="true" tabindex="-1" href="#goal" class="internal"> §</a></h4>
<p>Run RLN relay on the Waku production fleet. Waku CCs can use it</p>
<h3 id="info">Info<a aria-hidden="true" tabindex="-1" href="#info" class="internal"> §</a></h3>
<h2 id="20230904---20230911">2023/09/04 - 2023/09/11<a aria-hidden="true" tabindex="-1" href="#20230904---20230911" class="internal"> §</a></h2>
<ul>
<li>if only one key exists in the keystore, use it - <a href="https://github.com/waku-org/nwaku/pull/1984" class="external">1984</a></li>
<li>fix log levels for some logs - <a href="https://github.com/waku-org/nwaku/pull/1986" class="external">1986</a></li>
<li>updated documentation for rln-relay - <a href="https://github.com/waku-org/nwaku/pull/1993" class="external">1993</a></li>
<li>clean nullifier table every <code>MaxEpochGap</code> - <a href="https://github.com/waku-org/nwaku/pull/1994" class="external">1994</a></li>
<li>created <code>rln_db_inspector</code> tool, allows inspection into merkle tree structure - <a href="https://github.com/waku-org/nwaku/pull/1999" class="external">1999</a>, <a href="https://github.com/waku-org/nwaku/pull/2012" class="external">2012</a></li>
<li>fixed missing memberships between history sync and new memberships sync with @alrevuelta - <a href="https://github.com/waku-org/nwaku/pull/2015" class="external">2015</a></li>
<li>remove <code>rln</code> from wakus experimental features - <a href="https://github.com/waku-org/nwaku/pull/2001" class="external">2001</a></li>
<li>fix metric calculation for registered members - <a href="https://github.com/waku-org/nwaku/pull/2018" class="external">2018</a></li>
<li>uups proxy for waku-rln-registry - <a href="https://github.com/waku-org/waku-rln-contract/pull/9" class="external">9</a></li>
</ul>
<h2 id="20230828---20230904">2023/08/28 - 2023/09/04<a aria-hidden="true" tabindex="-1" href="#20230828---20230904" class="internal"> §</a></h2>
<ul>
<li>rln was enabled by default in the Makefile - fixed - <a href="https://github.com/waku-org/nwaku/pull/1964" class="external">1964</a></li>
<li>ordered pubsub validator execution - <a href="https://github.com/waku-org/nwaku/pull/1966" class="external">1966</a></li>
<li>fixed deserialization of valid merkle roots - <a href="https://github.com/waku-org/nwaku/pull/1973" class="external">1973</a></li>
<li>confirm that the fetched credential from the keystore is registered to the membership set - <a href="https://github.com/waku-org/nwaku/pull/1980" class="external">1980</a></li>
<li>fixed makefile target for zerokits <code>librln.a</code> - <a href="https://github.com/waku-org/nwaku/pull/1981" class="external">1981</a></li>
<li>converted zero-based indexing to 1-based indexing on vacp2p/rln-contract - <a href="https://github.com/vacp2p/rln-contract/pull/28" class="external">28</a></li>
<li>downstreamed zero-based indexing to waku-org/waku-rln-contract - <a href="https://github.com/waku-org/waku-rln-contract/pull/8" class="external">8</a> -</li>
<li>deployed new version of the registry contract on sepolia - <code>0xc04937d502E0ae671cedFC2A0BCD6692055520f3</code></li>
</ul>
<h4 id="20230821---20230828">2023/08/21 - 2023/08/28<a aria-hidden="true" tabindex="-1" href="#20230821---20230828" class="internal"> §</a></h4>
<ul>
<li>tree metadata should include chainId and contractAddress - <a href="https://github.com/waku-org/nwaku/pull/1932" class="external">1932</a></li>
<li>set flush_interval appropriately -<a href="https://github.com/waku-org/nwaku/pull/1933" class="external">1933</a></li>
<li>integrate new WakuRlnRegistry contract - <a href="https://github.com/waku-org/nwaku/pull/1943" class="external">1943</a></li>
<li>bump zerokit to v0.3.2</li>
<li><a href="https://github.com/waku-org/nwaku/pull/1951" class="external">1951</a></li>
<li>tree metadata should include window of roots - <a href="https://github.com/waku-org/nwaku/pull/1953" class="external">1953</a></li>
<li>sync tree state from contract deployed block number - <a href="https://github.com/waku-org/nwaku/pull/1955" class="external">1955</a></li>
<li>optimization to waku_keystore - <a href="https://github.com/waku-org/nwaku/pull/1956" class="external">1956</a></li>
<li>fixed a forceProgression bug in the WakuRlnRegistry contract - <a href="https://github.com/waku-org/waku-rln-contract/pull/6" class="external">6</a></li>
</ul>
<h4 id="20230814---20230821">2023/08/14 - 2023/08/21<a aria-hidden="true" tabindex="-1" href="#20230814---20230821" class="internal"> §</a></h4>
<ul>
<li>rpc handler for waku rln relay - <a href="https://github.com/waku-org/nwaku/pull/1852" class="external">1852</a></li>
<li>fixed ganaches change in method to manage subprocesses, fixed timeouts related to it - <a href="https://github.com/waku-org/nwaku/pull/1913" class="external">1913</a></li>
<li>should error out on rln-relay mount failure - <a href="https://github.com/waku-org/nwaku/pull/1904" class="external">1904</a></li>
<li>fixed invalid start index being used in rln-relay - <a href="https://github.com/waku-org/nwaku/pull/1915" class="external">1915</a></li>
<li>constrain the values that can be used as idCommitments in the rln-contract - <a href="https://github.com/vacp2p/rln-contract/pull/26" class="external">26</a></li>
<li>assist with waku-simulator testing</li>
<li>remove registration capabilities from nwaku, it should be done out of band - <a href="https://github.com/waku-org/nwaku/pull/1916" class="external">1916</a></li>
<li>add deployedBlockNumber to the rln-contract for ease of fetching events from the client - <a href="https://github.com/vacp2p/rln-contract/pull/27" class="external">27</a></li>
</ul>
<h4 id="20230807---20230814">2023/08/07 - 2023/08/14<a aria-hidden="true" tabindex="-1" href="#20230807---20230814" class="internal"> §</a></h4>
<ul>
<li>Created tracking issue to manage status of this milestone - <a href="https://github.com/waku-org/nwaku/issues/1906" class="external">1906</a></li>
</ul>
<h4 id="20230731---20230807">2023/07/31 - 2023/08/07<a aria-hidden="true" tabindex="-1" href="#20230731---20230807" class="internal"> §</a></h4>
<ul>
<li><a href="https://github.com/waku-org/waku-rln-contract/pull/3" class="external">Waku RLN contract registry</a></li>
<li><a href="https://github.com/waku-org/nwaku/pull/1867" class="external">Mark duplicated messages as spam</a></li>
<li><a href="https://github.com/waku-org/nwaku/pull/1884" class="external">Use <code>waku-org/waku-rln-contract</code> as a submodule in <code>nwaku</code></a></li>
</ul>
<h3 id="deliverables">Deliverables<a aria-hidden="true" tabindex="-1" href="#deliverables" class="internal"> §</a></h3>
<ul>
<li><a href="https://github.com/waku-org/nwaku/issues/1906" class="external">1906</a></li>
</ul></article></div><div class="right sidebar"><div class="graph"><h3>Graph View</h3><div class="graph-outer"><div id="graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:1,&quot;scale&quot;:1.1,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1}"></div><svg version="1.1" id="global-graph-icon" xmlns="http://www.w3.org/2000/svg" xmlnsXlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 55 55" fill="currentColor" xmlSpace="preserve"><path d="M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17
s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4
c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562
C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829
c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91
v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4
s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665
C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2
S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4
s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2
s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z"></path></svg></div><div id="global-graph-outer"><div id="global-graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:-1,&quot;scale&quot;:0.9,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.6,&quot;opacityScale&quot;:1}"></div></div></div><div class="backlinks"><h3>Backlinks</h3><ul class="overflow"><li><a href="../../../../vac/acz/" class="internal">Applied Cryptography and Zero-knowledge Service Unit</a></li><li><a href="../../../../vac/acz/rlnp2p/waku/rln-relay-enhancements_02" class="internal">Waku RLN-RELAY Enhancements 02</a></li></ul></div></div></div><footer><hr/><p>Created by Logos with <a href="https://quartz.jzhao.xyz/">Quartz v4.0.8</a>, © 2023</p><ul><li><a href="https://github.com/logos-co/roadmap">GitHub</a></li><li><a href="https://discord.com/invite/logos-state">Discord Community</a></li></ul></footer></div></body><script type="application/javascript">// quartz/components/scripts/quartz/components/scripts/callout.inline.ts
function toggleCallout() {
const outerBlock = this.parentElement;
outerBlock.classList.toggle(`is-collapsed`);
const collapsed = outerBlock.classList.contains(`is-collapsed`);
const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight;
outerBlock.style.maxHeight = height + `px`;
let current = outerBlock;
let parent = outerBlock.parentElement;
while (parent) {
if (!parent.classList.contains(`callout`)) {
return;
}
const collapsed2 = parent.classList.contains(`is-collapsed`);
const height2 = collapsed2 ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight;
parent.style.maxHeight = height2 + `px`;
current = parent;
parent = parent.parentElement;
}
}
function setupCallout() {
const collapsible = document.getElementsByClassName(
`callout is-collapsible`
);
for (const div of collapsible) {
const title = div.firstElementChild;
if (title) {
title.removeEventListener(`click`, toggleCallout);
title.addEventListener(`click`, toggleCallout);
const collapsed = div.classList.contains(`is-collapsed`);
const height = collapsed ? title.scrollHeight : div.scrollHeight;
div.style.maxHeight = height + `px`;
}
}
}
document.addEventListener(`nav`, setupCallout);
window.addEventListener(`resize`, setupCallout);
</script><script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark'
mermaid.initialize({
startOnLoad: false,
securityLevel: 'loose',
theme: darkMode ? 'dark' : 'default'
});
document.addEventListener('nav', async () => {
await mermaid.run({
querySelector: '.mermaid'
})
});
</script><script src="https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js" type="application/javascript"></script><script src="../../../../postscript.js" type="module"></script></html>