Update documentation

This commit is contained in:
2022-10-26 20:34:05 +00:00
parent 2a68efab13
commit 2d92b4cc92
34 changed files with 99 additions and 62 deletions

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -103,7 +103,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

File diff suppressed because one or more lines are too long

40
linkmap
View File

@ -1,29 +1,29 @@
/private/notes/config/index.{html} /private/notes/config/ /index.html /
/private/notes/editing/index.{html} /private/notes/editing/
/private/notes/search/index.{html} /private/notes/search/ /private/notes/search/index.{html} /private/notes/search/
/roadmap/consensus/development/prototypes/index.{html} /roadmap/consensus/development/prototypes/ /private/notes/showcase/index.{html} /private/notes/showcase/
/roadmap/consensus/development/overview/index.{html} /roadmap/consensus/development/overview/
/roles/distributed-systems-researcher/index.{html} /roles/distributed-systems-researcher/ /roles/distributed-systems-researcher/index.{html} /roles/distributed-systems-researcher/
/roles/zero-knowledge-research-engineer/index.{html} /roles/zero-knowledge-research-engineer/ /private/notes/config/index.{html} /private/notes/config/
/private/notes/custom-Domain/index.{html} /private/notes/custom-Domain/ /private/notes/obsidian/index.{html} /private/notes/obsidian/
/private/notes/preview-changes/index.{html} /private/notes/preview-changes/ /private/notes/philosophy/index.{html} /private/notes/philosophy/
/roadmap/consensus/theory/overview/index.{html} /roadmap/consensus/theory/overview/ /requirements/overview/index.{html} /requirements/overview/
/private/notes/ignore-notes/index.{html} /private/notes/ignore-notes/
/private/notes/troubleshooting/index.{html} /private/notes/troubleshooting/
/roadmap/consensus/candidates/logos-bft/FAQ/index.{html} /roadmap/consensus/candidates/logos-bft/FAQ/
/roadmap/consensus/overview/index.{html} /roadmap/consensus/overview/
/roles/rust-developer/index.{html} /roles/rust-developer/ /roles/rust-developer/index.{html} /roles/rust-developer/
/private/notes/custom-Domain/index.{html} /private/notes/custom-Domain/
/private/notes/editing/index.{html} /private/notes/editing/
/roadmap/consensus/candidates/glacier/index.{html} /roadmap/consensus/candidates/glacier/
/roadmap/consensus/candidates/logos-bft/overview/index.{html} /roadmap/consensus/candidates/logos-bft/overview/
/roadmap/consensus/development/prototypes/index.{html} /roadmap/consensus/development/prototypes/
/roadmap/virtual-machines/overview/index.{html} /roadmap/virtual-machines/overview/ /roadmap/virtual-machines/overview/index.{html} /roadmap/virtual-machines/overview/
/private/notes/hosting/index.{html} /private/notes/hosting/ /private/notes/hosting/index.{html} /private/notes/hosting/
/private/notes/setup/index.{html} /private/notes/setup/ /private/notes/setup/index.{html} /private/notes/setup/
/roadmap/consensus/candidates/logos-bft/FAQ/index.{html} /roadmap/consensus/candidates/logos-bft/FAQ/ /roadmap/consensus/theory/overview/index.{html} /roadmap/consensus/theory/overview/
/roadmap/consensus/development/overview/index.{html} /roadmap/consensus/development/overview/
/roadmap/consensus/overview/index.{html} /roadmap/consensus/overview/
/index.html /
/private/notes/showcase/index.{html} /private/notes/showcase/
/private/notes/updating/index.{html} /private/notes/updating/
/requirements/overview/index.{html} /requirements/overview/
/private/notes/CJK-+-Latex-Support-%E6%B5%8B%E8%AF%95/index.{html} /private/notes/CJK-+-Latex-Support-%E6%B5%8B%E8%AF%95/ /private/notes/CJK-+-Latex-Support-%E6%B5%8B%E8%AF%95/index.{html} /private/notes/CJK-+-Latex-Support-%E6%B5%8B%E8%AF%95/
/private/notes/preview-changes/index.{html} /private/notes/preview-changes/
/roles/zero-knowledge-research-engineer/index.{html} /roles/zero-knowledge-research-engineer/
/private/notes/callouts/index.{html} /private/notes/callouts/ /private/notes/callouts/index.{html} /private/notes/callouts/
/private/notes/ignore-notes/index.{html} /private/notes/ignore-notes/ /private/notes/updating/index.{html} /private/notes/updating/
/private/notes/obsidian/index.{html} /private/notes/obsidian/
/private/notes/troubleshooting/index.{html} /private/notes/troubleshooting/
/roadmap/consensus/candidates/glacier/index.{html} /roadmap/consensus/candidates/glacier/
/roadmap/consensus/candidates/logos-bft/overview/index.{html} /roadmap/consensus/candidates/logos-bft/overview/
/private/notes/philosophy/index.{html} /private/notes/philosophy/
/roadmap/consensus/theory/snow-family/index.{html} /roadmap/consensus/theory/snow-family/ /roadmap/consensus/theory/snow-family/index.{html} /roadmap/consensus/theory/snow-family/

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -103,7 +103,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({
@ -343,6 +343,34 @@ Oct 26, 2022
@ -386,15 +414,23 @@ Oct 26, 2022
<a href="#byzantine-behavior"><h2 id="byzantine-behavior"><span class="hanchor" ariaLabel="Anchor"># </span>Byzantine Behavior</h2></a> <a href="#byzantine-behavior"><h2 id="byzantine-behavior"><span class="hanchor" ariaLabel="Anchor"># </span>Byzantine Behavior</h2></a>
<a href="#can-we-also-consider-a-flavor-that-adds-attestationattribution-to-misbehaving-nodes-that-will-come-at-a-price-but-there-might-be-a-set-of-use-cases-which-would-like-to-have-lower-performance-with-strong-attribution-not-saying-that-it-must-be-part-of-the-initial-design-but-can-be-think-throughadded-later---marcin"><h3 id="can-we-also-consider-a-flavor-that-adds-attestationattribution-to-misbehaving-nodes-that-will-come-at-a-price-but-there-might-be-a-set-of-use-cases-which-would-like-to-have-lower-performance-with-strong-attribution-not-saying-that-it-must-be-part-of-the-initial-design-but-can-be-think-throughadded-later---marcin"><span class="hanchor" ariaLabel="Anchor"># </span>Can we also consider a flavor that adds attestation/attribution to misbehaving nodes? That will come at a price but there might be a set of use cases which would like to have lower performance with strong attribution. Not saying that it must be part of the initial design, but can be think-through/added later. - Marcin</h3></a> <a href="#can-we-also-consider-a-flavor-that-adds-attestationattribution-to-misbehaving-nodes-that-will-come-at-a-price-but-there-might-be-a-set-of-use-cases-which-would-like-to-have-lower-performance-with-strong-attribution-not-saying-that-it-must-be-part-of-the-initial-design-but-can-be-think-throughadded-later---marcin"><h3 id="can-we-also-consider-a-flavor-that-adds-attestationattribution-to-misbehaving-nodes-that-will-come-at-a-price-but-there-might-be-a-set-of-use-cases-which-would-like-to-have-lower-performance-with-strong-attribution-not-saying-that-it-must-be-part-of-the-initial-design-but-can-be-think-throughadded-later---marcin"><span class="hanchor" ariaLabel="Anchor"># </span>Can we also consider a flavor that adds attestation/attribution to misbehaving nodes? That will come at a price but there might be a set of use cases which would like to have lower performance with strong attribution. Not saying that it must be part of the initial design, but can be think-through/added later. - Marcin</h3></a>
<blockquote> <blockquote>
<p><code>Moh:</code> Attestation to misbehaving nodes is part of this protocol. For example, if a node sends an incorrect vote or if a leader proposes an invalid transaction, then this proof will be shared with the network to punish the misbehaving nodes (Though currently this is not part of pseudocode). But it is not possible to reliably prove the attestation of not participation. <p><code>Moh:</code> Attestation to misbehaving nodes is part of this protocol. For example, if a node sends an incorrect vote or if a leader proposes an invalid transaction, then this proof will be shared with the network to punish the misbehaving nodes (Though currently this is not part of pseudocode). But it is not possible to reliably prove the attestation of not participation.</p>
<code>Marcin:</code> Great, and definitely, we cannot attest that a node was not participating - I was not suggesting that;). But we can also think about extending the attestation for lazy-participants case (if its not already part of the protocol). </blockquote>
<code>Moh:</code> OK, thanks for the clarification 😁 . Of course we can have this feature to forward the proof of participation of successor committees. In the first version of LogosBFT we had this feature as a sliding window. One could choose the size of the window (in terms of tree levels) for which a node should forward the proof of participation. In the most recent version the size of sliding window is 0. And it is 1 for the root committee. It means root committee members have to forward the proof of participation of their child committee members. Since I was able to prove protocol correctness without forwarding the proofs so we avoid it. But it can be part of the protocol without any significant changes in the protocol <blockquote>
<code>Moh:</code> If the proof scheme is efficient ( as the results you presented) in practice and the cost of creating and verifying proofs is not significant then actually adding proofs can be good. But not required.</p> <p><code>Marcin:</code> Great, and definitely, we cannot attest that a node was not participating - I was not suggesting that;). But we can also think about extending the attestation for lazy-participants case (if its not already part of the protocol).</p>
</blockquote>
<blockquote>
<p><code>Moh:</code> OK, thanks for the clarification 😁 . Of course we can have this feature to forward the proof of participation of successor committees. In the first version of LogosBFT we had this feature as a sliding window. One could choose the size of the window (in terms of tree levels) for which a node should forward the proof of participation. In the most recent version the size of sliding window is 0. And it is 1 for the root committee. It means root committee members have to forward the proof of participation of their child committee members. Since I was able to prove protocol correctness without forwarding the proofs so we avoid it. But it can be part of the protocol without any significant changes in the protocol</p>
</blockquote>
<blockquote>
<p>If the proof scheme is efficient ( as the results you presented) in practice and the cost of creating and verifying proofs is not significant then actually adding proofs can be good. But not required.</p>
</blockquote> </blockquote>
<a href="#also-how-do-you-reward-online-validators--punish-offline-ones-if-you-cant-prove-at-the-block-level-that-someone-attested-or-not---tanguy"><h3 id="also-how-do-you-reward-online-validators--punish-offline-ones-if-you-cant-prove-at-the-block-level-that-someone-attested-or-not---tanguy"><span class="hanchor" ariaLabel="Anchor"># </span>Also, how do you reward online validators / punish offline ones if you can&rsquo;t prove at the block level that someone attested or not? - Tanguy</h3></a> <a href="#also-how-do-you-reward-online-validators--punish-offline-ones-if-you-cant-prove-at-the-block-level-that-someone-attested-or-not---tanguy"><h3 id="also-how-do-you-reward-online-validators--punish-offline-ones-if-you-cant-prove-at-the-block-level-that-someone-attested-or-not---tanguy"><span class="hanchor" ariaLabel="Anchor"># </span>Also, how do you reward online validators / punish offline ones if you can&rsquo;t prove at the block level that someone attested or not? - Tanguy</h3></a>
<blockquote> <blockquote>
<p><code>Moh:</code> This is very tricky and so far no one has done it right (to my knowledge). Current reward mechanism for attestation, favours fast nodes.This means if malicious nodes in the network are fast, they can increase their stake in the network faster than the honest nodes and eventually take control of the network. Or in the case of Ethereum a Byzantine leader can include signature of malicious nodes more frequently in the proof of attestation, hence malicious nodes will be rewarded more frequently. Also let me add that I don&rsquo;t have definite answer to your question currently, but I think by revising the protocol assumptions, incentive mechanism and using a game theoretical approach this problem can be resolved. <p><code>Moh:</code> This is very tricky and so far no one has done it right (to my knowledge). Current reward mechanism for attestation, favours fast nodes.This means if malicious nodes in the network are fast, they can increase their stake in the network faster than the honest nodes and eventually take control of the network. Or in the case of Ethereum a Byzantine leader can include signature of malicious nodes more frequently in the proof of attestation, hence malicious nodes will be rewarded more frequently. Also let me add that I don&rsquo;t have definite answer to your question currently, but I think by revising the protocol assumptions, incentive mechanism and using a game theoretical approach this problem can be resolved.</p>
An honest node should wait for a specific number of children votes (to make sure everyone is voting on the same proposal) before voting but does not need to provide any cryptographic proof. Though we build a threshold signature from root committee members and its children but not from the whole tree. As long as enough number of nodes follow the the protocol we should be fine. I am working on protocol proofs. Also I think bugs should be discovered during development and testing phase. Changing protocol to detect potential bug might not be a good practice.</p> </blockquote>
<blockquote>
<p>An honest node should wait for a specific number of children votes (to make sure everyone is voting on the same proposal) before voting but does not need to provide any cryptographic proof. Though we build a threshold signature from root committee members and its children but not from the whole tree. As long as enough number of nodes follow the the protocol we should be fine. I am working on protocol proofs. Also I think bugs should be discovered during development and testing phase. Changing protocol to detect potential bug might not be a good practice.</p>
</blockquote> </blockquote>

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -103,7 +103,7 @@ Required Roles Lead Developer (filled) "
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -103,7 +103,7 @@ With the high level goals of preserving the right to privacy, mitigating the ris
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -105,7 +105,7 @@ Status is an organization building the tools and infrastructure for the advancem
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -105,7 +105,7 @@ Status is building the tools and infrastructure for the advancement of a secure,
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -11,7 +11,7 @@
<loc>https://roadmap.logos.co/categories/</loc> <loc>https://roadmap.logos.co/categories/</loc>
</url><url> </url><url>
<loc>https://roadmap.logos.co/tags/consensus/</loc> <loc>https://roadmap.logos.co/tags/consensus/</loc>
<lastmod>2022-10-26T16:29:45-04:00</lastmod> <lastmod>2022-10-26T16:33:38-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roadmap/consensus/development/prototypes/</loc> <loc>https://roadmap.logos.co/roadmap/consensus/development/prototypes/</loc>
<lastmod>2022-08-19T15:10:38-04:00</lastmod> <lastmod>2022-08-19T15:10:38-04:00</lastmod>
@ -32,7 +32,7 @@
<lastmod>2022-10-26T16:15:35-04:00</lastmod> <lastmod>2022-10-26T16:15:35-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roadmap/consensus/candidates/logos-bft/FAQ/</loc> <loc>https://roadmap.logos.co/roadmap/consensus/candidates/logos-bft/FAQ/</loc>
<lastmod>2022-10-26T16:29:45-04:00</lastmod> <lastmod>2022-10-26T16:33:38-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roadmap/consensus/candidates/glacier/</loc> <loc>https://roadmap.logos.co/roadmap/consensus/candidates/glacier/</loc>
<lastmod>2022-08-19T15:10:38-04:00</lastmod> <lastmod>2022-08-19T15:10:38-04:00</lastmod>
@ -47,7 +47,7 @@
<lastmod>2022-10-26T16:15:35-04:00</lastmod> <lastmod>2022-10-26T16:15:35-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/tags/LogosBFT/</loc> <loc>https://roadmap.logos.co/tags/LogosBFT/</loc>
<lastmod>2022-10-26T16:29:45-04:00</lastmod> <lastmod>2022-10-26T16:33:38-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roles/distributed-systems-researcher/</loc> <loc>https://roadmap.logos.co/roles/distributed-systems-researcher/</loc>
<lastmod>2022-08-19T15:10:38-04:00</lastmod> <lastmod>2022-08-19T15:10:38-04:00</lastmod>
@ -59,7 +59,7 @@
<lastmod>2022-10-26T16:15:35-04:00</lastmod> <lastmod>2022-10-26T16:15:35-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roadmap/</loc> <loc>https://roadmap.logos.co/roadmap/</loc>
<lastmod>2022-10-26T16:29:45-04:00</lastmod> <lastmod>2022-10-26T16:33:38-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/tags/role/</loc> <loc>https://roadmap.logos.co/tags/role/</loc>
<lastmod>2022-10-26T16:15:35-04:00</lastmod> <lastmod>2022-10-26T16:15:35-04:00</lastmod>
@ -74,7 +74,7 @@
<lastmod>2022-10-26T16:15:35-04:00</lastmod> <lastmod>2022-10-26T16:15:35-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/tags/</loc> <loc>https://roadmap.logos.co/tags/</loc>
<lastmod>2022-10-26T16:29:45-04:00</lastmod> <lastmod>2022-10-26T16:33:38-04:00</lastmod>
</url><url> </url><url>
<loc>https://roadmap.logos.co/roadmap/consensus/theory/snow-family/</loc> <loc>https://roadmap.logos.co/roadmap/consensus/theory/snow-family/</loc>
<lastmod>2022-08-19T15:10:38-04:00</lastmod> <lastmod>2022-08-19T15:10:38-04:00</lastmod>

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({

View File

@ -102,7 +102,7 @@
index: data.index, index: data.index,
links: data.links, links: data.links,
})), })),
fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.419a3e348936e0a81337b3003273bd26.min.json") fetch("https:\/\/roadmap.logos.co\/indices\/contentIndex.08497a46d4c3dbb09f370d3818764cfb.min.json")
.then(data => data.json()), .then(data => data.json()),
]) ])
.then(([{index, links}, content]) => ({ .then(([{index, links}, content]) => ({