mirror of
https://github.com/vacp2p/rfc-index.git
synced 2026-01-09 22:08:07 -05:00
484 lines
50 KiB
HTML
484 lines
50 KiB
HTML
<!DOCTYPE HTML>
|
|
<html lang="en" class="ayu" dir="ltr">
|
|
<head>
|
|
<!-- Book generated using mdBook -->
|
|
<meta charset="UTF-8">
|
|
<title>SDP - Vac RFC</title>
|
|
|
|
|
|
<!-- Custom HTML head -->
|
|
|
|
<meta name="description" content="">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<link rel="icon" href="../../favicon.svg">
|
|
<link rel="shortcut icon" href="../../favicon.png">
|
|
<link rel="stylesheet" href="../../css/variables.css">
|
|
<link rel="stylesheet" href="../../css/general.css">
|
|
<link rel="stylesheet" href="../../css/chrome.css">
|
|
<link rel="stylesheet" href="../../css/print.css" media="print">
|
|
|
|
<!-- Fonts -->
|
|
<link rel="stylesheet" href="../../FontAwesome/css/font-awesome.css">
|
|
<link rel="stylesheet" href="../../fonts/fonts.css">
|
|
|
|
<!-- Highlight.js Stylesheets -->
|
|
<link rel="stylesheet" href="../../highlight.css">
|
|
<link rel="stylesheet" href="../../tomorrow-night.css">
|
|
<link rel="stylesheet" href="../../ayu-highlight.css">
|
|
|
|
<!-- Custom theme stylesheets -->
|
|
<link rel="stylesheet" href="../../custom.css">
|
|
|
|
</head>
|
|
<body class="sidebar-visible no-js">
|
|
<div id="body-container">
|
|
<!-- Provide site root to javascript -->
|
|
<script>
|
|
var path_to_root = "../../";
|
|
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "ayu";
|
|
</script>
|
|
|
|
<!-- Work around some values being stored in localStorage wrapped in quotes -->
|
|
<script>
|
|
try {
|
|
var theme = localStorage.getItem('mdbook-theme');
|
|
var sidebar = localStorage.getItem('mdbook-sidebar');
|
|
|
|
if (theme.startsWith('"') && theme.endsWith('"')) {
|
|
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
|
|
}
|
|
|
|
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
|
|
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
|
|
}
|
|
} catch (e) { }
|
|
</script>
|
|
|
|
<!-- Set the theme before any content is loaded, prevents flash -->
|
|
<script>
|
|
var theme;
|
|
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
|
|
if (theme === null || theme === undefined) { theme = default_theme; }
|
|
var html = document.querySelector('html');
|
|
html.classList.remove('ayu')
|
|
html.classList.add(theme);
|
|
var body = document.querySelector('body');
|
|
body.classList.remove('no-js')
|
|
body.classList.add('js');
|
|
</script>
|
|
|
|
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
|
|
|
|
<!-- Hide / unhide sidebar before it is displayed -->
|
|
<script>
|
|
var body = document.querySelector('body');
|
|
var sidebar = null;
|
|
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
|
|
if (document.body.clientWidth >= 1080) {
|
|
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
|
|
sidebar = sidebar || 'visible';
|
|
} else {
|
|
sidebar = 'hidden';
|
|
}
|
|
sidebar_toggle.checked = sidebar === 'visible';
|
|
body.classList.remove('sidebar-visible');
|
|
body.classList.add("sidebar-" + sidebar);
|
|
</script>
|
|
|
|
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
|
|
<div class="sidebar-scrollbox">
|
|
<ol class="chapter"><li class="chapter-item expanded affix "><a href="../../index.html">Introduction</a></li><li class="chapter-item expanded "><a href="../../vac/index.html"><strong aria-hidden="true">1.</strong> Vac</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../vac/1/coss.html"><strong aria-hidden="true">1.1.</strong> 1/COSS</a></li><li class="chapter-item expanded "><a href="../../vac/2/mvds.html"><strong aria-hidden="true">1.2.</strong> 2/MVDS</a></li><li class="chapter-item expanded "><a href="../../vac/3/remote-log.html"><strong aria-hidden="true">1.3.</strong> 3/Remote Log</a></li><li class="chapter-item expanded "><a href="../../vac/4/mvds-meta.html"><strong aria-hidden="true">1.4.</strong> 4/MVDS Meta</a></li><li class="chapter-item expanded "><a href="../../vac/25/libp2p-dns-discovery.html"><strong aria-hidden="true">1.5.</strong> 25/Libp2p DNS Discovery</a></li><li class="chapter-item expanded "><a href="../../vac/32/rln-v1.html"><strong aria-hidden="true">1.6.</strong> 32/RLN-V1</a></li><li class="chapter-item expanded "><a href="../../vac/raw/index.html"><strong aria-hidden="true">1.7.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../vac/raw/consensus-hashgraphlike.html"><strong aria-hidden="true">1.7.1.</strong> Consensus Hashgraphlike</a></li><li class="chapter-item expanded "><a href="../../vac/raw/decentralized-messaging-ethereum.html"><strong aria-hidden="true">1.7.2.</strong> Decentralized Messaging Ethereum</a></li><li class="chapter-item expanded "><a href="../../vac/raw/eth-mls-offchain.html"><strong aria-hidden="true">1.7.3.</strong> ETH MLS Offchain</a></li><li class="chapter-item expanded "><a href="../../vac/raw/eth-mls-onchain.html"><strong aria-hidden="true">1.7.4.</strong> ETH MLS Onchain</a></li><li class="chapter-item expanded "><a href="../../vac/raw/deleted/eth-secpm.html"><strong aria-hidden="true">1.7.5.</strong> ETH SecPM</a></li><li class="chapter-item expanded "><a href="../../vac/raw/gossipsub-tor-push.html"><strong aria-hidden="true">1.7.6.</strong> Gossipsub Tor Push</a></li><li class="chapter-item expanded "><a href="../../vac/raw/logos-capability-discovery.html"><strong aria-hidden="true">1.7.7.</strong> Logos Capability Discovery</a></li><li class="chapter-item expanded "><a href="../../vac/raw/mix.html"><strong aria-hidden="true">1.7.8.</strong> Mix</a></li><li class="chapter-item expanded "><a href="../../vac/raw/noise-x3dh-double-ratchet.html"><strong aria-hidden="true">1.7.9.</strong> Noise X3DH Double Ratchet</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-interep-spec.html"><strong aria-hidden="true">1.7.10.</strong> RLN Interep Spec</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-stealth-commitments.html"><strong aria-hidden="true">1.7.11.</strong> RLN Stealth Commitments</a></li><li class="chapter-item expanded "><a href="../../vac/raw/rln-v2.html"><strong aria-hidden="true">1.7.12.</strong> RLN-V2</a></li><li class="chapter-item expanded "><a href="../../vac/raw/sds.html"><strong aria-hidden="true">1.7.13.</strong> SDS</a></li></ol></li><li class="chapter-item expanded "><a href="../../vac/template.html"><strong aria-hidden="true">1.8.</strong> Template</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/index.html"><strong aria-hidden="true">2.</strong> Waku</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/core/index.html"><strong aria-hidden="true">2.1.</strong> Standards - Core</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/core/10/waku2.html"><strong aria-hidden="true">2.1.1.</strong> 10/Waku2</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/11/relay.html"><strong aria-hidden="true">2.1.2.</strong> 11/Relay</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/12/filter.html"><strong aria-hidden="true">2.1.3.</strong> 12/Filter</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/13/store.html"><strong aria-hidden="true">2.1.4.</strong> 13/Store</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/14/message.html"><strong aria-hidden="true">2.1.5.</strong> 14/Message</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/15/bridge.html"><strong aria-hidden="true">2.1.6.</strong> 15/Bridge</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/17/rln-relay.html"><strong aria-hidden="true">2.1.7.</strong> 17/RLN Relay</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/19/lightpush.html"><strong aria-hidden="true">2.1.8.</strong> 19/Lightpush</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/31/enr.html"><strong aria-hidden="true">2.1.9.</strong> 31/ENR</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/33/discv5.html"><strong aria-hidden="true">2.1.10.</strong> 33/Discv5</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/34/peer-exchange.html"><strong aria-hidden="true">2.1.11.</strong> 34/Peer Exchange</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/36/bindings-api.html"><strong aria-hidden="true">2.1.12.</strong> 36/Bindings API</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/64/network.html"><strong aria-hidden="true">2.1.13.</strong> 64/Network</a></li><li class="chapter-item expanded "><a href="../../waku/standards/core/66/metadata.html"><strong aria-hidden="true">2.1.14.</strong> 66/Metadata</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/standards/application/index.html"><strong aria-hidden="true">2.2.</strong> Standards - Application</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/application/20/toy-eth-pm.html"><strong aria-hidden="true">2.2.1.</strong> 20/Toy ETH PM</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/26/payload.html"><strong aria-hidden="true">2.2.2.</strong> 26/Payload</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/53/x3dh.html"><strong aria-hidden="true">2.2.3.</strong> 53/X3DH</a></li><li class="chapter-item expanded "><a href="../../waku/standards/application/54/x3dh-sessions.html"><strong aria-hidden="true">2.2.4.</strong> 54/X3DH Sessions</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/index.html"><strong aria-hidden="true">2.3.</strong> Standards - Legacy</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/standards/legacy/6/waku1.html"><strong aria-hidden="true">2.3.1.</strong> 6/Waku1</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/7/data.html"><strong aria-hidden="true">2.3.2.</strong> 7/Data</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/8/mail.html"><strong aria-hidden="true">2.3.3.</strong> 8/Mail</a></li><li class="chapter-item expanded "><a href="../../waku/standards/legacy/9/rpc.html"><strong aria-hidden="true">2.3.4.</strong> 9/RPC</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/informational/index.html"><strong aria-hidden="true">2.4.</strong> Informational</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/informational/22/toy-chat.html"><strong aria-hidden="true">2.4.1.</strong> 22/Toy Chat</a></li><li class="chapter-item expanded "><a href="../../waku/informational/23/topics.html"><strong aria-hidden="true">2.4.2.</strong> 23/Topics</a></li><li class="chapter-item expanded "><a href="../../waku/informational/27/peers.html"><strong aria-hidden="true">2.4.3.</strong> 27/Peers</a></li><li class="chapter-item expanded "><a href="../../waku/informational/29/config.html"><strong aria-hidden="true">2.4.4.</strong> 29/Config</a></li><li class="chapter-item expanded "><a href="../../waku/informational/30/adaptive-nodes.html"><strong aria-hidden="true">2.4.5.</strong> 30/Adaptive Nodes</a></li></ol></li><li class="chapter-item expanded "><a href="../../waku/deprecated/index.html"><strong aria-hidden="true">2.5.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../waku/deprecated/5/waku0.html"><strong aria-hidden="true">2.5.1.</strong> 5/Waku0</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/16/rpc.html"><strong aria-hidden="true">2.5.2.</strong> 16/RPC</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/18/swap.html"><strong aria-hidden="true">2.5.3.</strong> 18/Swap</a></li><li class="chapter-item expanded "><a href="../../waku/deprecated/fault-tolerant-store.html"><strong aria-hidden="true">2.5.4.</strong> Fault Tolerant Store</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../nomos/index.html"><strong aria-hidden="true">3.</strong> Nomos</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/raw/index.html"><strong aria-hidden="true">3.1.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/raw/nomosda-encoding.html"><strong aria-hidden="true">3.1.1.</strong> NomosDA Encoding</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/nomosda-network.html"><strong aria-hidden="true">3.1.2.</strong> NomosDA Network</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-hardware-requirements.html"><strong aria-hidden="true">3.1.3.</strong> P2P Hardware Requirements</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-nat-solution.html"><strong aria-hidden="true">3.1.4.</strong> P2P NAT Solution</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-network-bootstrapping.html"><strong aria-hidden="true">3.1.5.</strong> P2P Network Bootstrapping</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/p2p-network.html"><strong aria-hidden="true">3.1.6.</strong> P2P Network</a></li><li class="chapter-item expanded "><a href="../../nomos/raw/sdp.html" class="active"><strong aria-hidden="true">3.1.7.</strong> SDP</a></li></ol></li><li class="chapter-item expanded "><a href="../../nomos/deprecated/index.html"><strong aria-hidden="true">3.2.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../nomos/deprecated/claro.html"><strong aria-hidden="true">3.2.1.</strong> Claro</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../codex/index.html"><strong aria-hidden="true">4.</strong> Codex</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../codex/raw/index.html"><strong aria-hidden="true">4.1.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../codex/raw/codex-block-exchange.html"><strong aria-hidden="true">4.1.1.</strong> Block Exchange</a></li><li class="chapter-item expanded "><a href="../../codex/raw/codex-marketplace.html"><strong aria-hidden="true">4.1.2.</strong> Marketplace</a></li></ol></li></ol></li><li class="chapter-item expanded "><a href="../../status/index.html"><strong aria-hidden="true">5.</strong> Status</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/24/curation.html"><strong aria-hidden="true">5.1.</strong> 24/Curation</a></li><li class="chapter-item expanded "><a href="../../status/28/featuring.html"><strong aria-hidden="true">5.2.</strong> 28/Featuring</a></li><li class="chapter-item expanded "><a href="../../status/55/1to1-chat.html"><strong aria-hidden="true">5.3.</strong> 55/1-to-1 Chat</a></li><li class="chapter-item expanded "><a href="../../status/56/communities.html"><strong aria-hidden="true">5.4.</strong> 56/Communities</a></li><li class="chapter-item expanded "><a href="../../status/61/community-history-service.html"><strong aria-hidden="true">5.5.</strong> 61/Community History Service</a></li><li class="chapter-item expanded "><a href="../../status/62/payloads.html"><strong aria-hidden="true">5.6.</strong> 62/Payloads</a></li><li class="chapter-item expanded "><a href="../../status/63/keycard-usage.html"><strong aria-hidden="true">5.7.</strong> 63/Keycard Usage</a></li><li class="chapter-item expanded "><a href="../../status/65/account-address.html"><strong aria-hidden="true">5.8.</strong> 65/Account Address</a></li><li class="chapter-item expanded "><a href="../../status/71/push-notification-server.html"><strong aria-hidden="true">5.9.</strong> 71/Push Notification Server</a></li><li class="chapter-item expanded "><a href="../../status/raw/index.html"><strong aria-hidden="true">5.10.</strong> Raw</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/raw/simple-scaling.html"><strong aria-hidden="true">5.10.1.</strong> Simple Scaling</a></li><li class="chapter-item expanded "><a href="../../status/raw/status-app-protocols.html"><strong aria-hidden="true">5.10.2.</strong> Status App Protocols</a></li><li class="chapter-item expanded "><a href="../../status/raw/status-mvds.html"><strong aria-hidden="true">5.10.3.</strong> Status MVDS</a></li><li class="chapter-item expanded "><a href="../../status/raw/url-data.html"><strong aria-hidden="true">5.10.4.</strong> URL Data</a></li><li class="chapter-item expanded "><a href="../../status/raw/url-scheme.html"><strong aria-hidden="true">5.10.5.</strong> URL Scheme</a></li></ol></li><li class="chapter-item expanded "><a href="../../status/deprecated/index.html"><strong aria-hidden="true">5.11.</strong> Deprecated</a></li><li><ol class="section"><li class="chapter-item expanded "><a href="../../status/deprecated/3rd-party.html"><strong aria-hidden="true">5.11.1.</strong> 3rd Party</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/account.html"><strong aria-hidden="true">5.11.2.</strong> Account</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/client.html"><strong aria-hidden="true">5.11.3.</strong> Client</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/dapp-browser-API-usage.html"><strong aria-hidden="true">5.11.4.</strong> Dapp Browser API Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/eips.html"><strong aria-hidden="true">5.11.5.</strong> EIPs</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/ethereum-usage.html"><strong aria-hidden="true">5.11.6.</strong> Ethereum Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/group-chat.html"><strong aria-hidden="true">5.11.7.</strong> Group Chat</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/IPFS-gateway-for-sticker-Pack.html"><strong aria-hidden="true">5.11.8.</strong> IPFS Gateway for Sticker Pack</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/keycard-usage-for-wallet-and-chat-keys.html"><strong aria-hidden="true">5.11.9.</strong> Keycard Usage for Wallet and Chat Keys</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/notifications.html"><strong aria-hidden="true">5.11.10.</strong> Notifications</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/payloads.html"><strong aria-hidden="true">5.11.11.</strong> Payloads</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/push-notification-server.html"><strong aria-hidden="true">5.11.12.</strong> Push Notification Server</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/secure-transport.html"><strong aria-hidden="true">5.11.13.</strong> Secure Transport</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/waku-mailserver.html"><strong aria-hidden="true">5.11.14.</strong> Waku Mailserver</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/waku-usage.html"><strong aria-hidden="true">5.11.15.</strong> Waku Usage</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/whisper-mailserver.html"><strong aria-hidden="true">5.11.16.</strong> Whisper Mailserver</a></li><li class="chapter-item expanded "><a href="../../status/deprecated/whisper-usage.html"><strong aria-hidden="true">5.11.17.</strong> Whisper Usage</a></li></ol></li></ol></li></ol>
|
|
</div>
|
|
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
|
|
<div class="sidebar-resize-indicator"></div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Track and set sidebar scroll position -->
|
|
<script>
|
|
var sidebarScrollbox = document.querySelector('#sidebar .sidebar-scrollbox');
|
|
sidebarScrollbox.addEventListener('click', function(e) {
|
|
if (e.target.tagName === 'A') {
|
|
sessionStorage.setItem('sidebar-scroll', sidebarScrollbox.scrollTop);
|
|
}
|
|
}, { passive: true });
|
|
var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
|
|
sessionStorage.removeItem('sidebar-scroll');
|
|
if (sidebarScrollTop) {
|
|
// preserve sidebar scroll position when navigating via links within sidebar
|
|
sidebarScrollbox.scrollTop = sidebarScrollTop;
|
|
} else {
|
|
// scroll sidebar to current active section when navigating via "next/previous chapter" buttons
|
|
var activeSection = document.querySelector('#sidebar .active');
|
|
if (activeSection) {
|
|
activeSection.scrollIntoView({ block: 'center' });
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<div id="page-wrapper" class="page-wrapper">
|
|
|
|
<div class="page">
|
|
<div id="menu-bar-hover-placeholder"></div>
|
|
<div id="menu-bar" class="menu-bar sticky">
|
|
<div class="left-buttons">
|
|
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
|
|
<i class="fa fa-bars"></i>
|
|
</label>
|
|
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
|
|
<i class="fa fa-paint-brush"></i>
|
|
</button>
|
|
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
|
|
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
|
|
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
|
|
</ul>
|
|
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
|
|
<i class="fa fa-search"></i>
|
|
</button>
|
|
</div>
|
|
|
|
<h1 class="menu-title">Vac RFC</h1>
|
|
|
|
<div class="right-buttons">
|
|
<a href="../../print.html" title="Print this book" aria-label="Print this book">
|
|
<i id="print-button" class="fa fa-print"></i>
|
|
</a>
|
|
<a href="https://github.com/vacp2p/rfc-index" title="Git repository" aria-label="Git repository">
|
|
<i id="git-repository-button" class="fa fa-github"></i>
|
|
</a>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div id="search-wrapper" class="hidden">
|
|
<form id="searchbar-outer" class="searchbar-outer">
|
|
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
|
|
</form>
|
|
<div id="searchresults-outer" class="searchresults-outer hidden">
|
|
<div id="searchresults-header" class="searchresults-header"></div>
|
|
<ul id="searchresults">
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
|
|
<script>
|
|
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
|
|
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
|
|
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
|
|
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
|
|
});
|
|
</script>
|
|
|
|
<div id="content" class="content">
|
|
<main>
|
|
<h1 id="nomos-sdp"><a class="header" href="#nomos-sdp">NOMOS-SDP</a></h1>
|
|
<div class="table-wrapper"><table><thead><tr><th>Field</th><th>Value</th></tr></thead><tbody>
|
|
<tr><td>Name</td><td>Nomos Service Declaration Protocol Specification</td></tr>
|
|
<tr><td>Status</td><td>raw</td></tr>
|
|
<tr><td>Editor</td><td>Marcin Pawlowski <a href="mailto:marcin@status.im">marcin@status.im</a></td></tr>
|
|
<tr><td>Contributors</td><td>Mehmet <a href="mailto:mehmet@status.im">mehmet@status.im</a>, Daniel Sanchez Quiros <a href="mailto:danielsq@status.im">danielsq@status.im</a>, Álvaro Castro-Castilla <a href="mailto:alvaro@status.im">alvaro@status.im</a>, Thomas Lavaur <a href="mailto:thomaslavaur@status.im">thomaslavaur@status.im</a>, Filip Dimitrijevic <a href="mailto:filip@status.im">filip@status.im</a>, Gusto Bacvinka <a href="mailto:augustinas@status.im">augustinas@status.im</a>, David Rusu <a href="mailto:davidrusu@status.im">davidrusu@status.im</a></td></tr>
|
|
</tbody></table>
|
|
</div><!-- timeline:start -->
|
|
<h2 id="timeline"><a class="header" href="#timeline">Timeline</a></h2>
|
|
<ul>
|
|
<li><strong>2025-12-22</strong> — <a href="https://github.com/vacp2p/rfc-index/blob/0f1855edcf68ef982c4ce478b67d660809aa9830/docs/nomos/raw/sdp.md"><code>0f1855e</code></a> — Chore/fix headers (#239)</li>
|
|
<li><strong>2025-12-22</strong> — <a href="https://github.com/vacp2p/rfc-index/blob/b1a578393edf8487ccc97a5f25b25af9bf41efb3/docs/nomos/raw/sdp.md"><code>b1a5783</code></a> — Chore/mdbook updates (#237)</li>
|
|
<li><strong>2025-12-18</strong> — <a href="https://github.com/vacp2p/rfc-index/blob/d03e699084774ebecef9c6d4662498907c5e2080/docs/nomos/raw/sdp.md"><code>d03e699</code></a> — ci: add mdBook configuration (#233)</li>
|
|
<li><strong>2025-09-25</strong> — <a href="https://github.com/vacp2p/rfc-index/blob/53dfb97bc70601433806762c132335269bd16991/nomos/raw/sdp.md"><code>53dfb97</code></a> — Created nomos/raw/sdp.md draft (#157)</li>
|
|
</ul>
|
|
<!-- timeline:end -->
|
|
<h2 id="introduction"><a class="header" href="#introduction">Introduction</a></h2>
|
|
<p>This document defines a mechanism enabling validators to declare their participation in specific protocols that require a known and agreed-upon list of participants. Some examples of this are Data Availability and the Blend Network. We create a single repository of identifiers which is used to establish secure communication between validators and provide services. Before being admitted to the repository, the validator proves that it locked at least a minimum stake.</p>
|
|
<h2 id="requirements"><a class="header" href="#requirements">Requirements</a></h2>
|
|
<p>The requirements for the protocol are defined as follows:</p>
|
|
<ul>
|
|
<li>A declaration must be backed by a confirmation that the sender of the declaration owns a certain value of the stake.</li>
|
|
<li>A declaration is valid until it is withdrawn or is not used for a service-specific amount of time.</li>
|
|
</ul>
|
|
<h2 id="overview"><a class="header" href="#overview">Overview</a></h2>
|
|
<p>The SDP enables nodes to declare their eligibility to serve a specific service in the system, and withdraw their declarations.</p>
|
|
<h3 id="protocol-actions"><a class="header" href="#protocol-actions">Protocol Actions</a></h3>
|
|
<p>The protocol defines the following actions:</p>
|
|
<ul>
|
|
<li><strong>Declare</strong>: A node sends a declaration that confirms its willingness to provide a specific service, which is confirmed by locking a threshold of stake.</li>
|
|
<li><strong>Active</strong>: A node marks that its participation in the protocol is active according to the service-specific activity logic. This action enables the protocol to monitor the node's activity. We utilize this as a non-intrusive differentiator of node activity. It is crucial to exclude inactive nodes from the set of active nodes, as it enhances the stability of services.</li>
|
|
<li><strong>Withdraw</strong>: A node withdraws its declaration and stops providing a service.</li>
|
|
</ul>
|
|
<p>The logic of the protocol is straightforward:</p>
|
|
<ol>
|
|
<li>A node sends a declaration message for a specific service and proves it has a minimum stake.</li>
|
|
<li>The declaration is registered on the ledger, and the node can commence its service according to the service-specific service logic.</li>
|
|
<li>After a service-specific service-providing time, the node confirms its activity.</li>
|
|
<li>The node must confirm its activity with a service-specific minimum frequency; otherwise, its declaration is inactive.</li>
|
|
<li>After the service-specific locking period, the node can send a withdrawal message, and its declaration is removed from the ledger, which means that the node will no longer provide the service.</li>
|
|
</ol>
|
|
<p>💡 The protocol messages are subject to a finality that means messages become part of the immutable ledger after a delay. The delay at which it happens is defined by the consensus.</p>
|
|
<h2 id="construction"><a class="header" href="#construction">Construction</a></h2>
|
|
<p>In this section, we present the main constructions of the protocol. First, we start with data definitions. Second, we describe the protocol actions. Finally, we present part of the Bedrock Mantle design responsible for storing and processing SDP-related messages and data.</p>
|
|
<h3 id="data"><a class="header" href="#data">Data</a></h3>
|
|
<p>In this section, we discuss and define data types, messages, and their storage.</p>
|
|
<h4 id="service-types"><a class="header" href="#service-types">Service Types</a></h4>
|
|
<p>We define the following services which can be used for service declaration:</p>
|
|
<ul>
|
|
<li><code>BN</code>: for Blend Network service.</li>
|
|
<li><code>DA</code>: for Data Availability service.</li>
|
|
</ul>
|
|
<pre><code class="language-python">class ServiceType(Enum):
|
|
BN="BN" # Blend Network
|
|
DA="DA" # Data Availability
|
|
</code></pre>
|
|
<p>A declaration can be generated for any of the services above. Any declaration that is not one of the above must be rejected. The number of services might grow in the future.</p>
|
|
<h4 id="minimum-stake"><a class="header" href="#minimum-stake">Minimum Stake</a></h4>
|
|
<p>The minimum stake is a global value that defines the minimum stake a node must have to perform any service.</p>
|
|
<p>The <code>MinStake</code> is a structure that holds the value of the stake <code>stake_threshold</code> and the block number it was set at: <code>timestamp</code>.</p>
|
|
<pre><code class="language-python">class MinStake:
|
|
stake_threshold: StakeThreshold
|
|
timestamp: BlockNumber
|
|
</code></pre>
|
|
<p>The <code>stake_thresholds</code> is a structure aggregating all defined <code>MinStake</code> values.</p>
|
|
<pre><code class="language-python">stake_thresholds: list[MinStake]
|
|
</code></pre>
|
|
<p>For more information on how the minimum stake is calculated, please refer to the Nomos documentation.</p>
|
|
<h4 id="service-parameters"><a class="header" href="#service-parameters">Service Parameters</a></h4>
|
|
<p>The service parameters structure defines the parameters set necessary for correctly handling interaction between the protocol and services. Each of the service types defined above must be mapped to a set of the following parameters:</p>
|
|
<ul>
|
|
<li><code>session_length</code> defines the session length expressed as the number of blocks; the sessions are counted from block <code>timestamp</code>.</li>
|
|
<li><code>lock_period</code> defines the minimum time (as a number of sessions) during which the declaration cannot be withdrawn, this time must include the period necessary for finalizing the declaration (which might be implicit) and provision of a service for least a single session; it can be expressed as the number of blocks by multiplying its value by the <code>session_length</code>.</li>
|
|
<li><code>inactivity_period</code> defines the maximum time (as a number of sessions) during which an activation message must be sent; otherwise, the declaration is considered inactive; it can be expressed as the number of blocks by multiplying its value by the <code>session_length</code>.</li>
|
|
<li><code>retention_period</code> defines the time (as a number of sessions) after which the declaration can be safely deleted by the Garbage Collection mechanism; it can be expressed as the number of blocks by multiplying its value by the <code>session_length</code>.</li>
|
|
<li><code>timestamp</code> defines the block number at which the parameter was set.</li>
|
|
</ul>
|
|
<pre><code class="language-python">class ServiceParameters:
|
|
session_length: NumberOfBlocks
|
|
lock_period: NumberOfSessions
|
|
inactivity_period: NumberOfSessions
|
|
retention_period: NumberOfSessions
|
|
timestamp: BlockNumber
|
|
</code></pre>
|
|
<p>The <code>parameters</code> is a structure aggregating all defined <code>ServiceParameters</code> values.</p>
|
|
<pre><code class="language-python">parameters: list[ServiceParameters]
|
|
</code></pre>
|
|
<h4 id="identifiers"><a class="header" href="#identifiers">Identifiers</a></h4>
|
|
<p>We define the following set of identifiers which are used for service-specific cryptographic operations:</p>
|
|
<ul>
|
|
<li><code>provider_id</code>: used to sign the SDP messages and to establish secure links between validators; it is <code>Ed25519PublicKey</code>.</li>
|
|
<li><code>zk_id</code>: used for zero-knowledge operations by the validator that includes rewarding (<a href="https://www.notion.so/Zero-Knowledge-Signature-Scheme-ZkSignature-21c261aa09df8119bfb2dc74a3430df6?pvs=21">Zero Knowledge Signature Scheme (ZkSignature)</a>).</li>
|
|
</ul>
|
|
<h4 id="locators"><a class="header" href="#locators">Locators</a></h4>
|
|
<p>A <code>Locator</code> is the address of a validator which is used to establish secure communication between validators. It follows the <a href="https://docs.libp2p.io/concepts/fundamentals/addressing/">multiaddr addressing scheme from libp2p</a>, but it must contain only the location part and must not contain the node identity (<code>peer_id</code>).</p>
|
|
<p>The <code>provider_id</code> must be used as the node identity. Therefore, the <code>Locator</code> must be completed by adding the <code>provider_id</code> at the end of it, which makes the <code>Locator</code> usable in the context of libp2p.</p>
|
|
<p>The length of the <code>Locator</code> is restricted to 329 characters.</p>
|
|
<p>The syntax of every <code>Locator</code> entry must be validated.</p>
|
|
<p><strong>The common formatting of every</strong> <code>Locator</code> <strong>must be applied to maintain its unambiguity, to make deterministic ID generation work consistently.</strong> The <code>Locator</code> must at least contain only lower case letters and every part of the address must be explicit (no implicit defaults).</p>
|
|
<h4 id="declaration-message"><a class="header" href="#declaration-message">Declaration Message</a></h4>
|
|
<p>The construction of the declaration message is as follows:</p>
|
|
<pre><code class="language-python">class DeclarationMessage:
|
|
service_type: ServiceType
|
|
locators: list[Locator]
|
|
provider_id: Ed25519PublicKey
|
|
zk_id: ZkPublicKey
|
|
</code></pre>
|
|
<p>The <code>locators</code> list length must be limited to reduce the potential for abuse. Therefore, the length of the list cannot be longer than 8.</p>
|
|
<p>The message must be signed by the <code>provider_id</code> key to prove ownership of the key that is used for network-level authentication of the validator. The message is also signed by the <code>zk_id</code> key (by default all Mantle transactions are signed with <code>zk_id</code> key).</p>
|
|
<h4 id="declaration-storage"><a class="header" href="#declaration-storage">Declaration Storage</a></h4>
|
|
<p>Only valid declaration messages can be stored on the ledger. We define the <code>DeclarationInfo</code> as follows:</p>
|
|
<pre><code class="language-python">class DeclarationInfo:
|
|
service: ServiceType
|
|
provider_id: Ed25519PublicKey
|
|
zk_id: ZkPublicKey
|
|
locators: list[Locator]
|
|
created: BlockNumber
|
|
active: BlockNumber
|
|
withdrawn: BlockNumber
|
|
nonce: Nonce
|
|
</code></pre>
|
|
<p>Where:</p>
|
|
<ul>
|
|
<li><code>service</code> defines the service type of the declaration;</li>
|
|
<li><code>provider_id</code> is an <code>Ed25519PublicKey</code> used to sign the message by the validator;</li>
|
|
<li><code>zk_id</code> is used for zero-knowledge operations by the validator that includes rewarding (<a href="https://www.notion.so/Zero-Knowledge-Signature-Scheme-ZkSignature-21c261aa09df8119bfb2dc74a3430df6?pvs=21">Zero Knowledge Signature Scheme (ZkSignature)</a>);</li>
|
|
<li><code>locators</code> are a copy of the <code>locators</code> from the <code>DeclarationMessage</code>;</li>
|
|
<li><code>created</code> refers to the block number of the block that contained the declaration;</li>
|
|
<li><code>active</code> refers to the latest block number for which the active message was sent (it is set to <code>created</code> by default);</li>
|
|
<li><code>withdrawn</code> refers to the block number for which the service declaration was withdrawn (it is set to 0 by default).</li>
|
|
<li>The <code>nonce</code> must be set to 0 for the declaration message and must increase monotonically by every message sent for the <code>declaration_id</code>.</li>
|
|
</ul>
|
|
<p>We also define the <code>declaration_id</code> (of a <code>DeclarationId</code> type) that is the unique identifier of <code>DeclarationInfo</code> calculated as a hash of the concatenation of <code>service</code>, <code>provider_id</code>, <code>locators</code> and <code>zk_id</code>. The implementation of the hash function is <code>blake2b</code> using 256 bits of the output.</p>
|
|
<pre><code class="language-python">declaration_id = Hash(service||provider_id||zk_id||locators)
|
|
</code></pre>
|
|
<p>The <code>declaration_id</code> is not stored as part of the <code>DeclarationInfo</code> but it is used to index it.</p>
|
|
<p>All <code>DeclarationInfo</code> references are stored in the <code>declarations</code> and are indexed by <code>declaration_id</code>.</p>
|
|
<pre><code class="language-python">declarations: list[declaration_id]
|
|
</code></pre>
|
|
<h4 id="active-message"><a class="header" href="#active-message">Active Message</a></h4>
|
|
<p>The construction of the active message is as follows:</p>
|
|
<pre><code class="language-python">class ActiveMessage:
|
|
declaration_id: DeclarationId
|
|
nonce: Nonce
|
|
metadata: Metadata
|
|
</code></pre>
|
|
<p>where <code>metadata</code> is a service-specific node activeness metadata.</p>
|
|
<p>The message must be signed by the <code>zk_id</code> key associated with the <code>declaration_id</code>.</p>
|
|
<p>The <code>nonce</code> must increase monotonically by every message sent for the <code>declaration_id</code>.</p>
|
|
<h4 id="withdraw-message"><a class="header" href="#withdraw-message">Withdraw Message</a></h4>
|
|
<p>The construction of the withdraw message is as follows:</p>
|
|
<pre><code class="language-python">class WithdrawMessage:
|
|
declaration_id: DeclarationId
|
|
nonce: Nonce
|
|
</code></pre>
|
|
<p>The message must be signed by the <code>zk_id</code> key from the <code>declaration_id</code>.</p>
|
|
<p>The <code>nonce</code> must increase monotonically by every message sent for the <code>declaration_id</code>.</p>
|
|
<h4 id="indexing"><a class="header" href="#indexing">Indexing</a></h4>
|
|
<p>Every event must be correctly indexed to enable lighter synchronization of the changes. Therefore, we index every <code>declaration_id</code> according to <code>EventType</code>, <code>ServiceType</code>, and <code>Timestamp</code>. Where <code>EventType = { "created", "active", "withdrawn" }</code> follows the type of the message.</p>
|
|
<pre><code class="language-python">events = {
|
|
event_type: {
|
|
service_type: {
|
|
timestamp: {
|
|
declarations: list[declaration_id]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</code></pre>
|
|
<h3 id="protocol"><a class="header" href="#protocol">Protocol</a></h3>
|
|
<h4 id="declare"><a class="header" href="#declare">Declare</a></h4>
|
|
<p>The Declare action associates a validator with a service it wants to provide. It requires sending a valid <code>DeclarationMessage</code> (as defined in Declaration Message), which is then processed (as defined below) and stored (as defined in Declaration Storage).</p>
|
|
<p>The declaration message is considered valid when all of the following are met:</p>
|
|
<ul>
|
|
<li>The sender meets the stake requirements.</li>
|
|
<li>The <code>declaration_id</code> is unique.</li>
|
|
<li>The sender knows the secret behind the <code>provider_id</code> identifier.</li>
|
|
<li>The length of the <code>locators</code> list must not be longer than 8.</li>
|
|
<li>The <code>nonce</code> is increasing monotonically.</li>
|
|
</ul>
|
|
<p>If all of the above conditions are fulfilled, then the message is stored on the ledger; otherwise, the message is discarded.</p>
|
|
<h4 id="active"><a class="header" href="#active">Active</a></h4>
|
|
<p>The Active action enables marking the provider as actively providing a service. It requires sending a valid <code>ActiveMessage</code> (as defined in Active Message), which is relayed to the service-specific node activity logic (as indicated by the service type in Common SDP Structures).</p>
|
|
<p>The Active action updates the <code>active</code> value of the <code>DeclarationInfo</code>, which means that it also activates inactive (but not expired) providers.</p>
|
|
<p>The SDP active action logic is:</p>
|
|
<ol>
|
|
<li>A node sends a <code>ActiveMessage</code> transaction.</li>
|
|
<li>The <code>ActiveMessage</code> is verified by the SDP logic.
|
|
a. The <code>declaration_id</code> returns an existing <code>DeclarationInfo</code>.
|
|
b. The transaction containing <code>ActiveMessage</code> is signed by the <code>zk_id</code>.
|
|
c. The <code>withdrawn</code> from the <code>DeclarationInfo</code> is set to zero.
|
|
d. The <code>nonce</code> is increasing monotonically.</li>
|
|
<li>If any of these conditions fail, discard the message and stop processing.</li>
|
|
<li>The message is processed by the service-specific activity logic alongside the <code>active</code> value indicating the period since the last active message was sent. The <code>active</code> value comes from the <code>DeclarationInfo</code>.</li>
|
|
<li>If the service-specific activity logic approves the node active message, then the <code>active</code> field of the <code>DeclarationInfo</code> is set to the current block height.</li>
|
|
</ol>
|
|
<h4 id="withdraw"><a class="header" href="#withdraw">Withdraw</a></h4>
|
|
<p>The withdraw action enables a withdrawal of a service declaration. It requires sending a valid <code>WithdrawMessage</code> (as defined in Withdraw Message). The withdrawal cannot happen before the end of the locking period, which is defined as the number of blocks counted since <code>created</code>. This lock period is stored as <code>lock_period</code> in the Service Parameters.</p>
|
|
<p>The logic of the withdraw action is:</p>
|
|
<ol>
|
|
<li>A node sends a <code>WithdrawMessage</code> transaction.</li>
|
|
<li>The <code>WithdrawMessage</code> is verified by the SDP logic:
|
|
a. The <code>declaration_id</code> returns an existing <code>DeclarationInfo</code>.
|
|
b. The transaction containing <code>WithdrawMessage</code> is signed by the <code>zk_id</code>.
|
|
c. The <code>withdrawn</code> from <code>DeclarationInfo</code> is set to zero.
|
|
d. The <code>nonce</code> is increasing monotonically.</li>
|
|
<li>If any of the above is not correct, then discard the message and stop.</li>
|
|
<li>Set the <code>withdrawn</code> from the <code>DeclarationInfo</code> to the current block height.</li>
|
|
<li>Unlock the stake.</li>
|
|
</ol>
|
|
<h4 id="garbage-collection"><a class="header" href="#garbage-collection">Garbage Collection</a></h4>
|
|
<p>The protocol requires a garbage collection mechanism that periodically removes unused <code>DeclarationInfo</code> entries.</p>
|
|
<p>The logic of garbage collection is:</p>
|
|
<p>For every <code>DeclarationInfo</code> in the <code>declarations</code> set, remove the entry if either:</p>
|
|
<ol>
|
|
<li>The entry is past the retention period: <code>withdrawn + retention_period < current_block_height</code>.</li>
|
|
<li>The entry is inactive beyond the inactivity and retention periods: <code>active + inactivity_period + retention_period < current_block_height</code>.</li>
|
|
</ol>
|
|
<h4 id="query"><a class="header" href="#query">Query</a></h4>
|
|
<p>The protocol must enable querying the ledger in at least the following manner:</p>
|
|
<ul>
|
|
<li><code>GetAllProviderId(timestamp)</code>, returns all <code>provider_id</code>s associated with the <code>timestamp</code>.</li>
|
|
<li><code>GetAllProviderIdSince(timestamp)</code>, returns all <code>provider_id</code>s since the <code>timestamp</code>.</li>
|
|
<li><code>GetAllDeclarationInfo(timestamp)</code>, returns all <code>DeclarationInfo</code> entries associated with the <code>timestamp</code>.</li>
|
|
<li><code>GetAllDeclarationInfoSince(timestamp)</code>, returns all <code>DeclarationInfo</code> entries since the <code>timestamp</code>.</li>
|
|
<li><code>GetDeclarationInfo(provider_id)</code>, returns the <code>DeclarationInfo</code> entry identified by the <code>provider_id</code>.</li>
|
|
<li><code>GetDeclarationInfo(declaration_id)</code>, returns the <code>DeclarationInfo</code> entry identified by the <code>declaration_id</code>.</li>
|
|
<li><code>GetAllServiceParameters(timestamp)</code>, returns all entries of the <code>ServiceParameters</code> store for the requested <code>timestamp</code>.</li>
|
|
<li><code>GetAllServiceParametersSince(timestamp)</code>, returns all entries of the <code>ServiceParameters</code> store since the requested <code>timestamp</code>.</li>
|
|
<li><code>GetServiceParameters(service_type, timestamp)</code>, returns the service parameter entry from the <code>ServiceParameters</code> store of a <code>service_type</code> for a specified <code>timestamp</code>.</li>
|
|
<li><code>GetMinStake(timestamp)</code>, returns the <code>MinStake</code> structure at the requested <code>timestamp</code>.</li>
|
|
<li><code>GetMinStakeSince(timestamp)</code>, returns a set of <code>MinStake</code> structures since the requested <code>timestamp</code>.</li>
|
|
</ul>
|
|
<p>The query must return an error if the retention period for the delegation has passed and the requested information is not available.</p>
|
|
<p>The list of queries may be extended.</p>
|
|
<p>Every query must return information for a finalized state only.</p>
|
|
<h3 id="mantle-and-zk-proof"><a class="header" href="#mantle-and-zk-proof">Mantle and ZK Proof</a></h3>
|
|
<p>For more information about the Mantle and ZK proofs, please refer to <a href="https://www.notion.so/Mantle-Specification-21c261aa09df810c8820fab1d78b53d9?pvs=21">Mantle Specification</a>.</p>
|
|
<h2 id="appendix"><a class="header" href="#appendix">Appendix</a></h2>
|
|
<h3 id="future-improvements"><a class="header" href="#future-improvements">Future Improvements</a></h3>
|
|
<p>Refer to the <a href="https://www.notion.so/Mantle-Specification-21c261aa09df810c8820fab1d78b53d9?pvs=21">Mantle Specification</a> for a list of potential improvements to the protocol.</p>
|
|
<h2 id="references"><a class="header" href="#references">References</a></h2>
|
|
<ul>
|
|
<li>Mantle and ZK Proof: <a href="https://www.notion.so/Mantle-Specification-21c261aa09df810c8820fab1d78b53d9?pvs=21">Mantle Specification</a></li>
|
|
<li>Ed25519 Digital Signatures: <a href="https://datatracker.ietf.org/doc/html/rfc8032">RFC 8032</a></li>
|
|
<li>BLAKE2b Cryptographic Hash: <a href="https://datatracker.ietf.org/doc/html/rfc7693">RFC 7693</a></li>
|
|
<li>libp2p Multiaddr: <a href="https://docs.libp2p.io/concepts/fundamentals/addressing/">Addressing Specification</a></li>
|
|
<li>Zero Knowledge Signatures: <a href="https://www.notion.so/Zero-Knowledge-Signature-Scheme-ZkSignature-21c261aa09df8119bfb2dc74a3430df6?pvs=21">ZkSignature Scheme</a></li>
|
|
</ul>
|
|
<h2 id="copyright"><a class="header" href="#copyright">Copyright</a></h2>
|
|
<p>Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0</a>.</p>
|
|
|
|
</main>
|
|
|
|
<nav class="nav-wrapper" aria-label="Page navigation">
|
|
<!-- Mobile navigation buttons -->
|
|
<a rel="prev" href="../../nomos/raw/p2p-network.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
<i class="fa fa-angle-left"></i>
|
|
</a>
|
|
|
|
<a rel="next prefetch" href="../../nomos/deprecated/index.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
<i class="fa fa-angle-right"></i>
|
|
</a>
|
|
|
|
<div style="clear: both"></div>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="nav-wide-wrapper" aria-label="Page navigation">
|
|
<a rel="prev" href="../../nomos/raw/p2p-network.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
|
|
<i class="fa fa-angle-left"></i>
|
|
</a>
|
|
|
|
<a rel="next prefetch" href="../../nomos/deprecated/index.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
|
|
<i class="fa fa-angle-right"></i>
|
|
</a>
|
|
</nav>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
window.playground_copyable = true;
|
|
</script>
|
|
|
|
|
|
<script src="../../elasticlunr.min.js"></script>
|
|
<script src="../../mark.min.js"></script>
|
|
<script src="../../searcher.js"></script>
|
|
|
|
<script src="../../clipboard.min.js"></script>
|
|
<script src="../../highlight.js"></script>
|
|
<script src="../../book.js"></script>
|
|
|
|
<!-- Custom JS scripts -->
|
|
<script src="../../scripts/rfc-index.js"></script>
|
|
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|