roadmap/nomos/updates/2024-04-01.html

113 lines
127 KiB
HTML
Raw Normal View History

2024-04-03 11:13:02 +00:00
<!DOCTYPE html>
2024-05-03 14:08:32 +00:00
<html><head><title>2024-01-04 Nomos weekly</title><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="2024-01-04 Nomos weekly"/><meta property="og:description" content="Weekly update of Nomos."/><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="Weekly update of Nomos."/><meta name="generator" content="Quartz"/><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="nomos/updates/2024-04-01"><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,2
2024-04-03 11:13:02 +00:00
<h3 id="research"><code>Research</code><a aria-hidden="true" tabindex="-1" href="#research" class="internal"> §</a></h3>
<ul>
<li>Used the probability that the naive estimator of relative stake is inside some interval which includes the true stake α, δ(α), to derive an algorithm that suggests how to divide the stake of a node in order to reduce the quality of statistical inference by an adversary. The interval [α(1γ),α(1+γ)] is parameterized by the adversarial “accuracy” parameter γ. The probability δ(α) can be interpreted as adversarial “confidence” gained after Tq observations (on average), where T is the number of time-slots in one epoch and q is the fraction of observed slots (for example due to deanonymization failure of the mixnet), that the inferred stake is within the interval [α(1γ),α(1+γ)]. Assuming q and γ, a node can use its stake α to compute the probability δ(α). The latter is a monotonically increasing function of α, and dividing α among a number of nodes reduces the adversarial “confidence,” thereby reducing the quality of adversarial inference. The details of the analysis can be found in the following <a href="https://www.notion.so/De-anonymisation-of-relative-stake-5b48f86bba3845c98f9b16f952307998#e1dbf36740794232a11289d655da574f" class="external">document</a>.</li>
</ul>
<h3 id="development"><code>Development</code><a aria-hidden="true" tabindex="-1" href="#development" class="internal"> §</a></h3>
<ul>
<li>Cryptarchia fuzz tests: tried various fuzz testing strategies, but finally ended up with a simple but clear fuzz strategy, through which we can test Cryptarchia by simulating the environment where the block proposal delivery (p2p networking) is not synchronous and not predictable. The initial <a href="https://github.com/logos-co/nomos-node/pull/629" class="external">PR</a> for the basic strategy has been opened. Also opened a small fix found by the fuzz test: <a href="https://github.com/logos-co/nomos-node/pull/630" class="external">PR</a>.</li>
</ul>
<h2 id="mixnet-network-privacy"><code>Mixnet (Network Privacy)</code><a aria-hidden="true" tabindex="-1" href="#mixnet-network-privacy" class="internal"> §</a></h2>
<h3 id="research-1"><code>Research</code><a aria-hidden="true" tabindex="-1" href="#research-1" class="internal"> §</a></h3>
<ul>
<li>Discussed the Staking-Privacy dilemma and came to a conclusion that the Nym design needs to be fine-tuned to reduce the impact of the delegated stake on the probability of selection of a node. We also need to investigate a mysterious constant that “controls the loss of competitiveness experienced by a Sybil attacker when it partitions the stake into multiple pledges”.</li>
<li>Prepared a <a href="https://www.notion.so/Mixnet-with-Staking-c8ec3bfd461f4989b3ebbcf4b4b15324#2e57424c79bd44b19c4c4dd624f544b2" class="external">recommendation</a> for the first iteration of the mixnet staking. The main motivation was to present a simple staking design for mixnet that is inspired by Nym but is simplified and will be updated when our approach gets more mature.</li>
</ul>
<h3 id="development-1"><code>Development</code><a aria-hidden="true" tabindex="-1" href="#development-1" class="internal"> §</a></h3>
<ul>
<li>Adding metric APIs for Mixnet - still work in progress. A PR will be opened for a minimal but essential metric API this week. This should be enough for now because the entire mixnet architecture may change according to the mixnet staking design. The first metric is going to be the number of packets that are being mixed in each mix node, which can be considered as the quality of mixing. More details in the relevant <a href="https://www.notion.so/Mixnet-Metrics-d9ca6b3e06d1497096119e097f99790e" class="external">document</a>.</li>
</ul>
<h2 id="data-availability"><code>Data Availability</code><a aria-hidden="true" tabindex="-1" href="#data-availability" class="internal"> §</a></h2>
<h3 id="research-2"><code>Research</code><a aria-hidden="true" tabindex="-1" href="#research-2" class="internal"> §</a></h3>
<ul>
<li>Nomos DA specification has been rewritten - a <a href="https://www.notion.so/NomosDA-Encoding-Verification-Dispersal-4d8ca269e96d4fdcb05abc70426c5e7c" class="external">document</a> has been added on top of the original one to make certain mathematical and technical details more digestible.</li>
</ul>
<h3 id="development-2"><code>Development</code><a aria-hidden="true" tabindex="-1" href="#development-2" class="internal"> §</a></h3>
<ul>
<li>Nomos DA verifier sketch: We have started putting all pieces in place for getting the DA protocol implemented and integrated in the node. This implies some cleaning and refactoring that have impact in the code base. We have a da-v1 branch where we will be incorporating everything until it is ready and stable to be added to master - <a href="https://github.com/logos-co/nomos-node/pull/627" class="external">PR</a>.</li>
<li>Published a draft branch with the first working version of the Nomos DA protocol. This will make a lot of changes including removing of old attempts and experiments. Notice that this <a href="https://github.com/logos-co/nomos-node/pull/626" class="external">branch</a> will hold a lot of changes but that most of them will be incrementally included (and reviewed).</li>
<li><a href="https://github.com/logos-co/nomos-node/tree/da-v1-kzg-rs-core" class="external">Branch</a> added: KZG+RS core in rust, <code>bytes_to_polynomial</code> method - not working atm but we are debugging to see what is the issue (looks like roots of unity related).</li>
<li><a href="https://github.com/logos-co/nomos-node/tree/da-storage-service" class="external">Branch</a> added: DA indexer - work in progress, removed all previously proposed mocks and structures as da protocol changed substantially.</li>
</ul>
<h2 id="coordination-layer"><code>Coordination Layer</code><a aria-hidden="true" tabindex="-1" href="#coordination-layer" class="internal"> §</a></h2>
<h3 id="research-3"><code>Research</code><a aria-hidden="true" tabindex="-1" href="#research-3" class="internal"> §</a></h3>
<ul>
<li>Taiga: compiled a <a href="https://www.notion.so/Taiga-as-of-March-2024-7b9c037fa2c144dcbb5e4666c1815d17" class="external">report</a> on the current state as part of our research efforts.</li>
<li>Taiga made the choice to use blake2s for VP commitments and Poseidon for resource commitments. The experiment looks at prover/verify time when blake2s is replaced with Poseidon, and we get a near doubling in performance. More details in our <a href="https://www.notion.so/Taiga-Replace-Blake2s-with-Poseidon-fd34bdba50da4360822ec3791a4ccd2d" class="external">experiment</a>. The details of the Blake2s with Poseidon implementation have been reviewed in this <a href="https://www.notion.so/ZK-Friendly-Hash-Functions-312c6d625f0244f0bea778ac5619e76d" class="external">document</a>. As part of examining the usage of Blake2s and Poseidon in the Taiga implementation, a summary providing general information about ZK-friendly hash functions has been prepared.</li>
<li>The <a href="https://www.notion.so/Proof-Systems-Survey-ffc625a2ff82407db7a45fd193136258" class="external">survey</a> on proof systems is underway: to summarize, Halo2 stands out in implementations for private transactions. Its use of Plonkish arithmetization and consideration of lookup arguments make Halo2 advantageous. As discussed earlier, we prefer not to use a trusted setup-related feature like KZG in the coordination layer. Consequently, proof protocols involving trusted setups, such as Groth16 and Plonk, are less favored. Generally, there are three common polynomial commitment schemes used in existing protocols: KZG, IPA, and FRI. A comparison of these schemes has been added to the report. Even if we dont use Plonk, the use of Plonk-ish arithmetizations in Halo2 is significant for performance. In addition, Novas folding improvement is critical for performance, but it requires the use of R1CS instead of Plonkish. Sangria, a folding scheme using Plonkish methods, is a new design worth exploring. Finally, after outlining the general framework for the coordination layer, we believe that upgrading cryptographic sub-algorithms for performance will not be too challenging.</li>
</ul>
<h3 id="development-3"><code>Development</code><a aria-hidden="true" tabindex="-1" href="#development-3" class="internal"> §</a></h3>
<ul>
<li>No development updates.</li>
</ul>
<h2 id="testnet"><code>Testnet</code><a aria-hidden="true" tabindex="-1" href="#testnet" class="internal"> §</a></h2>
<h3 id="development-4"><code>Development</code><a aria-hidden="true" tabindex="-1" href="#development-4" class="internal"> §</a></h3>
<ul>
<li>No updates at the moment.</li>
</ul>
<h2 id="miscellaneous"><code>Miscellaneous</code><a aria-hidden="true" tabindex="-1" href="#miscellaneous" class="internal"> §</a></h2>
<ul>
<li>New blog will be published after reviews - Stake relativization.</li>
<li>Nomos team will be at All-hands next week.</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,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></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,&quot;showTags&quot;:true,&quot;removeTags&quot;:[]}"></div></div></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="#cryptarchia" data-for="cryptarchia">Cryptarchia</a></li><li class="depth-1"><a href="#research" data-for="research">Research</a></li><li class="depth-1"><a href="#development" data-for="development">Development</a></li><li class="depth-0"><a href="#mixnet-network-privacy" data-for="mixnet-network-privacy">Mixnet (Network Privacy)</a></li><li class="depth-1"><a href="#research-1" data-for="research-1">Research</a></li><li class="depth-1"><a href="#development-1" data-for="development-1">Development</a></li><li class="depth-0"><a href="#data-availability" data-for="data-availability">Data Availability</a></li><li class="depth-1"><a href="#research-2" data-for="research-2">Research</a></li><li class="depth-1"><a href="#development-2" data-for="development-2">Development</a></li><li class="depth-0"><a href="#coordination-layer" data-for="coordination-layer">Coordination Layer</a></li><li class="depth-1"><a href="#research-3" data-for="research-3">Research</a></li><li class="depth-1"><a href="#development-3" data-for="development-3">Development</a></li><li class="depth-0"><a href="#testnet" data-for="testnet">Testnet</a></li><li class="depth-1"><a href="#development-4" data-for="development-4">Development</a></li><li class="depth-0"><a href="#miscellaneous" data-for="miscellaneous">Miscellaneous</a></li></ul></div></div><div class="backlinks "><h3>Backlinks</h3><ul class="overflow"><li>No backlinks found</li></ul></div></div></div><footer class><hr/><p>Created with <a href="https://quartz.jzhao.xyz/">Quartz v4.1.0</a>, © 2024</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>