roadmap/vac/updates/2023-09-04.html

293 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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>2023-09-04 Vac weekly</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="2023-09-04 Vac weekly"/><meta property="og:description" content="Vac 2023/09/04 § Vac Milestones Vac Github Repos vac:p2p: § nimlibp2p:vac:gossipsub-ddos-mitigation Opened upstream discussion about gossipsub peer exchange (which is a DDoS vector) 570 nimlibp2p:vac:webrtc-transport Hitting roadblocks on DTLS vac:tke:: § codex:economic-analysis Presenting Filecoin findings to Codex team Litepaper: assumptions on collateral status:SNT-staking Highlighted multiple design requirements not met by SC implementation for SC team notion doc Open questions w/ John, epoch duration Staking governance proposal for when John returns Sep 12 nomos:economic-analysis Delegated staking specifications w/Marcin, update for privacy constraints Bribery attacks analysis, Moh asked to followup early/mid Sep waku:economic-analysis Formalized RLN thoughts shared w/ Aaryamann, will push for additional feedback once Martin returns vac:dst: § analysis:nomos:nomos-simulation-analysis Took over data generation on Tuesday Found a bug in simulations, working around it The comparison runs are now fully automated got the first full set of comparison plots: everything appears to be explainable for a fixed probability Tree runs now scale to 15k nodes wakurtosis:vac:retrospective-rlog Gather info and wrote summary of why we decided to stop using Kurtosis."/><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 2023/09/04 § Vac Milestones Vac Github Repos vac:p2p: § nimlibp2p:vac:gossipsub-ddos-mitigation Opened upstream discussion about gossipsub peer exchange (which is a DDoS vector) 570 nimlibp2p:vac:webrtc-transport Hitting roadblocks on DTLS vac:tke:: § codex:economic-analysis Presenting Filecoin findings to Codex team Litepaper: assumptions on collateral status:SNT-staking Highlighted multiple design requirements not met by SC implementation for SC team notion doc Open questions w/ John, epoch duration Staking governance proposal for when John returns Sep 12 nomos:economic-analysis Delegated staking specifications w/Marcin, update for privacy constraints Bribery attacks analysis, Moh asked to followup early/mid Sep waku:economic-analysis Formalized RLN thoughts shared w/ Aaryamann, will push for additional feedback once Martin returns vac:dst: § analysis:nomos:nomos-simulation-analysis Took over data generation on Tuesday Found a bug in simulations, working around it The comparison runs are now fully automated got the first full set of comparison plots: everything appears to be explainable for a fixed probability Tree runs now scale to 15k nodes wakurtosis:vac:retrospective-rlog Gather info and wrote summary of why we decided to stop using Kurtosis."/><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/updates/2023-09-04"><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="#vac-20230904" data-for="vac-20230904">Vac 2023/09/04</a></li><li class="depth-1"><a href="#vacp2p" data-for="vacp2p">vac:p2p:</a></li><li class="depth-1"><a href="#vactke" data-for="vactke">vac:tke::</a></li><li class="depth-1"><a href="#vacdst" data-for="vacdst">vac:dst:</a></li><li class="depth-1"><a href="#vacsc" data-for="vacsc">vac:sc::</a></li><li class="depth-1"><a href="#vacacz" data-for="vacacz">vac:acz:</a></li><li class="depth-1"><a href="#vaczkvm" data-for="vaczkvm">vac:zkvm:</a></li><li class="depth-1"><a href="#vacdr" data-for="vacdr">vac:dr:</a></li><li class="depth-1"><a href="#vacrfcrfc" data-for="vacrfcrfc">vac:rfc:rfc:</a></li></ul></div></div></div><div class="center"><div class="page-header"><div class="popover-hint"><h1 class="article-title">2023-09-04 Vac weekly</h1><p class="content-meta">Sep 04, 2023, 4 min read</p><ul class="tags"><li><a href="../../tags/vac-updates" class="internal tag-link">#vac-updates</a></li></ul></div></div><article class="popover-hint"><h2 id="vac-20230904">Vac 2023/09/04<a aria-hidden="true" tabindex="-1" href="#vac-20230904" class="internal"> §</a></h2>
<ul>
<li><a href="https://www.notion.so/Vac-Roadmap-907df7eeac464143b00c6f49a20bb632" class="external">Vac Milestones</a></li>
<li><a href="https://www.notion.so/Vac-Repositories-75f7feb3861048f897f0fe95ead08b06" class="external">Vac Github Repos</a></li>
</ul>
<h3 id="vacp2p">vac:p2p:<a aria-hidden="true" tabindex="-1" href="#vacp2p" class="internal"> §</a></h3>
<ul>
<li><code>nimlibp2p:vac:gossipsub-ddos-mitigation</code>
<ul>
<li>Opened upstream discussion about gossipsub peer exchange (which is a DDoS vector) <a href="https://github.com/libp2p/specs/issues/570" class="external">570</a></li>
</ul>
</li>
<li><code>nimlibp2p:vac:webrtc-transport</code>
<ul>
<li>Hitting roadblocks on DTLS</li>
</ul>
</li>
</ul>
<h3 id="vactke">vac:tke::<a aria-hidden="true" tabindex="-1" href="#vactke" class="internal"> §</a></h3>
<ul>
<li><code>codex:economic-analysis</code>
<ul>
<li>Presenting Filecoin findings to Codex team</li>
<li>Litepaper: assumptions on collateral</li>
</ul>
</li>
<li><code>status:SNT-staking</code>
<ul>
<li>Highlighted multiple design requirements not met by SC implementation for SC team <a href="https://www.notion.so/Implementing-SNT-Staking-Contract-Issues-Differences-2de74e7c19124e78b1c9490300a84422" class="external">notion doc</a></li>
<li>Open questions w/ John, epoch duration</li>
<li>Staking governance proposal for when John returns Sep 12</li>
</ul>
</li>
<li><code>nomos:economic-analysis</code>
<ul>
<li>Delegated staking specifications w/Marcin, update for privacy constraints</li>
<li>Bribery attacks analysis, Moh asked to followup early/mid Sep</li>
</ul>
</li>
<li><code>waku:economic-analysis</code>
<ul>
<li>Formalized RLN thoughts shared w/ Aaryamann, will push for additional feedback once Martin returns</li>
</ul>
</li>
</ul>
<h3 id="vacdst">vac:dst:<a aria-hidden="true" tabindex="-1" href="#vacdst" class="internal"> §</a></h3>
<ul>
<li><code>analysis:nomos:nomos-simulation-analysis</code>
<ul>
<li>Took over data generation on Tuesday</li>
<li>Found a bug in simulations, working around it</li>
<li>The comparison runs are now fully automated</li>
<li>got the first full set of comparison plots: everything appears to be explainable for a fixed probability</li>
<li>Tree runs now scale to 15k nodes</li>
</ul>
</li>
<li><code>wakurtosis:vac:retrospective-rlog</code>
<ul>
<li>Gather info and wrote summary of why we decided to stop using Kurtosis.</li>
</ul>
</li>
<li><code>10ksim:vac:10ksim-bandwidth-test</code>
<ul>
<li>Code diagrams + structurization</li>
<li>Chats with Ben (Codex)</li>
</ul>
</li>
<li><code>wakurtosis:nomos:ci-integration_02</code>
<ul>
<li>(hold for now, since we drop Kurtosis; will continue in November once we have the new 10k simulator tool)</li>
</ul>
</li>
<li><code>software-testing:waku:test-plans</code>
<ul>
<li>Added test plans for filter, lightpush and store: <a href="https://www.notion.so/Test-Plans-09c8c7b7f6784c459fb774792665e37c" class="external">Test-Plans-09c8c7b7f6784c459fb774792665e37c</a></li>
</ul>
</li>
<li><code>software-testing:waku:test-automation-js-waku</code>
<ul>
<li>Made it possible to choose the nwaku version in the js waku github actions workflow by using workflow_dispatch inputs. <a href="https://github.com/waku-org/js-waku/pull/1510" class="external">PR Link</a></li>
</ul>
</li>
</ul>
<h3 id="vacsc">vac:sc::<a aria-hidden="true" tabindex="-1" href="#vacsc" class="internal"> §</a></h3>
<ul>
<li><code>vac:secureum-upskilling</code>
<ul>
<li>No progress; busy with <code>CommunityTokenDeployer</code> contract</li>
</ul>
</li>
<li><code>status:community-contracts-maintenance</code>
<ul>
<li>Gas optimizations in token contracts
<ul>
<li>Custom errors vs require string messages <a href="https://github.com/status-im/communities-contracts/pull/3" class="external">PR</a></li>
<li>Usage of <code>immutable</code> properties <a href="https://github.com/status-im/communities-contracts/pull/5" class="external">PR</a></li>
</ul>
</li>
</ul>
</li>
<li><code>status:community-contracts-deployer</code>
<ul>
<li>Implemented <code>CommunityTokenDeployer</code>
<ul>
<li>Includes tests and docs</li>
<li><a href="https://github.com/status-im/communities-contracts/pull/2" class="external">Pull requests</a></li>
<li>Ran into a contract size issue; Context <a href="https://github.com/status-im/communities-contracts/pull/2#issuecomment-1705063304" class="external">comment</a></li>
</ul>
</li>
<li>Added docs for commuity token deployer contract
<ul>
<li><a href="https://github.com/status-im/communities-contracts/pull/4" class="external">Pull Request</a></li>
</ul>
</li>
</ul>
</li>
<li><code>status:governance-contract-mvp</code>
<ul>
<li>ERC2470 ressurection
<ul>
<li>Updated to latest solidity</li>
<li>Implemented error checking for “already deployed” (saves gas in case of user error)</li>
<li>Implemented error checking for “successful deploy” (forces gas estimation to successful deploy scenario)</li>
<li>In progress upgrade on solidity compiler new outputs (from 0.5.11=>0.8.x)</li>
</ul>
</li>
<li>Research on delegation vs staking contract</li>
</ul>
</li>
</ul>
<h3 id="vacacz">vac:acz:<a aria-hidden="true" tabindex="-1" href="#vacacz" class="internal"> §</a></h3>
<ul>
<li><code>rlnp2p:waku:membership-management</code>
<ul>
<li>fixed makefile target for <code>rln-keystore-generator</code> - <a href="https://github.com/waku-org/nwaku/pull/1960" class="external">1960</a></li>
<li>log the membership index out upon registration in the <code>rln-keystore-generator</code> - <a href="https://github.com/waku-org/nwaku/pull/1963" class="external">1963</a></li>
</ul>
</li>
<li><code>rlnp2p:waku:rln-relay-enhancments</code>
<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>
</li>
<li><code>zerokit:vac:zerokit-v0.4</code>
<ul>
<li>Merged a PR to deal with <code>message_id</code> range check <a href="https://github.com/vacp2p/zerokit/pull/210" class="external">210</a></li>
<li>researched <code>tree_size</code> issue for the 0.4 release</li>
<li>researched <code>idCommitment/rateCommitment</code> issue for the 0.4 release</li>
</ul>
</li>
</ul>
<h3 id="vaczkvm">vac:zkvm:<a aria-hidden="true" tabindex="-1" href="#vaczkvm" class="internal"> §</a></h3>
<ul>
<li><code>proofsystems:vac:research-existing-proof-systems</code>
<ul>
<li>[blog post] (<a href="https://vac.dev/rlog/Nescience-A-zkVM-leveraging-hiding-properties" class="external">Nescience-A-zkVM-leveraging-hiding-properties</a>)</li>
<li>Researched ways to achieve Goal2 and Goal3 for Nescience.</li>
<li>Integrated different techniques for Goal4 and Goal5 for Nescience.</li>
<li>prepared Nova-implementation writeup (<a href="https://www.notion.so/zkVM-cd358fe429b14fa2ab38ca42835a8451?pvs=4#cce2cc365a384126b2a5041900bd3ce9" class="external">zkVM-cd358fe429b14fa2ab38ca42835a8451?pvs=4#cce2cc365a384126b2a5041900bd3ce9</a>)</li>
<li>Continued Lasso research (<a href="https://a16zcrypto.com/posts/article/introducing-lasso-and-jolt/" class="external">introducing-lasso-and-jolt</a>)</li>
<li><a href="https://www.notion.so/zkVM-cd358fe429b14fa2ab38ca42835a8451?pvs=4#31b80e44529e4f3c80991e4a67afed3c" class="external">Notes for Protogalaxy; 100%</a></li>
<li>Notes for Protostar</li>
</ul>
</li>
<li><code>proofsystems:vac:proof-system-benchmarks</code>
<ul>
<li>Added an introductory section for Benchmark in zk-explorations repo: <a href="https://github.com/vacp2p/zk-explorations/pull/10" class="external">10</a></li>
</ul>
</li>
</ul>
<h3 id="vacdr">vac:dr:<a aria-hidden="true" tabindex="-1" href="#vacdr" class="internal"> §</a></h3>
<ul>
<li><code>gsub-scaling:vac:unstructured-p2p-improvements-survey</code>
<ul>
<li>Completed literature study. Covered article related to overlay design (single tier, multi-tier, hybrid overlays)</li>
<li>peer selection methodologies, rumor/gossiping protocols, push/pull based publishing approaches, message encoding, probablistic forwarding, overlay optimization, and peer heterogeneity/capacity based roles (super nodes and similar roles)</li>
<li>Still need to review 1-2 D-regular graph based approaches. Only selected articles are added in zotero (under vacp2p)</li>
</ul>
</li>
<li><code>valpriv:vac:tor-push-poc</code>
<ul>
<li>Debugged various appraoches(tcp, gossip, tor). Triaged why attestations not working</li>
</ul>
</li>
<li><code>valpriv:vac:tor-push-relwork</code>
<ul>
<li>completed related work all</li>
</ul>
</li>
<li><code>consensus:nomos:carnot-paper</code>
<ul>
<li>Publishing the Carnot paper (Done) <a href="https://arxiv.org/pdf/2308.16016.pdf" class="external">2308.16016.pdf</a></li>
<li>Begin work on writing up Carnots specification in RFC format</li>
</ul>
</li>
<li><code>consensus:nomos:carnot-bribery-article</code>
<ul>
<li>Finishing (describing research directions and their pros and cons, polishing the article) and publishing the article (Done) <a href="https://www.notion.so/WIP-Bribery-Attacks-in-Consensus-Protocols-Challenges-and-Solutions-e4e108c17dba421abe83de49076c8f25" class="external">WIP-Bribery-Attacks-in-Consensus-Protocols-Challenges-and-Solutions-e4e108c17dba421abe83de49076c8f25</a></li>
</ul>
</li>
<li><code>consensus:nomos:carnot-vote-2-3rds-vote-aggregation</code>
<ul>
<li>Completing the initial design and work on presentation slides. The plan will be to present the initial design on September 6 research call</li>
</ul>
</li>
</ul>
<h3 id="vacrfcrfc">vac:rfc:rfc:<a aria-hidden="true" tabindex="-1" href="#vacrfcrfc" class="internal"> §</a></h3>
<ul>
<li><code>status:port-status-specs</code>
<ul>
<li>Started porting <code>6/PAYLOAD</code> to vac RFCs
<ul>
<li>Work-in-progress PR is pending <a href="https://github.com/vacp2p/rfc/pull/612" class="external">here</a></li>
<li>This RFC specifically needs a lot of work as it misses a lot of the current payload types</li>
</ul>
</li>
<li>Updated <code>61/STATUS-community-history-archives</code> according to feedback comments and landed it
<ul>
<li>Merged PR is <a href="https://github.com/vacp2p/rfc/pull/610" class="external">here</a></li>
</ul>
</li>
<li>started porting 16/keycard-usage to Vac (looking into status-go)</li>
</ul>
</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>No backlinks found</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>