From 0b9c55a74ef7eb3df8ba4657c98d36aac6f13430 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Wed, 4 Dec 2024 18:26:54 +0100 Subject: [PATCH 1/6] docs: create 'Advanced' sub section of 'About Mithril' --- docs/website/root/glossary.md | 18 +++++++++--------- docs/website/root/manual/develop/README.mdx | 2 +- .../develop/nodes/mithril-aggregator.md | 4 ++-- .../nodes/mithril-client-library-wasm.md | 2 +- .../develop/nodes/mithril-client-library.md | 4 ++-- .../manual/develop/nodes/mithril-client.md | 4 ++-- .../manual/develop/nodes/mithril-signer.md | 4 ++-- .../manual/develop/protocol-simulation.md | 2 +- docs/website/root/mithril/advanced/README.mdx | 5 +++++ .../root/mithril/advanced/_category_.json | 6 ++++++ .../advanced/mithril-network/README.mdx | 5 +++++ .../advanced/mithril-network/_category_.json | 6 ++++++ .../mithril-network/aggregator.md | 4 ++-- .../mithril-network/architecture-c4.puml | 0 .../mithril-network/architecture.md | 4 ++-- .../{ => advanced}/mithril-network/client.md | 4 ++-- .../images/aggregator-runtime.jpg | Bin .../mithril-network/images/architecture.svg | 0 .../mithril-network/images/signer-runtime.jpg | Bin .../images/signer-workflow.png | Bin .../{ => advanced}/mithril-network/signer.md | 4 ++-- .../advanced/mithril-protocol/README.mdx | 5 +++++ .../advanced/mithril-protocol/_category_.json | 6 ++++++ .../mithril-protocol/certificates.md | 6 +++--- .../images/certificate-chain.jpg | Bin .../mithril-protocol/protocol.md | 6 +++--- .../mithril-protocol/security.md | 2 +- .../mithril/{ => advanced}/threat-model.md | 4 ++-- docs/website/root/mithril/intro.md | 14 +++++++------- .../mithril/mithril-network/_category_.json | 10 ---------- .../mithril/mithril-protocol/_category_.json | 10 ---------- 31 files changed, 77 insertions(+), 64 deletions(-) create mode 100644 docs/website/root/mithril/advanced/README.mdx create mode 100644 docs/website/root/mithril/advanced/_category_.json create mode 100644 docs/website/root/mithril/advanced/mithril-network/README.mdx create mode 100644 docs/website/root/mithril/advanced/mithril-network/_category_.json rename docs/website/root/mithril/{ => advanced}/mithril-network/aggregator.md (97%) rename docs/website/root/mithril/{ => advanced}/mithril-network/architecture-c4.puml (100%) rename docs/website/root/mithril/{ => advanced}/mithril-network/architecture.md (89%) rename docs/website/root/mithril/{ => advanced}/mithril-network/client.md (97%) rename docs/website/root/mithril/{ => advanced}/mithril-network/images/aggregator-runtime.jpg (100%) rename docs/website/root/mithril/{ => advanced}/mithril-network/images/architecture.svg (100%) rename docs/website/root/mithril/{ => advanced}/mithril-network/images/signer-runtime.jpg (100%) rename docs/website/root/mithril/{ => advanced}/mithril-network/images/signer-workflow.png (100%) rename docs/website/root/mithril/{ => advanced}/mithril-network/signer.md (97%) create mode 100644 docs/website/root/mithril/advanced/mithril-protocol/README.mdx create mode 100644 docs/website/root/mithril/advanced/mithril-protocol/_category_.json rename docs/website/root/mithril/{ => advanced}/mithril-protocol/certificates.md (96%) rename docs/website/root/mithril/{ => advanced}/mithril-protocol/images/certificate-chain.jpg (100%) rename docs/website/root/mithril/{ => advanced}/mithril-protocol/protocol.md (96%) rename docs/website/root/mithril/{ => advanced}/mithril-protocol/security.md (99%) rename docs/website/root/mithril/{ => advanced}/threat-model.md (99%) delete mode 100644 docs/website/root/mithril/mithril-network/_category_.json delete mode 100644 docs/website/root/mithril/mithril-protocol/_category_.json diff --git a/docs/website/root/glossary.md b/docs/website/root/glossary.md index 17888fc2444..6aeedf1ae8c 100644 --- a/docs/website/root/glossary.md +++ b/docs/website/root/glossary.md @@ -34,7 +34,7 @@ A Cardano transactions set snapshot represents, in a succinct way, the Cardano t The Mithril aggregator combines the produced [multi-signature](#multi-signature) and some metadata into a Mithril certificate that will be later used by the [Mithril client](#mithril-client) to verify the authenticity of a [snapshot](#snapshot). The certificates are chained so that the [stake distribution](#stake-distribution) used to create the signatures is verifiably genuine. -> More information is available on the [certificates page](./mithril/mithril-protocol/certificates.md). +> More information is available on the [certificates page](./mithril/advanced/mithril-protocol/certificates.md). ## Epoch @@ -48,7 +48,7 @@ Inside the database of a [Cardano node](#cardano-node), the blockchain state is For each [beacon](#beacon), the [Mithril signers](#mithril-signer) will compute on their end a message representing the blockchain state, and sign it with their verification keys to create an [individual signature](#individual-signature). Upon winning one or more lotteries, the Mithril signer will be able to use this individual signature to participate in the creation of a [multi-signature](#multi-signature). -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Mithril aggregator @@ -56,37 +56,37 @@ The Mithril aggregator is a trustless node of the [Mithril network](#mithril-net It is also in charge of creating and storing the [snapshot](#snapshot) archive. -> More information is available on the [aggregator page](./mithril/mithril-network/aggregator.md). +> More information is available on the [aggregator page](./mithril/advanced/mithril-network/aggregator.md). ## Mithril client The Mithril client node within the [Mithril network](#mithril-network) is used to restore a [Cardano full node](#cardano-node) by retrieving, from a [Mithril aggregator](#mithril-aggregator), a remote [snapshot](#snapshot) and its [certificate](#certificate) chain. Finally, it is used to verify snapshot and certificate validity using the Mithril cryptographic primitives. -> More information is available on the [client page](./mithril/mithril-network/client.md). +> More information is available on the [client page](./mithril/advanced/mithril-network/client.md). ## Mithril network In its current version, the Mithril network is a network of nodes responsible for creating [snapshots](#snapshot) and [certificates](#certificate) that enable fast bootstrap of a [Cardano node](#cardano-node). It runs on top of the [Cardano network](#cardano-network). -> More information is available on the [architecture page](./mithril/mithril-network/architecture.md). +> More information is available on the [architecture page](./mithril/advanced/mithril-network/architecture.md). ## Mithril protocol The Mithril protocol allows stakeholders in a proof-of-stake blockchain network to individually sign messages that are aggregated into a multi-signature which guarantees that they represent a minimum share of the total stake. -> More information is on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Mithril signer The Mithril signer is a node of the [Mithril network](#mithril-network) that works transparently on top of the [stake pool operator](#stake-pool-operator-spo) Cardano nodes and which individually signs the ledger state. -> More information is available on the [signer page](./mithril/mithril-network/signer.md). +> More information is available on the [signer page](./mithril/advanced/mithril-network/signer.md). ## Multi-signature The Mithril multi-signature is an aggregate of [individual signatures](#individual-signature), which guarantees that a minimum share of the total stake has participated in its creation. -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Snapshot @@ -106,4 +106,4 @@ A stake pool operator, also known as an SPO, represents a party that holds (via To create [individual signatures](#individual-signature), [Mithril signers](#mithril-signer) must register their signing public key: the verification key. To guarantee their genuineness, they are signed by the associated [Cardano key pair](#cardano-key-pair). It is worth mentioning that a [Mithril signer](#mithril-signer) must be aware of the verification keys of all the other Mithril signers to produce valid individual signatures. -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). diff --git a/docs/website/root/manual/develop/README.mdx b/docs/website/root/manual/develop/README.mdx index a85c718459b..bb5d30cabbe 100644 --- a/docs/website/root/manual/develop/README.mdx +++ b/docs/website/root/manual/develop/README.mdx @@ -22,6 +22,6 @@ This node verifies and restores a snapshot along with other types of data, facil :::tip -For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/mithril-protocol/protocol.md) section. +For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/advanced/mithril-protocol/protocol.md) section. ::: diff --git a/docs/website/root/manual/develop/nodes/mithril-aggregator.md b/docs/website/root/manual/develop/nodes/mithril-aggregator.md index 18f541cd820..bd7270716d6 100644 --- a/docs/website/root/manual/develop/nodes/mithril-aggregator.md +++ b/docs/website/root/manual/develop/nodes/mithril-aggregator.md @@ -14,9 +14,9 @@ Mithril aggregator is responsible for collecting individual signatures from the :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril aggregator**, please see the [aggregator node](../../../mithril/mithril-network/aggregator.md) overview. +- For more information about the **Mithril aggregator**, please see the [aggregator node](../../../mithril/advanced/mithril-network/aggregator.md) overview. ::: diff --git a/docs/website/root/manual/develop/nodes/mithril-client-library-wasm.md b/docs/website/root/manual/develop/nodes/mithril-client-library-wasm.md index 90780a81421..9101a9278b7 100644 --- a/docs/website/root/manual/develop/nodes/mithril-client-library-wasm.md +++ b/docs/website/root/manual/develop/nodes/mithril-client-library-wasm.md @@ -20,7 +20,7 @@ It is responsible for handling the different types of data certified by Mithril :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview. +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview. ::: diff --git a/docs/website/root/manual/develop/nodes/mithril-client-library.md b/docs/website/root/manual/develop/nodes/mithril-client-library.md index 5f5876cc5d1..0342695d43e 100644 --- a/docs/website/root/manual/develop/nodes/mithril-client-library.md +++ b/docs/website/root/manual/develop/nodes/mithril-client-library.md @@ -20,9 +20,9 @@ It is responsible for handling the different types of data certified by Mithril :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril client** node, please see [this overview](../../../mithril/mithril-network/client.md) +- For more information about the **Mithril client** node, please see [this overview](../../../mithril/advanced/mithril-network/client.md) - Check out the [`Bootstrap a Cardano node`](../../getting-started/bootstrap-cardano-node.md) guide. diff --git a/docs/website/root/manual/develop/nodes/mithril-client.md b/docs/website/root/manual/develop/nodes/mithril-client.md index 08cebf630a2..24c97c24fea 100644 --- a/docs/website/root/manual/develop/nodes/mithril-client.md +++ b/docs/website/root/manual/develop/nodes/mithril-client.md @@ -15,10 +15,10 @@ Mithril client is responsible for restoring the **Cardano** blockchain on an emp :::tip - For more information about the **Mithril network**, please see - the [architecture](../../../mithril/mithril-network/architecture.md) overview + the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview - For more information about the **Mithril client** node, please - see [this overview](../../../mithril/mithril-network/client.md) + see [this overview](../../../mithril/advanced/mithril-network/client.md) - Check out the [`Bootstrap a Cardano node`](../../getting-started/bootstrap-cardano-node.md) guide. diff --git a/docs/website/root/manual/develop/nodes/mithril-signer.md b/docs/website/root/manual/develop/nodes/mithril-signer.md index 1c5d63a9638..97e1e849230 100644 --- a/docs/website/root/manual/develop/nodes/mithril-signer.md +++ b/docs/website/root/manual/develop/nodes/mithril-signer.md @@ -14,9 +14,9 @@ Mithril signer is responsible for producing individual signatures that are colle :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril signer** node, please see [this overview](../../../mithril/mithril-network/signer.md) +- For more information about the **Mithril signer** node, please see [this overview](../../../mithril/advanced/mithril-network/signer.md) - Check out the [`Run a Mithril signer node`](../../operate/run-signer-node.md) guide. diff --git a/docs/website/root/manual/develop/protocol-simulation.md b/docs/website/root/manual/develop/protocol-simulation.md index 39d66ad0a9f..a0f8505938e 100644 --- a/docs/website/root/manual/develop/protocol-simulation.md +++ b/docs/website/root/manual/develop/protocol-simulation.md @@ -294,6 +294,6 @@ Party #0: aggregate signature not found 7724e03fb8d84a376a43b8f41518a11c :::tip -For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/mithril-protocol/protocol.md) section. +For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/advanced/mithril-protocol/protocol.md) section. ::: diff --git a/docs/website/root/mithril/advanced/README.mdx b/docs/website/root/mithril/advanced/README.mdx new file mode 100644 index 00000000000..031a342bcc4 --- /dev/null +++ b/docs/website/root/mithril/advanced/README.mdx @@ -0,0 +1,5 @@ +--- +title: Advanced +--- + +import DocCardList from "@theme/DocCardList"; diff --git a/docs/website/root/mithril/advanced/_category_.json b/docs/website/root/mithril/advanced/_category_.json new file mode 100644 index 00000000000..2244fab97d5 --- /dev/null +++ b/docs/website/root/mithril/advanced/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Advanced", + "collapsible": true, + "collapsed": false, + "position": 3 +} diff --git a/docs/website/root/mithril/advanced/mithril-network/README.mdx b/docs/website/root/mithril/advanced/mithril-network/README.mdx new file mode 100644 index 00000000000..7f594cb6bdb --- /dev/null +++ b/docs/website/root/mithril/advanced/mithril-network/README.mdx @@ -0,0 +1,5 @@ +--- +title: Mithril network +--- + +import DocCardList from "@theme/DocCardList"; diff --git a/docs/website/root/mithril/advanced/mithril-network/_category_.json b/docs/website/root/mithril/advanced/mithril-network/_category_.json new file mode 100644 index 00000000000..f60bec40c41 --- /dev/null +++ b/docs/website/root/mithril/advanced/mithril-network/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Mithril network", + "collapsible": true, + "collapsed": false, + "position": 2 +} diff --git a/docs/website/root/mithril/mithril-network/aggregator.md b/docs/website/root/mithril/advanced/mithril-network/aggregator.md similarity index 97% rename from docs/website/root/mithril/mithril-network/aggregator.md rename to docs/website/root/mithril/advanced/mithril-network/aggregator.md index 7d703530800..a1b84ea9f47 100644 --- a/docs/website/root/mithril/mithril-network/aggregator.md +++ b/docs/website/root/mithril/advanced/mithril-network/aggregator.md @@ -3,7 +3,7 @@ sidebar_position: 2 sidebar_label: Mithril aggregator --- -# Mithril aggregator node +# Mithril aggregator :::info @@ -15,7 +15,7 @@ A **Mithril aggregator** is a trustless node responsible for coordinating the ac - For more information about the **Mithril protocol**, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the **Mithril aggregator**, see the [developer manual](../../manual/develop/nodes/mithril-aggregator.md). +- For more information about the **Mithril aggregator**, see the [developer manual](../../../manual/develop/nodes/mithril-aggregator.md). ::: diff --git a/docs/website/root/mithril/mithril-network/architecture-c4.puml b/docs/website/root/mithril/advanced/mithril-network/architecture-c4.puml similarity index 100% rename from docs/website/root/mithril/mithril-network/architecture-c4.puml rename to docs/website/root/mithril/advanced/mithril-network/architecture-c4.puml diff --git a/docs/website/root/mithril/mithril-network/architecture.md b/docs/website/root/mithril/advanced/mithril-network/architecture.md similarity index 89% rename from docs/website/root/mithril/mithril-network/architecture.md rename to docs/website/root/mithril/advanced/mithril-network/architecture.md index ad6cc57e4f8..3547de93c7f 100644 --- a/docs/website/root/mithril/mithril-network/architecture.md +++ b/docs/website/root/mithril/advanced/mithril-network/architecture.md @@ -3,7 +3,7 @@ sidebar_position: 1 sidebar_label: Architecture --- -# Mithril network architecture +# Architecture :::info @@ -33,7 +33,7 @@ The network is composed of the following nodes: - **Mithril relay**: -> A forward proxy that is used to secure communications between the Mithril signer and the Mithril aggregator. More information is available in the [Mithril signer deployment model](../../manual/operate/run-signer-node.md#mithril-signer-deployment-model) section. +> A forward proxy that is used to secure communications between the Mithril signer and the Mithril aggregator. More information is available in the [Mithril signer deployment model](../../../manual/operate/run-signer-node.md#mithril-signer-deployment-model) section. :::tip diff --git a/docs/website/root/mithril/mithril-network/client.md b/docs/website/root/mithril/advanced/mithril-network/client.md similarity index 97% rename from docs/website/root/mithril/mithril-network/client.md rename to docs/website/root/mithril/advanced/mithril-network/client.md index ecd563037e1..238c3d70603 100644 --- a/docs/website/root/mithril/mithril-network/client.md +++ b/docs/website/root/mithril/advanced/mithril-network/client.md @@ -3,7 +3,7 @@ sidebar_position: 4 sidebar_label: Mithril client --- -# Mithril client node +# Mithril client :::info @@ -18,7 +18,7 @@ The Mithril client node is used to list, show or verify artifacts certified by M - For more information about the Mithril protocol, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the Mithril client, see the [developer manual](../../manual/develop/nodes/mithril-client.md). +- For more information about the Mithril client, see the [developer manual](../../../manual/develop/nodes/mithril-client.md). ::: diff --git a/docs/website/root/mithril/mithril-network/images/aggregator-runtime.jpg b/docs/website/root/mithril/advanced/mithril-network/images/aggregator-runtime.jpg similarity index 100% rename from docs/website/root/mithril/mithril-network/images/aggregator-runtime.jpg rename to docs/website/root/mithril/advanced/mithril-network/images/aggregator-runtime.jpg diff --git a/docs/website/root/mithril/mithril-network/images/architecture.svg b/docs/website/root/mithril/advanced/mithril-network/images/architecture.svg similarity index 100% rename from docs/website/root/mithril/mithril-network/images/architecture.svg rename to docs/website/root/mithril/advanced/mithril-network/images/architecture.svg diff --git a/docs/website/root/mithril/mithril-network/images/signer-runtime.jpg b/docs/website/root/mithril/advanced/mithril-network/images/signer-runtime.jpg similarity index 100% rename from docs/website/root/mithril/mithril-network/images/signer-runtime.jpg rename to docs/website/root/mithril/advanced/mithril-network/images/signer-runtime.jpg diff --git a/docs/website/root/mithril/mithril-network/images/signer-workflow.png b/docs/website/root/mithril/advanced/mithril-network/images/signer-workflow.png similarity index 100% rename from docs/website/root/mithril/mithril-network/images/signer-workflow.png rename to docs/website/root/mithril/advanced/mithril-network/images/signer-workflow.png diff --git a/docs/website/root/mithril/mithril-network/signer.md b/docs/website/root/mithril/advanced/mithril-network/signer.md similarity index 97% rename from docs/website/root/mithril/mithril-network/signer.md rename to docs/website/root/mithril/advanced/mithril-network/signer.md index 4a6ef14d24d..2a76a382764 100644 --- a/docs/website/root/mithril/mithril-network/signer.md +++ b/docs/website/root/mithril/advanced/mithril-network/signer.md @@ -3,7 +3,7 @@ sidebar_position: 3 sidebar_label: Mithril signer --- -# Mithril signer node +# Mithril signer :::info @@ -15,7 +15,7 @@ The Mithril signer is a node that works transparently on top of the stake pool o - For more information about the **Mithril protocol**, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the **Mithril signer**, see the [developer manual](../../manual/develop/nodes/mithril-signer.md). +- For more information about the **Mithril signer**, see the [developer manual](../../../manual/develop/nodes/mithril-signer.md). ::: diff --git a/docs/website/root/mithril/advanced/mithril-protocol/README.mdx b/docs/website/root/mithril/advanced/mithril-protocol/README.mdx new file mode 100644 index 00000000000..49efddcc43c --- /dev/null +++ b/docs/website/root/mithril/advanced/mithril-protocol/README.mdx @@ -0,0 +1,5 @@ +--- +title: Mithril protocol +--- + +import DocCardList from "@theme/DocCardList"; diff --git a/docs/website/root/mithril/advanced/mithril-protocol/_category_.json b/docs/website/root/mithril/advanced/mithril-protocol/_category_.json new file mode 100644 index 00000000000..8a8bdf8e5c1 --- /dev/null +++ b/docs/website/root/mithril/advanced/mithril-protocol/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Mithril protocol", + "collapsible": true, + "collapsed": false, + "position": 1 +} diff --git a/docs/website/root/mithril/mithril-protocol/certificates.md b/docs/website/root/mithril/advanced/mithril-protocol/certificates.md similarity index 96% rename from docs/website/root/mithril/mithril-protocol/certificates.md rename to docs/website/root/mithril/advanced/mithril-protocol/certificates.md index efcb0c6eaaf..edb63090a18 100644 --- a/docs/website/root/mithril/mithril-protocol/certificates.md +++ b/docs/website/root/mithril/advanced/mithril-protocol/certificates.md @@ -1,9 +1,9 @@ --- sidebar_position: 2 -sidebar_label: Certificate chain in depth +sidebar_label: Certificate chain design --- -# Mithril certificate chain in depth +# Certificate chain design ## Introduction @@ -61,7 +61,7 @@ The message `MSG(p,n)` is a map of multiple values associated with their respect :::note -The **trigger** represents the instant at which a certificate should be created. It is combined with at least the associated **epoch** to create a [**beacon**](../../glossary.md#beacon) of the certificate. In the current implementation of the Cardano node database snapshot, this trigger is a new [**immutable file number**](../../glossary.md#immutable-file-number). +The **trigger** represents the instant at which a certificate should be created. It is combined with at least the associated **epoch** to create a [**beacon**](../../../glossary.md#beacon) of the certificate. In the current implementation of the Cardano node database snapshot, this trigger is a new [**immutable file number**](../../../glossary.md#immutable-file-number). ::: diff --git a/docs/website/root/mithril/mithril-protocol/images/certificate-chain.jpg b/docs/website/root/mithril/advanced/mithril-protocol/images/certificate-chain.jpg similarity index 100% rename from docs/website/root/mithril/mithril-protocol/images/certificate-chain.jpg rename to docs/website/root/mithril/advanced/mithril-protocol/images/certificate-chain.jpg diff --git a/docs/website/root/mithril/mithril-protocol/protocol.md b/docs/website/root/mithril/advanced/mithril-protocol/protocol.md similarity index 96% rename from docs/website/root/mithril/mithril-protocol/protocol.md rename to docs/website/root/mithril/advanced/mithril-protocol/protocol.md index 52dc7451f37..4c5d407d8ef 100644 --- a/docs/website/root/mithril/mithril-protocol/protocol.md +++ b/docs/website/root/mithril/advanced/mithril-protocol/protocol.md @@ -1,9 +1,9 @@ --- sidebar_position: 1 -sidebar_label: Protocol in depth +sidebar_label: Protocol phases --- -# Mithril protocol in depth +# Protocol phases :::info @@ -13,7 +13,7 @@ Mithril is based on the research paper [Mithril: Stake-based Threshold Multisign :::info -You can interact with the **Mithril protocol** through the [protocol simulation](../../manual/develop/protocol-simulation.md). This will help you understand participants' interactions, multi-signature creation, and the influence of protocol parameters. +You can interact with the **Mithril protocol** through the [protocol simulation](../../../manual/develop/protocol-simulation.md). This will help you understand participants' interactions, multi-signature creation, and the influence of protocol parameters. ::: diff --git a/docs/website/root/mithril/mithril-protocol/security.md b/docs/website/root/mithril/advanced/mithril-protocol/security.md similarity index 99% rename from docs/website/root/mithril/mithril-protocol/security.md rename to docs/website/root/mithril/advanced/mithril-protocol/security.md index 49af323e6ce..bf833259186 100644 --- a/docs/website/root/mithril/mithril-protocol/security.md +++ b/docs/website/root/mithril/advanced/mithril-protocol/security.md @@ -1,6 +1,6 @@ --- sidebar_position: 3 -sidebar_label: Security +sidebar_label: Protocol security --- # Protocol security diff --git a/docs/website/root/mithril/threat-model.md b/docs/website/root/mithril/advanced/threat-model.md similarity index 99% rename from docs/website/root/mithril/threat-model.md rename to docs/website/root/mithril/advanced/threat-model.md index ad2af874b75..217ee0bdab6 100644 --- a/docs/website/root/mithril/threat-model.md +++ b/docs/website/root/mithril/advanced/threat-model.md @@ -1,9 +1,9 @@ --- sidebar_position: 3 -sidebar_label: Mithril threat model +sidebar_label: Threat model analysis --- -# Mithril threat model +# Threat model analysis :::danger diff --git a/docs/website/root/mithril/intro.md b/docs/website/root/mithril/intro.md index c3269cd7361..8886f859378 100644 --- a/docs/website/root/mithril/intro.md +++ b/docs/website/root/mithril/intro.md @@ -27,23 +27,23 @@ In this guide, you will find: - The **Mithril protocol** documentation: - - [Mithril protocol in depth](./mithril-protocol/protocol.md) + - [Mithril protocol in depth](./advanced/mithril-protocol/protocol.md) - - [Mithril certificate chain in depth](./mithril-protocol/certificates.md) + - [Mithril certificate chain in depth](./advanced/mithril-protocol/certificates.md) - An interactive protocol discovery through the [Mithril simulation](../manual/develop/protocol-simulation.md) - The **Mithril network** documentation: - - [Mithril network architecture](./mithril-network/architecture.md) + - [Mithril network architecture](./advanced/mithril-network/architecture.md) - - [Mithril aggregator node](./mithril-network/aggregator.md) + - [Mithril aggregator node](./advanced/mithril-network/aggregator.md) - - [Mithril signer node](./mithril-network/signer.md) + - [Mithril signer node](./advanced/mithril-network/signer.md) - - [Mithril client node](./mithril-network/client.md) + - [Mithril client node](./advanced/mithril-network/client.md) -- The [**Mithril threat model**](./threat-model) +- The [**Mithril threat model**](./advanced/threat-model) :::tip diff --git a/docs/website/root/mithril/mithril-network/_category_.json b/docs/website/root/mithril/mithril-network/_category_.json deleted file mode 100644 index 982cf99ace5..00000000000 --- a/docs/website/root/mithril/mithril-network/_category_.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "label": "Mithril Network", - "collapsible": true, - "collapsed": false, - "position": 2, - "link": { - "type": "generated-index", - "title": "Mithril Network Topics" - } -} diff --git a/docs/website/root/mithril/mithril-protocol/_category_.json b/docs/website/root/mithril/mithril-protocol/_category_.json deleted file mode 100644 index 6f6217665d0..00000000000 --- a/docs/website/root/mithril/mithril-protocol/_category_.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "label": "Mithril protocol", - "collapsible": true, - "collapsed": false, - "position": 1, - "link": { - "type": "generated-index", - "title": "Mithril protocol Topics" - } -} From affb52c3f39ee7ca4feae577bf7abb2c23bb8ee8 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Wed, 4 Dec 2024 19:01:54 +0100 Subject: [PATCH 2/6] docs: create 'Beginner' sub section of 'About Mithril' --- README.md | 2 +- docs/website/docusaurus.config.js | 2 +- docs/website/root/mithril/advanced/README.mdx | 4 ++ .../advanced/mithril-network/README.mdx | 4 ++ .../advanced/mithril-protocol/README.mdx | 4 ++ docs/website/root/mithril/beginner/README.mdx | 9 ++++ .../root/mithril/beginner/_category_.json | 6 +++ .../root/mithril/beginner/how-it-works.md | 49 +++++++++++++++++++ .../mithril/beginner/mithril-in-a-nutshell.md | 24 +++++++++ .../root/mithril/beginner/why-use-mithril.md | 24 +++++++++ docs/website/root/mithril/intro.md | 49 +++++-------------- 11 files changed, 139 insertions(+), 38 deletions(-) create mode 100644 docs/website/root/mithril/beginner/README.mdx create mode 100644 docs/website/root/mithril/beginner/_category_.json create mode 100644 docs/website/root/mithril/beginner/how-it-works.md create mode 100644 docs/website/root/mithril/beginner/mithril-in-a-nutshell.md create mode 100644 docs/website/root/mithril/beginner/why-use-mithril.md diff --git a/README.md b/README.md index df4ff95111c..75b92df302f 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Should you have any questions, ideas or issues, we would like to hear from you: - #ask-mithril on the IOG [Discord server](https://discord.gg/5kaErDKDRq) - Create a GitHub [Discussion](https://github.com/input-output-hk/mithril/discussions) - Create a GitHub [Issue](https://github.com/input-output-hk/mithril/issues/new) -- Ask on Cardano [StackExchange](https://cardano.stackexchange.com/questions/tagged/mithril) using the `mithril` tag +- Ask on Cardano [StackExchange](https://cardano.stackexchange.com/search?q=mithril) using the `mithril` tag When contributing to this project and interacting with others, please follow our [Code of Conduct](./CODE-OF-CONDUCT.md) and our [Contributing Guidelines](./CONTRIBUTING.md). diff --git a/docs/website/docusaurus.config.js b/docs/website/docusaurus.config.js index ce170b43d8c..a5f53c9a4bc 100644 --- a/docs/website/docusaurus.config.js +++ b/docs/website/docusaurus.config.js @@ -236,7 +236,7 @@ const config = { }, { label: "Stack Exchange", - href: "https://cardano.stackexchange.com/questions/tagged/mithril", + href: "https://cardano.stackexchange.com/search?q=mithril", }, ], }, diff --git a/docs/website/root/mithril/advanced/README.mdx b/docs/website/root/mithril/advanced/README.mdx index 031a342bcc4..3600c41437f 100644 --- a/docs/website/root/mithril/advanced/README.mdx +++ b/docs/website/root/mithril/advanced/README.mdx @@ -3,3 +3,7 @@ title: Advanced --- import DocCardList from "@theme/DocCardList"; + +This section delves into the technical aspects of Mithril, providing detailed insights into its protocol, phases, certificate chain design, and network architecture. Explore these topics to understand how Mithril solves blockchain challenges at a deeper level. + + diff --git a/docs/website/root/mithril/advanced/mithril-network/README.mdx b/docs/website/root/mithril/advanced/mithril-network/README.mdx index 7f594cb6bdb..98499c1eb85 100644 --- a/docs/website/root/mithril/advanced/mithril-network/README.mdx +++ b/docs/website/root/mithril/advanced/mithril-network/README.mdx @@ -3,3 +3,7 @@ title: Mithril network --- import DocCardList from "@theme/DocCardList"; + +This section explores the Mithril network, which consists of various nodes that work together to execute the protocol’s rules for signing, aggregating, and verifying blockchain data. By distributing these responsibilities across a decentralized network, Mithril ensures secure, efficient, and scalable data validation without requiring full node operations. + + diff --git a/docs/website/root/mithril/advanced/mithril-protocol/README.mdx b/docs/website/root/mithril/advanced/mithril-protocol/README.mdx index 49efddcc43c..59aa5408186 100644 --- a/docs/website/root/mithril/advanced/mithril-protocol/README.mdx +++ b/docs/website/root/mithril/advanced/mithril-protocol/README.mdx @@ -3,3 +3,7 @@ title: Mithril protocol --- import DocCardList from "@theme/DocCardList"; + +This section explains the Mithril protocol, which serves as the foundational cryptographic framework for the system. It outlines the processes for creating and verifying multi-signatures, enabling secure and efficient blockchain data validation. By leveraging a stake-based threshold signature scheme, the Mithril protocol ensures scalability, decentralization, and integrity within the network. + + diff --git a/docs/website/root/mithril/beginner/README.mdx b/docs/website/root/mithril/beginner/README.mdx new file mode 100644 index 00000000000..aa65135352d --- /dev/null +++ b/docs/website/root/mithril/beginner/README.mdx @@ -0,0 +1,9 @@ +--- +title: Beginner +--- + +import DocCardList from "@theme/DocCardList"; + +This section introduces Mithril in simple terms, explaining its purpose, key features, and how it solves blockchain challenges. Explore Mithril’s benefits and high-level functionality now. + + diff --git a/docs/website/root/mithril/beginner/_category_.json b/docs/website/root/mithril/beginner/_category_.json new file mode 100644 index 00000000000..32a0fb86494 --- /dev/null +++ b/docs/website/root/mithril/beginner/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Beginner", + "collapsible": true, + "collapsed": false, + "position": 2 +} diff --git a/docs/website/root/mithril/beginner/how-it-works.md b/docs/website/root/mithril/beginner/how-it-works.md new file mode 100644 index 00000000000..1935748775c --- /dev/null +++ b/docs/website/root/mithril/beginner/how-it-works.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +sidebar_label: How it works +--- + +# How it works + +The protocol utilizes a lottery mechanism where the probability of a signer winning is directly proportional to their stake. This lottery determines which signers are eligible to participate in the signing round. The generated signatures are then combined by an aggregator into a **Mithril multi-signature**, which requires a predefined threshold (quorum) of the total stake to be reached. + +The **Mithril protocol** consists of three phases: + +- **Protocol establishment.** During this phase, the protocol parameters are established. These parameters are crucial for security and include: + - **m**: the number of lotteries each signer can participate in for each message + - **k**: the minimum number of unique winning lottery indices needed to create a multi-signature + - **f**: a tuning parameter that adjusts the chances of signers winning a lottery based on their stake. +- **Initialization.** In this phase, participating signers generate and broadcast their keys along with a proof of possession. This process happens at the start of each new epoch, which is five days on Cardano. The aggregate verification key (AVK), a condensed representation of the key registration process, is computed and later used to sign and verify multi-signatures. +- **Operations.** This phase involves the creation and broadcasting of individual signatures by signers. Aggregators collect these signatures and combine them into multi-signatures once the quorum is reached. These multi-signatures are then sealed into a Mithril certificate along with the AVK. + +:::info + +Refer to the [Protocol phases](../advanced/mithril-protocol/protocol.md) overview for more details. + +::: + +Mithril involves three main participants – **signers, aggregators, and clients** – working together to ensure secure and efficient data verification. + +The operations phase is the core of the Mithril process, involving the generation of individual signatures, their aggregation into a multi-signature, and the creation of a certificate that verifies the authenticity of blockchain data: + +- **Message signing.** When a new message, such as a snapshot of the Cardano blockchain, requires certification, a multi-party signing round is initiated. +- **Lottery participation.** Each signer (SPO) participates in the lottery process pertaining to the message, with the likelihood of winning influenced by the signer's stake and other parameters. +- **Individual signature generation.** Signers who win at least one lottery create individual signatures for the message using their specific signing key, sending these signatures to the Mithril aggregator. +- **Aggregation.** The aggregator collects individual signatures and combines them into a single multi-signature once the requisite number of unique winning lottery indices is met (quorum). +- **Certificate generation.** This multi-signature, along with the signed message and additional metadata, forms a Mithril certificate. This certificate serves as verification that a sufficient amount of stake has endorsed the message. +- **Verification.** Clients, including light wallets or node operators, can confirm the authenticity of their assets (information retrieved from some untrusted sources) via the certificates. The verification process is efficient and does not require downloading the entire blockchain history; it entails checking the multi-signature against the known aggregate verification key and tracing the certificate back to a trusted genesis certificate. + +To fully understand Mithril, it is essential to explore its advanced operational aspects, which include its cryptographic foundations, the roles and security requirements of SPOs, and the strategic upgrade paths for the network. + +To explore advanced topics, see: + +- Mithril protocol + - [Protocol phases](../advanced/mithril-protocol/protocol.md) + - [Certificate chain design](../advanced/mithril-protocol/certificates.md) + - [Protocol security](../advanced/mithril-protocol/security.md) + - [Threat model analysis](../advanced/threat-model.md) +- Mithril network + - [Architecture](../advanced/mithril-network/architecture.md) + - [Mithril aggregator](../advanced/mithril-network/aggregator.md) + - [Mithril signer](../advanced/mithril-network/signer.md) + - [Mithril client](../advanced/mithril-network/client.md) diff --git a/docs/website/root/mithril/beginner/mithril-in-a-nutshell.md b/docs/website/root/mithril/beginner/mithril-in-a-nutshell.md new file mode 100644 index 00000000000..600643dee3e --- /dev/null +++ b/docs/website/root/mithril/beginner/mithril-in-a-nutshell.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 1 +sidebar_label: Mithril in a nutshell +--- + +# Mithril in a nutshell + +Let’s start with some background information to understand the current challenge and the solution that Mithril provides. + +Running a Cardano node allows users to interact with the blockchain in a trustless and decentralized way. The network relies on thousands of nodes working together to validate blocks and transactions, creating a unified and secure system. Each node holds a full copy of the blockchain, ensuring independence and decentralization. However, node synchronization is resource-intensive. For example, Daedalus, a full-node wallet, downloads and independently validates every transaction in the blockchain’s history. This process requires significant time, storage, and computational power, creating a barrier for users who lack the necessary resources or technical expertise. + +This challenge leaves users and developers with limited choices: invest in the costly setup and maintenance of a full node or rely on centralized services, which compromises Cardano’s core principle of decentralization. + +## How Mithril helps + +The Mithril protocol is designed to enhance blockchain efficiency and scalability by leveraging stake-based multi-signatures. It achieves higher performance without increasing trust requirements, offering a modular and transparent setup. Signers operate independently to produce individual signatures, which aggregators combine into a single, efficient multi-signature. + +Consider this analogy. Think of it like a community vote where only people who own a certain amount of tokens can participate. Each participant’s vote is signed, and these signatures are then combined to show that a significant portion of the token holders agree on the outcome. + +Unlike traditional systems requiring all participants to validate data, Mithril uses a stake-based threshold multi-signature scheme (STM). This means only a minimum fraction of the total stake is needed to generate a valid signature, ensuring both security and efficiency. + +Operating in a trustless setting, Mithril relies solely on existing proof-of-stake assumptions for consensus security. This makes it ideal for applications such as wallet-as-a-service or mobile clients, which can securely verify and exchange data using certificates from Mithril nodes. + +Additionally, Mithril enables rapid Certification by allowing stakeholders to validate checkpoints rather than the entire transaction history. This feature is especially beneficial for light clients, such as light wallets, and extends to use cases like data synchronization between layer 2 chains and full node bootstrapping. diff --git a/docs/website/root/mithril/beginner/why-use-mithril.md b/docs/website/root/mithril/beginner/why-use-mithril.md new file mode 100644 index 00000000000..24fd284867b --- /dev/null +++ b/docs/website/root/mithril/beginner/why-use-mithril.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 2 +sidebar_label: Why should you use Mithril? +--- + +# Why should you use Mithril? + +Mithril was developed with a focus on optimization, scalability, and interoperability. It addresses several key challenges in the blockchain ecosystem: + +## Challenges + +- **Slow node bootstrapping.** Synchronizing a full Cardano node from scratch can take days, hindering user participation and development. +- **Light client security and decentralization.** Light clients such as wallets offer efficiency but often rely on centralized and trusted third parties for data, compromising security and decentralization. +- **Layer 2 interaction.** Layer 2 solutions designed to enhance scalability need efficient methods to verify their state and interact with the main chain without requiring validator nodes to run a full Cardano node. + +## Solutions + +Mithril addresses these challenges through its stake-based threshold multi-signature (STM) scheme. This approach allows for efficient and secure verification of blockchain data without the need to run a full node, thereby improving scalability and accessibility. + +Here's how Mithril provides solutions: + +- **Fast bootstrapping.** Mithril enables the rapid setup of a full Cardano node in under 20 minutes by providing certified snapshots of the Cardano database. These snapshots can be quickly verified using the multi-signature scheme. +- **Secure and efficient data exchange for lightweight applications.** Lightweight applications such as wallets can leverage Mithril to verify transaction data associated with specific addresses without relying on third parties or running a full node. This maintains decentralization and security while offering greater efficiency. +- **Support for layer 2 solutions.** Mithril allows lightweight verification of the state and transactions of layer 2 solutions, improving their interaction with the main chain. For example, it can verify the stake of validator nodes in a bridge. diff --git a/docs/website/root/mithril/intro.md b/docs/website/root/mithril/intro.md index 8886f859378..1a6a447beed 100644 --- a/docs/website/root/mithril/intro.md +++ b/docs/website/root/mithril/intro.md @@ -3,47 +3,24 @@ sidebar_position: 1 sidebar_label: Introduction --- -# About Mithril +# Introduction -:::info +Mithril is a protocol and network specifically designed for proof-of-stake blockchains. Its primary goal is to provide lightweight and secure access to blockchain data while ensuring a high level of security and decentralization. Originally developed for Cardano during its Basho development phase, which focuses on optimization, scalability, and interoperability, Mithril has numerous potential applications. These include synchronizing data for both light and full-node wallets, as well as facilitating data exchanges with layer 2 solutions such as bridges, sidechains, rollups, and state channels. -Explore the Mithril protocol through our [protocol simulation](../manual/develop/protocol-simulation.md). This interactive experience will provide you with insights into how participants collaborate to generate a **multi-signature**, and you'll also gain a clearer understanding of the protocol parameters. +This section provides a detailed overview of the Mithril protocol and the network, their purpose, and how Mithril addresses key challenges in blockchain scalability and security. The section includes both beginner-friendly explanations and advanced technical insights, guiding readers from foundational concepts to in-depth protocol details. -::: - -## Mithril in a nutshell - -Mithril is a research project whose goal is to provide [Stake-based Threshold Multisignatures](https://iohk.io/en/research/library/papers/mithrilstake-based-threshold-multisignatures/) on top of the Cardano network. - -In a nutshell, Mithril can be summarized as: - -> A protocol that allows stakeholders in a proof-of-stake blockchain network to individually sign messages that are aggregated into a multi-signature, which guarantees that they represent a minimum share of the total stake. - -In other words, an adversarial participant with less than this share of the total stake will not be able to produce valid multi-signatures :closed_lock_with_key:. - -## What you'll find in this guide - -In this guide, you will find: - -- The **Mithril protocol** documentation: - - - [Mithril protocol in depth](./advanced/mithril-protocol/protocol.md) - - - [Mithril certificate chain in depth](./advanced/mithril-protocol/certificates.md) - - - An interactive protocol discovery through the [Mithril simulation](../manual/develop/protocol-simulation.md) - -- The **Mithril network** documentation: - - - [Mithril network architecture](./advanced/mithril-network/architecture.md) - - - [Mithril aggregator node](./advanced/mithril-network/aggregator.md) +If you're new to Mithril, see the ‘Beginner' explainers: - - [Mithril signer node](./advanced/mithril-network/signer.md) +- [Mithril in a nutshell](./beginner/mithril-in-a-nutshell.md) +- [Why should you use Mithril?](./beginner/why-use-mithril.md) +- [How it works](./beginner/how-it-works.md) - - [Mithril client node](./advanced/mithril-network/client.md) +To dive deeper into advanced topics, see: -- The [**Mithril threat model**](./advanced/threat-model) +- [Mithril protocol](./advanced/mithril-protocol/README.mdx) +- [Mithril network](./advanced/mithril-network/README.mdx) +- [Mithril security](./advanced/mithril-protocol/security.md) +- [Threat model analysis](./advanced/threat-model.md) :::tip @@ -51,6 +28,6 @@ If you need help, feel free to reach out to the Mithril team: - [GitHub discussions](https://github.com/input-output-hk/mithril/discussions) -- [Stack Exchange](https://cardano.stackexchange.com/questions/tagged/mithril) +- [Stack Exchange](https://cardano.stackexchange.com/search?q=mithril) ::: From e920cbed1c21f19806cc10c9f3f848f5bac15c13 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Thu, 5 Dec 2024 10:49:56 +0100 Subject: [PATCH 3/6] docs: add redirect from previous locations to new in 'About Mithril' section of website --- docs/website/docusaurus.config.js | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/website/docusaurus.config.js b/docs/website/docusaurus.config.js index a5f53c9a4bc..a57a535c17e 100644 --- a/docs/website/docusaurus.config.js +++ b/docs/website/docusaurus.config.js @@ -147,6 +147,46 @@ const config = { to: "/manual/develop/references", from: ["/manual/developer-docs/references"], }, + { + to: "/mithril/advanced/mithril-protocol", + from: ["/category/mithril-protocol"], + }, + { + to: "/mithril/advanced/mithril-protocol/protocol", + from: ["/mithril/mithril-protocol/protocol"], + }, + { + to: "/mithril/advanced/mithril-protocol/certificates", + from: ["/mithril/mithril-protocol/certificates"], + }, + { + to: "/mithril/advanced/mithril-protocol/security", + from: ["/mithril/mithril-protocol/security"], + }, + { + to: "/mithril/advanced/mithril-network/", + from: ["/category/mithril-network"], + }, + { + to: "/mithril/advanced/mithril-network/architecture", + from: ["/mithril/mithril-network/architecture"], + }, + { + to: "/mithril/advanced/mithril-network/aggregator", + from: ["/mithril/mithril-network/aggregator"], + }, + { + to: "/mithril/advanced/mithril-network/signer", + from: ["/mithril/mithril-network/signer"], + }, + { + to: "/mithril/advanced/mithril-network/client", + from: ["/mithril/mithril-network/client"], + }, + { + to: "/mithril/advanced/threat-model", + from: ["/mithril/threat-model"], + }, ], }, ], From 4a2b566ab7a0e2cd6e666981195f634b8a33b164 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Thu, 5 Dec 2024 15:18:51 +0100 Subject: [PATCH 4/6] docs: apply review comments --- .../advanced/mithril-protocol/certificates.md | 4 --- .../advanced/mithril-protocol/security.md | 36 ------------------- .../root/mithril/beginner/how-it-works.md | 4 +-- docs/website/root/mithril/intro.md | 6 ++-- 4 files changed, 5 insertions(+), 45 deletions(-) diff --git a/docs/website/root/mithril/advanced/mithril-protocol/certificates.md b/docs/website/root/mithril/advanced/mithril-protocol/certificates.md index edb63090a18..b7216406bd6 100644 --- a/docs/website/root/mithril/advanced/mithril-protocol/certificates.md +++ b/docs/website/root/mithril/advanced/mithril-protocol/certificates.md @@ -7,10 +7,6 @@ sidebar_label: Certificate chain design ## Introduction -The **Mithril protocol** can be summarized as: - -> A protocol that enables stakeholders in a proof-of-stake blockchain network to individually sign messages. These signatures are then aggregated into a multi-signature, ensuring that stakeholders collectively represent a minimum share of the total stake. - The **certificate chain** is a Mithril component that certifies the **stake distribution** used to create the multi-signature. Its primary purpose is to prevent adversaries from executing an **eclipse attack** on the blockchain. Without the certificate, the stake distribution can't be trusted. A malicious actor could relatively easily create a fake stake distribution and use it to produce a valid multi-signature, which would be embedded in a valid but non-genuine certificate. This certificate could be served by a dishonest Mithril aggregator node, leading an honest Mithril client to restore a non-genuine snapshot. diff --git a/docs/website/root/mithril/advanced/mithril-protocol/security.md b/docs/website/root/mithril/advanced/mithril-protocol/security.md index bf833259186..e91b2a53ef5 100644 --- a/docs/website/root/mithril/advanced/mithril-protocol/security.md +++ b/docs/website/root/mithril/advanced/mithril-protocol/security.md @@ -5,44 +5,8 @@ sidebar_label: Protocol security # Protocol security -:::info - -Mithril is based on the [Mithril: Stake-based Threshold Multi-signatures](https://iohk.io/en/research/library/papers/mithril-stake-based-threshold-multisignatures/) research paper. - -::: - -Mithril is a stake-based threshold multi-signature (STM) protocol that aggregates individual signatures into a compact certificate. This process occurs when the total stake supporting a message exceeds a predefined threshold. The protocol enhances scalability in signing, communication, and verification by pseudorandomly selecting a subset of eligible participants to sign each message. - This document presents a comprehensive security analysis of Mithril, examining potential threats and the protocol’s defenses against various attack vectors. It starts with an overview of the STM protocol and the adversarial model, followed by an in-depth discussion of security measures against common cryptographic attacks. The document concludes with an analysis of parameter selection, highlighting trade-offs between security and efficiency through practical examples. -## Mithril protocol explained - -The STM protocol enables participants to sign a message collectively, validating the signature based on their combined stake. It leverages threshold multi-signatures to aggregate multiple individual signatures into a single, compact signature. This approach is especially beneficial in proof-of-stake (PoS) systems, where blockchain security relies on the distribution and control of stake among participants. - -- _Threshold multi-signature_: a cryptographic scheme that aggregates individual signatures into one compact signature if the total stake of the signers exceeds a predefined threshold -- _Stake-based eligibility_: the protocol ensures that only participants with sufficient stake are pseudorandomly selected as eligible to sign messages -- _Aggregation and verification_: aggregates individual signatures into a multi-signature, enabling efficient verification. - -### Protocol phases - -- **Initialization phase** - - - _Setup_: the protocol sets up the necessary cryptographic parameters and prepares the system for operation - - _Key generation_: participants generate a public-private key pair $(sk_i, pk_i)$ - - _Proof of possession_: each participant creates a proof $(\mathcal{PoP_i})$ that they possess the private key corresponding to their public key - - _Registration_: participants register their public keys $(pk_i)$ and $(\mathcal{PoP_i})$, which are then stored in a Merkle tree structure for efficient verification - - _Aggregate verification key_: the root of the Merkle tree, which serves as the aggregate verification key $(\mathcal{AVK})$. - -- **Operation phase** - - _Eligibility determination_: - - _Lottery mechanism_: the protocol initiates a series of lotteries for each message to determine eligible participants. Each participant's chance of winning is proportional to their stake - - _Security parameter_ $(m)$: the number of parallel lotteries, which ensures that enough participants are eligible - - _Quorum parameter_ $(k)$: the minimum number of eligible signatures required to form a valid multi-signature - - _Signing process_: - - _Individual signature generation_: eligible participants generate individual signatures for the message - - _Aggregation_: these signatures are aggregated into a single multi-signature; a minimum of $k$ signatures are aggregated into a single multi-signature - - _Verification_: the multi-signature, along with the Merkle proofs, is verified using the $\mathcal{AVK}$. - :::info Protocol phases are described in more detail [here](./protocol.md#protocol-phases). diff --git a/docs/website/root/mithril/beginner/how-it-works.md b/docs/website/root/mithril/beginner/how-it-works.md index 1935748775c..a2149d40676 100644 --- a/docs/website/root/mithril/beginner/how-it-works.md +++ b/docs/website/root/mithril/beginner/how-it-works.md @@ -41,9 +41,9 @@ To explore advanced topics, see: - [Protocol phases](../advanced/mithril-protocol/protocol.md) - [Certificate chain design](../advanced/mithril-protocol/certificates.md) - [Protocol security](../advanced/mithril-protocol/security.md) - - [Threat model analysis](../advanced/threat-model.md) + - [Threat model analysis](../advanced/threat-model.md). - Mithril network - [Architecture](../advanced/mithril-network/architecture.md) - [Mithril aggregator](../advanced/mithril-network/aggregator.md) - [Mithril signer](../advanced/mithril-network/signer.md) - - [Mithril client](../advanced/mithril-network/client.md) + - [Mithril client](../advanced/mithril-network/client.md). diff --git a/docs/website/root/mithril/intro.md b/docs/website/root/mithril/intro.md index 1a6a447beed..cd33224fa0a 100644 --- a/docs/website/root/mithril/intro.md +++ b/docs/website/root/mithril/intro.md @@ -13,14 +13,14 @@ If you're new to Mithril, see the ‘Beginner' explainers: - [Mithril in a nutshell](./beginner/mithril-in-a-nutshell.md) - [Why should you use Mithril?](./beginner/why-use-mithril.md) -- [How it works](./beginner/how-it-works.md) +- [How it works](./beginner/how-it-works.md). To dive deeper into advanced topics, see: - [Mithril protocol](./advanced/mithril-protocol/README.mdx) - [Mithril network](./advanced/mithril-network/README.mdx) - [Mithril security](./advanced/mithril-protocol/security.md) -- [Threat model analysis](./advanced/threat-model.md) +- [Threat model analysis](./advanced/threat-model.md). :::tip @@ -28,6 +28,6 @@ If you need help, feel free to reach out to the Mithril team: - [GitHub discussions](https://github.com/input-output-hk/mithril/discussions) -- [Stack Exchange](https://cardano.stackexchange.com/search?q=mithril) +- [Stack Exchange](https://cardano.stackexchange.com/search?q=mithril). ::: From 5e200cd85112a85e199a159cc7c6eb8f363b865f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Thu, 5 Dec 2024 17:04:29 +0100 Subject: [PATCH 5/6] docs: rotate current version By running 'make update-current' command. --- .../version-maintained/glossary.md | 20 +- .../manual/develop/README.mdx | 2 +- .../develop/nodes/mithril-aggregator.md | 11 +- .../nodes/mithril-client-library-wasm.md | 2 +- .../develop/nodes/mithril-client-library.md | 4 +- .../manual/develop/nodes/mithril-client.md | 4 +- .../manual/develop/nodes/mithril-signer.md | 4 +- .../manual/develop/protocol-simulation.md | 2 +- .../manual/develop/run-mithril-devnet.md | 520 ++++++++++-------- .../mithril/advanced/README.mdx | 9 + .../mithril/advanced/_category_.json | 6 + .../advanced/mithril-network/README.mdx | 9 + .../advanced/mithril-network/_category_.json | 6 + .../mithril-network/aggregator.md | 4 +- .../mithril-network/architecture-c4.puml | 0 .../mithril-network/architecture.md | 4 +- .../{ => advanced}/mithril-network/client.md | 4 +- .../images/aggregator-runtime.jpg | Bin .../mithril-network/images/architecture.svg | 0 .../mithril-network/images/signer-runtime.jpg | Bin .../images/signer-workflow.png | Bin .../{ => advanced}/mithril-network/signer.md | 4 +- .../advanced/mithril-protocol/README.mdx | 9 + .../advanced/mithril-protocol/_category_.json | 6 + .../mithril-protocol/certificates.md | 10 +- .../images/certificate-chain.jpg | Bin .../mithril-protocol/protocol.md | 6 +- .../mithril-protocol/security.md | 38 +- .../mithril/{ => advanced}/threat-model.md | 4 +- .../mithril/beginner/README.mdx | 9 + .../mithril/beginner/_category_.json | 6 + .../mithril/beginner/how-it-works.md | 49 ++ .../mithril/beginner/mithril-in-a-nutshell.md | 24 + .../mithril/beginner/why-use-mithril.md | 24 + .../version-maintained/mithril/intro.md | 49 +- .../mithril/mithril-network/_category_.json | 10 - .../mithril/mithril-protocol/_category_.json | 10 - 37 files changed, 515 insertions(+), 354 deletions(-) create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/README.mdx create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/_category_.json create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/README.mdx create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/_category_.json rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/aggregator.md (97%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/architecture-c4.puml (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/architecture.md (89%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/client.md (97%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/images/aggregator-runtime.jpg (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/images/architecture.svg (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/images/signer-runtime.jpg (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/images/signer-workflow.png (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-network/signer.md (97%) create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/README.mdx create mode 100644 docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/_category_.json rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-protocol/certificates.md (93%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-protocol/images/certificate-chain.jpg (100%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-protocol/protocol.md (96%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/mithril-protocol/security.md (87%) rename docs/website/versioned_docs/version-maintained/mithril/{ => advanced}/threat-model.md (99%) create mode 100644 docs/website/versioned_docs/version-maintained/mithril/beginner/README.mdx create mode 100644 docs/website/versioned_docs/version-maintained/mithril/beginner/_category_.json create mode 100644 docs/website/versioned_docs/version-maintained/mithril/beginner/how-it-works.md create mode 100644 docs/website/versioned_docs/version-maintained/mithril/beginner/mithril-in-a-nutshell.md create mode 100644 docs/website/versioned_docs/version-maintained/mithril/beginner/why-use-mithril.md delete mode 100644 docs/website/versioned_docs/version-maintained/mithril/mithril-network/_category_.json delete mode 100644 docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/_category_.json diff --git a/docs/website/versioned_docs/version-maintained/glossary.md b/docs/website/versioned_docs/version-maintained/glossary.md index 819132024e1..6aeedf1ae8c 100644 --- a/docs/website/versioned_docs/version-maintained/glossary.md +++ b/docs/website/versioned_docs/version-maintained/glossary.md @@ -8,7 +8,7 @@ Below is a comprehensive list of definitions for some common terms used in the M ## Beacon -A beacon represents a point of the blockchain for which a [Mithril certificate](#certificate) is created. It embeds at least the version of the [Cardano network](#cardano-network) that is targeted, the associated [epoch](#epoch), and the [immutable file number](#immutable-file-number). +A beacon represents a point of the blockchain for which a [Mithril certificate](#certificate) is created. It embeds the [epoch](#epoch) of the [Cardano network](#cardano-network) that is targeted, and either the block number or the [immutable file number](#immutable-file-number). ## Cardano network @@ -34,7 +34,7 @@ A Cardano transactions set snapshot represents, in a succinct way, the Cardano t The Mithril aggregator combines the produced [multi-signature](#multi-signature) and some metadata into a Mithril certificate that will be later used by the [Mithril client](#mithril-client) to verify the authenticity of a [snapshot](#snapshot). The certificates are chained so that the [stake distribution](#stake-distribution) used to create the signatures is verifiably genuine. -> More information is available on the [certificates page](./mithril/mithril-protocol/certificates.md). +> More information is available on the [certificates page](./mithril/advanced/mithril-protocol/certificates.md). ## Epoch @@ -48,7 +48,7 @@ Inside the database of a [Cardano node](#cardano-node), the blockchain state is For each [beacon](#beacon), the [Mithril signers](#mithril-signer) will compute on their end a message representing the blockchain state, and sign it with their verification keys to create an [individual signature](#individual-signature). Upon winning one or more lotteries, the Mithril signer will be able to use this individual signature to participate in the creation of a [multi-signature](#multi-signature). -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Mithril aggregator @@ -56,37 +56,37 @@ The Mithril aggregator is a trustless node of the [Mithril network](#mithril-net It is also in charge of creating and storing the [snapshot](#snapshot) archive. -> More information is available on the [aggregator page](./mithril/mithril-network/aggregator.md). +> More information is available on the [aggregator page](./mithril/advanced/mithril-network/aggregator.md). ## Mithril client The Mithril client node within the [Mithril network](#mithril-network) is used to restore a [Cardano full node](#cardano-node) by retrieving, from a [Mithril aggregator](#mithril-aggregator), a remote [snapshot](#snapshot) and its [certificate](#certificate) chain. Finally, it is used to verify snapshot and certificate validity using the Mithril cryptographic primitives. -> More information is available on the [client page](./mithril/mithril-network/client.md). +> More information is available on the [client page](./mithril/advanced/mithril-network/client.md). ## Mithril network In its current version, the Mithril network is a network of nodes responsible for creating [snapshots](#snapshot) and [certificates](#certificate) that enable fast bootstrap of a [Cardano node](#cardano-node). It runs on top of the [Cardano network](#cardano-network). -> More information is available on the [architecture page](./mithril/mithril-network/architecture.md). +> More information is available on the [architecture page](./mithril/advanced/mithril-network/architecture.md). ## Mithril protocol The Mithril protocol allows stakeholders in a proof-of-stake blockchain network to individually sign messages that are aggregated into a multi-signature which guarantees that they represent a minimum share of the total stake. -> More information is on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Mithril signer The Mithril signer is a node of the [Mithril network](#mithril-network) that works transparently on top of the [stake pool operator](#stake-pool-operator-spo) Cardano nodes and which individually signs the ledger state. -> More information is available on the [signer page](./mithril/mithril-network/signer.md). +> More information is available on the [signer page](./mithril/advanced/mithril-network/signer.md). ## Multi-signature The Mithril multi-signature is an aggregate of [individual signatures](#individual-signature), which guarantees that a minimum share of the total stake has participated in its creation. -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). ## Snapshot @@ -106,4 +106,4 @@ A stake pool operator, also known as an SPO, represents a party that holds (via To create [individual signatures](#individual-signature), [Mithril signers](#mithril-signer) must register their signing public key: the verification key. To guarantee their genuineness, they are signed by the associated [Cardano key pair](#cardano-key-pair). It is worth mentioning that a [Mithril signer](#mithril-signer) must be aware of the verification keys of all the other Mithril signers to produce valid individual signatures. -> More information is available on the [protocol page](./mithril/mithril-protocol/protocol.md). +> More information is available on the [protocol page](./mithril/advanced/mithril-protocol/protocol.md). diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/README.mdx b/docs/website/versioned_docs/version-maintained/manual/develop/README.mdx index a85c718459b..bb5d30cabbe 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/README.mdx +++ b/docs/website/versioned_docs/version-maintained/manual/develop/README.mdx @@ -22,6 +22,6 @@ This node verifies and restores a snapshot along with other types of data, facil :::tip -For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/mithril-protocol/protocol.md) section. +For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/advanced/mithril-protocol/protocol.md) section. ::: diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-aggregator.md b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-aggregator.md index 2873c34a3ad..bd7270716d6 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-aggregator.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-aggregator.md @@ -14,9 +14,9 @@ Mithril aggregator is responsible for collecting individual signatures from the :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril aggregator**, please see the [aggregator node](../../../mithril/mithril-network/aggregator.md) overview. +- For more information about the **Mithril aggregator**, please see the [aggregator node](../../../mithril/advanced/mithril-network/aggregator.md) overview. ::: @@ -398,6 +398,7 @@ Here are the available subcommands: | **genesis sign** | Signs the genesis payload with the genesis secret key | | **genesis import** | Imports the genesis signature (the payload signed with the genesis secret key) and creates and imports a genesis certificate in the store | | **genesis bootstrap** | Bootstraps a genesis certificate (test only usage) | +| **genesis generate-keypair** | Generates a genesis keypair | | **era list** | Lists the supported eras | | **era generate-tx-datum** | Generates the era markers transaction datum to be stored on-chain | | **tools recompute-certificates-hash** | Loads all certificates in the database, recomputing their hash, and updating all related entities | @@ -483,6 +484,12 @@ Here is a list of the available parameters: | `target_signed_payload_path` | `--target-signed-payload-path` | - | - | Path of the signed payload to export. | - | - | - | | `genesis_secret_key_path` | `--genesis-secret-key-path` | - | - | Path of the genesis secret key. | - | - | - | +`genesis generate-keypair` command: + +| Parameter | Command line (long) | Command line (short) | Environment variable | Description | Default value | Example | Mandatory | +| ------------- | ------------------- | :------------------: | -------------------- | ------------------------------------- | ------------- | ------- | :----------------: | +| `target_path` | `--target-path` | - | - | Target path for the generated keypair | - | - | :heavy_check_mark: | + `era list` command: | Parameter | Command line (long) | Command line (short) | Environment variable | Description | Default value | Example | Mandatory | diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library-wasm.md b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library-wasm.md index 90780a81421..9101a9278b7 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library-wasm.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library-wasm.md @@ -20,7 +20,7 @@ It is responsible for handling the different types of data certified by Mithril :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview. +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview. ::: diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library.md b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library.md index 5f5876cc5d1..0342695d43e 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client-library.md @@ -20,9 +20,9 @@ It is responsible for handling the different types of data certified by Mithril :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril client** node, please see [this overview](../../../mithril/mithril-network/client.md) +- For more information about the **Mithril client** node, please see [this overview](../../../mithril/advanced/mithril-network/client.md) - Check out the [`Bootstrap a Cardano node`](../../getting-started/bootstrap-cardano-node.md) guide. diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client.md b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client.md index 08cebf630a2..24c97c24fea 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-client.md @@ -15,10 +15,10 @@ Mithril client is responsible for restoring the **Cardano** blockchain on an emp :::tip - For more information about the **Mithril network**, please see - the [architecture](../../../mithril/mithril-network/architecture.md) overview + the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview - For more information about the **Mithril client** node, please - see [this overview](../../../mithril/mithril-network/client.md) + see [this overview](../../../mithril/advanced/mithril-network/client.md) - Check out the [`Bootstrap a Cardano node`](../../getting-started/bootstrap-cardano-node.md) guide. diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-signer.md b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-signer.md index 1c5d63a9638..97e1e849230 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-signer.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/nodes/mithril-signer.md @@ -14,9 +14,9 @@ Mithril signer is responsible for producing individual signatures that are colle :::tip -- For more information about the **Mithril network**, please see the [architecture](../../../mithril/mithril-network/architecture.md) overview +- For more information about the **Mithril network**, please see the [architecture](../../../mithril/advanced/mithril-network/architecture.md) overview -- For more information about the **Mithril signer** node, please see [this overview](../../../mithril/mithril-network/signer.md) +- For more information about the **Mithril signer** node, please see [this overview](../../../mithril/advanced/mithril-network/signer.md) - Check out the [`Run a Mithril signer node`](../../operate/run-signer-node.md) guide. diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/protocol-simulation.md b/docs/website/versioned_docs/version-maintained/manual/develop/protocol-simulation.md index 39d66ad0a9f..a0f8505938e 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/protocol-simulation.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/protocol-simulation.md @@ -294,6 +294,6 @@ Party #0: aggregate signature not found 7724e03fb8d84a376a43b8f41518a11c :::tip -For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/mithril-protocol/protocol.md) section. +For more information about the Mithril protocol, refer to the [about Mithril](../../mithril/advanced/mithril-protocol/protocol.md) section. ::: diff --git a/docs/website/versioned_docs/version-maintained/manual/develop/run-mithril-devnet.md b/docs/website/versioned_docs/version-maintained/manual/develop/run-mithril-devnet.md index 4022e6a1942..1045c90f9e4 100644 --- a/docs/website/versioned_docs/version-maintained/manual/develop/run-mithril-devnet.md +++ b/docs/website/versioned_docs/version-maintained/manual/develop/run-mithril-devnet.md @@ -102,22 +102,79 @@ You should see the following information displayed: Bootstrap Mithril/Cardano devnet ===================================================================== ->> Directory: artifacts ->> Cardano Full nodes: 1 ->> Cardano SPO nodes: 2 ->> Info: Mithril aggregator will be attached to the first Cardano Full node ->> Info: Mithril signers will be attached to each Cardano SPO node +>> The artifacts directory was force deleted +>> Devnet Version: 0.4.6 +>> Artifacts Directory[env::ARTIFACTS_DIR]: artifacts +>> Cardano Full nodes [env::NUM_FULL_NODES]: 1 +>> Cardano SPO nodes [env::NUM_POOL_NODES]: 2 +>> Cardano Node Version [env::CARDANO_NODE_VERSION]: 10.1.2 +>> Cardano Network Magic [env::NETWORK_MAGIC]: 42 +>> Cardano Hard Fork Babbage At Epoch [env::HARD_FORK_BABBAGE_AT_EPOCH]: 0 +>> Cardano Hard Fork Conway At Epoch [env::HARD_FORK_CONWAY_AT_EPOCH]: 0 +>> Cardano Slot Length [env::SLOT_LENGTH]: 0.75s +>> Cardano Epoch Length [env::EPOCH_LENGTH]: 100s +>> Cardano Listening Address [env::LISTENING_ADDR]: 127.0.0.1 +>> Creating artifacts directory... +>> Downloading cardano-cli & cardano-node... +>> Extracting cardano-cli & cardano-node... +generated genesis with: 3 genesis keys, 2 non-delegating UTxO keys, 2 stake pools, 2 delegating UTxO keys, 2 delegation map entries, ===================================================================== Start Cardano nodes ===================================================================== >> Start Cardano network -cardano-node: no process found +cardano-cli 10.1.1.0 - linux-x86_64 - ghc-8.10 +git rev 01bda2e2cb0a70cd95067d696dbb44665f1d680a +cardano-node 10.1.2 - linux-x86_64 - ghc-8.10 +git rev 01bda2e2cb0a70cd95067d696dbb44665f1d680a >> Starting Cardano node 'node-full1' >> Starting Cardano node 'node-pool1' >> Starting Cardano node 'node-pool2' ->> Wait for the Cardano network to be ready +>> Wait for Cardano network to be ready +>>>> Cardano network is not ready yet... [attempt 1] +>>>> Cardano network is not ready yet... [attempt 2] +>>>> Cardano network is not ready yet... [attempt 3] +>>>> Cardano network is ready! +>> Wait for Cardano nodes to have enough immutable files +>> Wait for node-full1 to have enough immutable files +>>>> node-full1 has not enough immutable files yet... [attempt 1] +>>>> node-full1 has not enough immutable files yet... [attempt 2] +>>>> node-full1 has not enough immutable files yet... [attempt 3] +>>>> node-full1 has not enough immutable files yet... [attempt 4] +>>>> node-full1 has not enough immutable files yet... [attempt 5] +>>>> node-full1 has not enough immutable files yet... [attempt 6] +>>>> node-full1 has not enough immutable files yet... [attempt 7] +>>>> node-full1 has not enough immutable files yet... [attempt 8] +>>>> node-full1 has not enough immutable files yet... [attempt 9] +>>>> node-full1 has not enough immutable files yet... [attempt 10] +>>>> node-full1 has not enough immutable files yet... [attempt 11] +>>>> node-full1 has enough immutable files! +>> Wait for node-pool1 to have enough immutable files +>>>> node-pool1 has enough immutable files! +>> Wait for node-pool2 to have enough immutable files +>>>> node-pool2 has enough immutable files! + +>> Info: Mithril Aggregator will be attached to the first Cardano Full node +>> Info: Mithril Signers will be attached to each Cardano SPO node +===================================================================== + Start Mithril nodes +===================================================================== + +>> Start Mithril network +Going to remove artifacts_mithril-aggregator-genesis_run_48d3af826a41 +[+] Running 1/0 + ⠿ Container artifacts_mithril-aggregator-genesis_run_48d3af826a41 Removed 0.0s +[+] Running 4/4 + ⠿ Network artifacts_mithril_network Created 0.1s + ⠿ Container artifacts-mithril-signer-node-pool1-1 Started 0.4s + ⠿ Container artifacts-mithril-aggregator-1 Started 0.5s + ⠿ Container artifacts-mithril-signer-node-pool2-1 Started 0.5s +>> List of Mithril signers +-------- -------------------------------------------------------- ----------------------------------- +Signer 1 pool1vtck0eeqq2x3d5avpxhd904y73syn4l00yurvl0teg7u6nh3afv Certified PoolId +Signer 2 pool1y3pxhtqytcwy3mmnawqf2ej0x9sz5frkkwkz6scfqmzyyw8u38v Certified PoolId +>> Wait for Mithril signers to be registered >>>> Not ready yet >>>> Not ready yet >>>> Not ready yet @@ -131,76 +188,25 @@ cardano-node: no process found >>>> Not ready yet >>>> Not ready yet >>>> Ready! ->> Activate Cardano pools -Estimated transaction fee: Lovelace 843 -Transaction successfully submitted. -Estimated transaction fee: Lovelace 843 -Transaction successfully submitted. ->> Wait for Cardano pools to be activated ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Not activated yet ->>>> Activated! ->>>> Found PoolId: pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys ->>>> Found PoolId: pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav +>> Bootstrap the Genesis certificate +{"msg":"Started","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.953666896Z","hostname":"c993b6b764f2","pid":1,"node_version":"0.5.110+e2fa1e0","run_mode":"dev"} +{Genesis bootstrap for test only! +"msg":"BOOTSTRAP GENESIS command","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.95394937Z","hostname":"c993b6b764f2","pid":1,"config":"Configuration { environment: Production, cardano_cli_path: \"/app/bin/cardano-cli\", cardano_node_socket_path: \"/data/ipc/node.sock\", cardano_node_version: \"10.1.2\", network_magic: Some(42), network: \"devnet\", chain_observer_type: Pallas, protocol_parameters: ProtocolParameters { k: 5, m: 100, phi_f: 0.65 }, snapshot_uploader_type: Local, snapshot_bucket_name: None, snapshot_use_cdn_domain: false, server_ip: \"0.0.0.0\", server_port: 8080, run_interval: 1000, db_directory: \"/data/db\", snapshot_directory: \".\", data_stores_directory: \"/data/mithril/aggregator/stores\", genesis_verification_key: \"5b33322c3235332c3138362c3230312c3137372c31312c3131372c3133352c3138372c3136372c3138312c3138382c32322c35392c3230362c3130352c3233312c3135302c3231352c33302c37382c3231322c37362c31362c3235322c3138302c37322c3133342c3133372c3234372c3136312c36385d\", reset_digests_cache: false, disable_digests_cache: false, store_retention_limit: None, era_reader_adapter_type: Bootstrap, era_reader_adapter_params: None, signed_entity_types: None, snapshot_compression_algorithm: Zstandard, zstandard_parameters: None, cexplorer_pools_url: None, signer_importer_run_interval: 720, allow_unparsable_block: false, cardano_transactions_prover_cache_pool_size: 10, cardano_transactions_database_connection_pool_size: 10, cardano_transactions_signing_config: CardanoTransactionsSigningConfig { security_parameter: BlockNumber(3000), step: BlockNumber(120) }, cardano_transactions_prover_max_hashes_allowed_by_request: 100, cardano_transactions_block_streamer_max_roll_forwards_per_poll: 10000, enable_metrics_server: false, metrics_server_ip: \"0.0.0.0\", metrics_server_port: 9090, persist_usage_report_interval_in_seconds: 10 }"} +{"msg":"Opening SQLite connection","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954098066Z","hostname":"c993b6b764f2","pid":1,"src":"ConnectionBuilder","path":"/data/mithril/aggregator/stores/aggregator.sqlite3"} +{"msg":"Enabling SQLite Write Ahead Log journal mode","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954185725Z","hostname":"c993b6b764f2","pid":1,"src":"ConnectionBuilder"} +{"msg":"Enabling SQLite foreign key support","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954483371Z","hostname":"c993b6b764f2","pid":1,"src":"ConnectionBuilder"} +{"msg":"Applying database migrations","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954561009Z","hostname":"c993b6b764f2","pid":1,"src":"ConnectionBuilder"} +{"msg":"Check database version","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954635652Z","hostname":"c993b6b764f2","pid":1,"src":"DatabaseVersionChecker"} +{"msg":"database up to date","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954704978Z","hostname":"c993b6b764f2","pid":1,"src":"DatabaseVersionChecker"} +{"msg":"New MithrilCertificateVerifier created","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.954756269Z","hostname":"c993b6b764f2","pid":1} +{"msg":"Handle discrepancies at startup of epoch settings store, will record epoch settings from the configuration for epoch 3","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:29:07.956326275Z","hostname":"c993b6b764f2","pid":1,"epoch_settings_configuration":"AggregatorEpochSettings { protocol_parameters: ProtocolParameters { k: 5, m: 100, phi_f: 0.65 }, cardano_transactions_signing_config: CardanoTransactionsSigningConfig { security_parameter: BlockNumber(3000), step: BlockNumber(120) } }"} ===================================================================== - Start Mithril nodes + Schedule Cardano Stake Delegation ===================================================================== ->> Start the Mithril network ->> Build Mithril node Docker images ->>>> Building Mithril aggregator node Docker image ->>>> Building Mithril client node Docker image ->>>> Building Mithril signer node Docker image -No stopped containers -Creating network "artifacts_cardano_network" with driver "bridge" -Creating network "artifacts_mithril_network" with driver "bridge" -Creating artifacts_mithril-aggregator_1 ... done -Creating artifacts_mithril-signer-node-pool1_1 ... done -Creating artifacts_mithril-signer-node-pool2_1 ... done -Creating artifacts_mithril-aggregator-genesis_run ... done -{"msg":"Started","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925641527Z","hostname":"e932dff845aa","pid":1,"config":"Configuration { cardano_cli_path: \"/app/bin/cardano-cli\", cardano_node_socket_path: \"/data/ipc/node.sock\", network_magic: Some(42), network: \"devnet\", protocol_parameters: ProtocolParameters { k: 5, m: 100, phi_f: 0.65 }, snapshot_store_type: Local, snapshot_uploader_type: Local, server_url: \"http://0.0.0.0:8080/\", run_interval: 1000, db_directory: \"/data/db\", snapshot_directory: \"/data/mithril/aggregator\", data_stores_directory: \"/data/mithril/aggregator/stores\", genesis_verification_key: \"5b33322c3235332c3138362c3230312c3137372c31312c3131372c3133352c3138372c3136372c3138312c3138382c32322c35392c3230362c3130352c3233312c3135302c3231352c33302c37382c3231322c37362c31362c3235322c3138302c37322c3133342c3133372c3234372c3136312c36385d\" }","run_mode":"dev"} -{"msg":"New LocalSnapshotUploader created","v":0,"name":"slog-rs","level":20Genesis bootstrap for test only -,"time":"2022-09-06T09:24:31.925683285Z","hostname":"e932dff845aa","pid":1,"snapshot_server_url":"http://0.0.0.0:8080/"} -{"msg":"New MultiSignerImpl created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925711468Z","hostname":"e932dff845aa","pid":1} -{"msg":"New MithrilCertificateVerifier created","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.925736796Z","hostname":"e932dff845aa","pid":1} -{"msg":"Update current_beacon to Beacon { network: \"devnet\", epoch: Epoch(10), immutable_file_number: 47 }","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938337155Z","hostname":"e932dff845aa","pid":1} -{"msg":"Get next signers with stake","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938384324Z","hostname":"e932dff845aa","pid":1} -{"msg":"Get next stake distribution","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938422585Z","hostname":"e932dff845aa","pid":1} -{"msg":"Get stake distribution with epoch offset","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938459565Z","hostname":"e932dff845aa","pid":1,"epoch_offset":0} -{"msg":"Get next protocol parameters","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938500461Z","hostname":"e932dff845aa","pid":1} -{"msg":"Get protocol parameters with epoch offset","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.938535367Z","hostname":"e932dff845aa","pid":1,"epoch_offset":0} -{"msg":"Create clerk","v":0,"name":"slog-rs","level":20,"time":"2022-09-06T09:24:31.93856896Z","hostname":"e932dff845aa","pid":1} -Verify genesis certificate #86a4c56d957636740a75c250fdd9d3b9a9f1539dc93449b1f80fcab49e279d6d @ epoch #10 - -===================================================================== - Schedule Cardano stake delegation -===================================================================== - ->> Begin scheduled delegation ->> 11:24:32: Wait 180s until next delegation round... ->> Run delegation round #1! ->>>> Current Epoch: 12 -Estimated transaction fee: Lovelace 436 -Transaction successfully submitted. -Estimated transaction fee: Lovelace 436 -Transaction successfully submitted. ->> 11:27:32: Wait 180s until next delegation round... ->> Run delegation round #2! ->>>> Current Epoch: 14 -Estimated transaction fee: Lovelace 436 -Transaction successfully submitted. -Estimated transaction fee: Lovelace 436 -Transaction successfully submitted. ->> 11:30:32: Wait 180s until next delegation round... +>> Begin scheduled stakes delegation +>> 11:29:08: Wait 180s until next stakes delegation round... ``` ### Step 2: Query the devnet @@ -222,87 +228,194 @@ The networks will be queried every second and will display: ===================================================================== ===================================================================== -=== Mithril network +=== Mithril Network ===================================================================== >> Query pending certificate -{ - "beacon": { - "network": "devnet", - "epoch": 2, - "immutable_file_number": 6 - }, - "protocol": { - "k": 5, - "m": 100, - "phi_f": 0.65 + +>> Query latest certificates +[ + { + "hash": "cbbf3fc1165ff41f2f0691643febe7f8c2d4f99b5c551d01d5f6cca538db0cd4", + "previous_hash": "3d1ceee23e79b1f510c7a6ce4503552495c6f7134afd04a88042d99264da8515", + "epoch": 15, + "signed_entity_type": { + "CardanoTransactions": [ + 15, + 1589 + ] + }, + "metadata": { + "network": "devnet", + "version": "0.1.0", + "parameters": { + "k": 5, + "m": 100, + "phi_f": 0.65 + }, + "initiated_at": "2024-11-14T10:45:15.434075727Z", + "sealed_at": "2024-11-14T10:45:16.441653366Z", + "total_signers": 2 + }, + "protocol_message": { + "message_parts": { + "cardano_transactions_merkle_root": "ecfeb3584f505906de1fadcc6f4acaa9fda55da82c771073a83bbb288bb62b6e", + "next_aggregate_verification_key": "7b226d745f636f6d6d69746d656e74223a7b22726f6f74223a5b3137382c39342c33322c3132392c3132302c3132382c31372c3232352c37332c3135372c3136362c3132342c3234362c3130362c35352c33362c3135372c332c3137372c3231392c35332c3139342c3139322c39342c3133382c36332c3134332c3233312c3230332c3138362c36342c3134335d2c226e725f6c6561766573223a322c22686173686572223a6e756c6c7d2c22746f74616c5f7374616b65223a3230323830313337303631347d", + "latest_block_number": "1589" + } + }, + "signed_message": "3b2242e276f1d1e8f28e5ffeb0f0c666ef3d5a5b2c8bf827576d4a513ab2de29", + "aggregate_verification_key": "7b226d745f636f6d6d69746d656e74223a7b22726f6f74223a5b3233322c33332c3132362c38392c3134332c3138312c32362c3130362c3131362c37392c3230392c34382c3232302c3136332c3133322c3232302c33312c3136392c3131312c3133382c3130332c39382c37332c37312c3135322c3235352c34352c3138322c39362c32382c3137362c3136355d2c226e725f6c6561766573223a322c22686173686572223a6e756c6c7d2c22746f74616c5f7374616b65223a3139303036353437303735387d" }, - "signers": [] -} + { + "hash": "47068954d8600c214a194be00790a6108c7b397fc91f950f063c7877d8121b92", + "previous_hash": "3d1ceee23e79b1f510c7a6ce4503552495c6f7134afd04a88042d99264da8515", + "epoch": 15, + "signed_entity_type": { + "CardanoTransactions": [ + 15, + 1574 + ] + }, + "metadata": { + "network": "devnet", + "version": "0.1.0", + "parameters": { + "k": 5, + "m": 100, + "phi_f": 0.65 + }, + "initiated_at": "2024-11-14T10:45:04.382631109Z", + "sealed_at": "2024-11-14T10:45:05.394615861Z", + "total_signers": 2 + }, + "protocol_message": { + "message_parts": { + "cardano_transactions_merkle_root": "ecfeb3584f505906de1fadcc6f4acaa9fda55da82c771073a83bbb288bb62b6e", + "next_aggregate_verification_key": "7b226d745f636f6d6d69746d656e74223a7b22726f6f74223a5b3137382c39342c33322c3132392c3132302c3132382c31372c3232352c37332c3135372c3136362c3132342c3234362c3130362c35352c33362c3135372c332c3137372c3231392c35332c3139342c3139322c39342c3133382c36332c3134332c3233312c3230332c3138362c36342c3134335d2c226e725f6c6561766573223a322c22686173686572223a6e756c6c7d2c22746f74616c5f7374616b65223a3230323830313337303631347d", + "latest_block_number": "1574" + } + }, + "signed_message": "ed76b5a8b41e4800fd4babc5bcffe483fe9daf43342aaddefe1f197907f0af06", + "aggregate_verification_key": "7b226d745f636f6d6d69746d656e74223a7b22726f6f74223a5b3233322c33332c3132362c38392c3134332c3138312c32362c3130362c3131362c37392c3230392c34382c3232302c3136332c3133322c3232302c33312c3136392c3131312c3133382c3130332c39382c37332c37312c3135322c3235352c34352c3138322c39362c32382c3137362c3136355d2c226e725f6c6561766573223a322c22686173686572223a6e756c6c7d2c22746f74616c5f7374616b65223a3139303036353437303735387d" + } +] ->> Query snapshots +>> Query latest mithril stake distributions [ { - "digest": "224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac", - "certificate_hash": "5b29543c4af0f369d40e1da53451ebd8a39c4263df1585eb072f54511c1e3333", - "size": 7986, - "created_at": "2022-07-05T11:26:55.855498395Z", - "locations": [ - "http://0.0.0.0:8080/aggregator/snapshot/224b77ad9cbe7fc81e6808940d391b299c27e77d9978641025f382e2e5ddd2ac/download" - ] + "epoch": 15, + "hash": "61239e7ea3388238aae9336ccbce50c477ad42478f6fc1642210708118c7ca00", + "certificate_hash": "3d1ceee23e79b1f510c7a6ce4503552495c6f7134afd04a88042d99264da8515", + "created_at": "2024-11-14T10:44:11.099191475Z" }, { - "digest": "1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0", - "certificate_hash": "be758b84a4b495e82af48747356946efb509ccbc4b44a9c985e3cb3099e35c94", - "size": 6743, - "created_at": "2022-07-05T11:26:35.658661878Z", + "epoch": 14, + "hash": "0c1962696593e52c21683287df30f47027ae5d5f669384f5534784e6f51cdd33", + "certificate_hash": "fa6fc82a1a2bf93a81f5920f1d0ac143aa73183b4b8226a54f3e16741f3705a1", + "created_at": "2024-11-14T10:42:55.567493973Z" + } +] + +>> Query latest snapshots +[ + { + "digest": "4c7b06dd2bef1416391b92a46dae7d2f606ced2954b628f844b021ba5b52b15f", + "network": "devnet", + "beacon": { + "network": "devnet", + "epoch": 15, + "immutable_file_number": 14 + }, + "certificate_hash": "f601ab107b546d8791075916b9fd6ba374b30a7ce6030549e140bac04078b3b6", + "size": 519351, + "created_at": "2024-11-14T10:44:17.153390171Z", "locations": [ - "http://0.0.0.0:8080/aggregator/snapshot/1a39f57c906133421ab7b5c782762b6abff4771b5e9158a977e58db1edc26bd0/download" - ] + "http://0.0.0.0:8080/aggregator/artifact/snapshot/4c7b06dd2bef1416391b92a46dae7d2f606ced2954b628f844b021ba5b52b15f/download" + ], + "compression_algorithm": "zstandard", + "cardano_node_version": "10.1.2" }, { - "digest": "fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1", - "certificate_hash": "4254a6176afbe17967ad1671e4619e9a3f3412115a63dd0eb0f5e8b64094128a", - "size": 6199, - "created_at": "2022-07-05T11:26:20.470029035Z", + "digest": "b98b25f505401e967df1012a4c13385290db15d157d0292e9f8290bd9933a66e", + "network": "devnet", + "beacon": { + "network": "devnet", + "epoch": 14, + "immutable_file_number": 13 + }, + "certificate_hash": "1ec38ed6f158664bf792fb2fddd08e49b52232023b4130b3ebd92e90d659f200", + "size": 469807, + "created_at": "2024-11-14T10:43:01.620428990Z", "locations": [ - "http://0.0.0.0:8080/aggregator/snapshot/fd1a39d28998ba18c96547f62d308c57612ed348be058f615c14db5228a947c1/download" - ] + "http://0.0.0.0:8080/aggregator/artifact/snapshot/b98b25f505401e967df1012a4c13385290db15d157d0292e9f8290bd9933a66e/download" + ], + "compression_algorithm": "zstandard", + "cardano_node_version": "10.1.2" } ] + ===================================================================== -=== Cardano network +=== Cardano Network ===================================================================== >> Query chain tip { - "era": "Alonzo", - "syncProgress": "100.00", - "hash": "075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452", - "epoch": 2, - "slot": 219, - "block": 9 + "block": 1599, + "epoch": 15, + "era": "Conway", + "hash": "1d46bbd5179968366568822961f8df9d0e0ea0d74bcf1b371402ddeee315ea41", + "slot": 1599, + "slotInEpoch": 99, + "slotsToEpochEnd": 1, + "syncProgress": "100.00" } ->> Query the whole UTXO +>> Query whole utxo TxHash TxIx Amount -------------------------------------------------------------------------------------- -4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 0 447999157 lovelace + TxOutDatumNone -4980fb7c90bc003f6af65778008732cd1b1a8c0873b7d622bfb7442f1312c9b5 1 2000000 lovelace + TxOutDatumNone -c31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 0 448999157 lovelace + TxOutDatumNone -c31e535531c9eb32bdd8f05e25204186333262674d24c6a770b6b120f020d9a9 1 1000000 lovelace + TxOutDatumNone -ed265b672873192ea1e9c19092e8f41947c28977438bcff580312de37cfbd46c 0 1002000000 lovelace + TxOutDatumNone +0227b08e4971e69af83e4f7f37f9b6db11a4e5b0293259bcbc18b960cca2aa34 0 2000003 lovelace + TxOutDatumNone +07ccbb09c88f1789512879adc5c46b70f746d27fc77a938d879b0235ffd06e10 0 20000000001 lovelace + TxOutDatumNone +08823e13632b63dcd2eaf6f064c960b94f1d51652dc218e306305ee13fec5d9f 0 2000002 lovelace + TxOutDatumNone +099b200f28beedd811298150f55f96e3f9c100975dd1b978040e8cc667d44093 0 1000001 lovelace + TxOutDatumNone +13c36c25cbd8afb893813f996907ab13f9f89fd46b5c9a79710996869311ae83 0 6000000 lovelace + TxOutDatumNone +22d4daa27b05d1045f788ae981297ec6038c0856c974f8042be7209b8e6d94db 0 1000002 lovelace + TxOutDatumNone +46e00ecedaa75c64bf23b9c4d95b74e1432570feb800ecb0ab5eb1de05a6e4f1 0 2000004 lovelace + TxOutDatumNone +4a1c33bb474d27398bcd2d79ffca99e675850cba01655a7a7fc1110b3a0b85e3 0 1000003 lovelace + TxOutDatumNone +993b375acdd9f28ce1e7eab5a870d382d090b6ec1ce3372581c7c8b03e356d3b 0 2000001 lovelace + TxOutDatumNone +b9b28ace208bd3fb5feda08e6978ea274be8c2f8d8852ac8ea08dd27cd99133e 0 6000000 lovelace + TxOutDatumNone +bf208279833e96f02cf5d91805898b40784a9516f7f122edcf1fb2c773019861 0 1000005 lovelace + TxOutDatumNone +bf208279833e96f02cf5d91805898b40784a9516f7f122edcf1fb2c773019861 1 899993679904 lovelace + TxOutDatumNone +e0e68233e335f20b319d220a4e3e0fbca8f4b0c493a2ba216fa81a17520de4a4 0 20000000001 lovelace + TxOutDatumNone +e9ca751d4fc6bd00203d36184de814f6687f017ec6a4c6e481e1e188208c8b1f 0 2000005 lovelace + TxOutDatumNone +e9ca751d4fc6bd00203d36184de814f6687f017ec6a4c6e481e1e188208c8b1f 1 899988679904 lovelace + TxOutDatumNone +f5f61cdd76949003172e85941f4aae85ce99764b4a66e378dfb1e1f7fd1abde7 0 1000004 lovelace + TxOutDatumNone >> Query stake pools -pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys -pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav +pool1y3pxhtqytcwy3mmnawqf2ej0x9sz5frkkwkz6scfqmzyyw8u38v +pool1vtck0eeqq2x3d5avpxhd904y73syn4l00yurvl0teg7u6nh3afv >> Query stake distribution - PoolId Stake frac ------------------------------------------------------------------------------- -pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys 1.052e-3 -pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4 +{ + "pools": { + "24426bac045e1c48ef73eb8095664f31602a2476b3ac2d430906c442": { + "stakeGo": 96954320166, + "stakeMark": 110102978737, + "stakeSet": 103772355610 + }, + "62f167e720028d16d3ac09aed2bea4f46049d7ef7938367debca3dcd": { + "stakeGo": 93111150592, + "stakeMark": 105309514088, + "stakeSet": 99029015004 + } + }, + "total": { + "stakeGo": 190065470758, + "stakeMark": 215412492825, + "stakeSet": 202801370614 + } +} ``` ### Step 3: Observe the devnet @@ -310,7 +423,7 @@ pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav 5.258e-4 Open a third terminal window. Watch the logs of each devnet node: ```bash -watch -n 1 LINES=5 ./devnet-log.sh +watch -n 1 `LINES=5 ./devnet-log.sh` ``` The nodes will be queried every second and will display thus: @@ -321,107 +434,74 @@ The nodes will be queried every second and will display thus: ===================================================================== ===================================================================== --- docker compose logs --tail=5 +=== Mithril Network ===================================================================== -Attaching to artifacts_mithril-signer-node-pool1_1, artifacts_mithril-signer-node-pool2_1, artifacts_mithril-aggregator_1 -mithril-aggregator_1 | {"msg":"Epoch computation is not final and needs to be fixed: 4","v":0,"name":"slog-rs","level":40,"time":"2022-07-05T11:29:32.726760492Z","hostname":"ba17593540ac","pid":1} -mithril-aggregator_1 | {"msg":"Get signer pool1c56jqj5qsala8c24829sxqp0fcrtrrtcmezgrs6w60hl2nwsvav","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.72678048Z","hostname":"ba17593540ac","pid":1} -mithril-aggregator_1 | {"msg":"Epoch computation is not final and needs to be fixed: 4","v":0,"name":"slog-rs","level":40,"time":"2022-07-05T11:29:32.72679661Z","hostname":"ba17593540ac","pid":1} -mithril-aggregator_1 | {"msg":"Get signer pool1v55rfy864kslz86u45w4juahtuqr7cy282rffdnpc9exjlguvys","v":0,"name":"slog-rs","level":20,"time":"2022-07-05T11:29:32.734529107Z","hostname":"ba17593540ac","pid":1} -mithril-aggregator_1 | {"msg":"Epoch computation is not final and needs to be fixed: 4","v":0,"name":"slog-rs","level":40,"time":"2022-07-05T11:29:32.734553714Z","hostname":"ba17593540ac","pid":1} -mithril-signer-node-pool1_1 | {"msg":"Signing digest","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.744124074Z","hostname":"4fc53f5ce413","pid":1,"digester_result":"DigesterResult {\n digest: \"e5ac1579a3fff12bf19ef88b0d9ec9d8a1c53e4d74c38c023b2e33638f454d67\",\n last_immutable_file_number: 17,\n}"} -mithril-signer-node-pool1_1 | {"msg":"Register signatures","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.744140625Z","hostname":"4fc53f5ce413","pid":1} -mithril-signer-node-pool1_1 | {"msg":"Epoch computation is not final and needs to be fixed: 4","v":0,"name":"slog-rs","level":40,"time":"2022-07-05T11:29:32.744155293Z","hostname":"4fc53f5ce413","pid":1} -mithril-signer-node-pool1_1 | {"msg":"SingleSignaturesComputeFailed(UnregisteredVerificationKey)","v":0,"name":"slog-rs","level":50,"time":"2022-07-05T11:29:32.744336041Z","hostname":"4fc53f5ce413","pid":1} -mithril-signer-node-pool1_1 | {"msg":"Sleeping for 1000","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.744352051Z","hostname":"4fc53f5ce413","pid":1} -mithril-signer-node-pool2_1 | {"msg":"Signing digest","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.73359119Z","hostname":"1c671096ee3f","pid":1,"digester_result":"DigesterResult {\n digest: \"e5ac1579a3fff12bf19ef88b0d9ec9d8a1c53e4d74c38c023b2e33638f454d67\",\n last_immutable_file_number: 17,\n}"} -mithril-signer-node-pool2_1 | {"msg":"Register signatures","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.733607821Z","hostname":"1c671096ee3f","pid":1} -mithril-signer-node-pool2_1 | {"msg":"Epoch computation is not final and needs to be fixed: 4","v":0,"name":"slog-rs","level":40,"time":"2022-07-05T11:29:32.733623511Z","hostname":"1c671096ee3f","pid":1} -mithril-signer-node-pool2_1 | {"msg":"SingleSignaturesComputeFailed(UnregisteredVerificationKey)","v":0,"name":"slog-rs","level":50,"time":"2022-07-05T11:29:32.733786246Z","hostname":"1c671096ee3f","pid":1} -mithril-signer-node-pool2_1 | {"msg":"Sleeping for 1000","v":0,"name":"slog-rs","level":30,"time":"2022-07-05T11:29:32.733802416Z","hostname":"1c671096ee3f","pid":1} -===================================================================== -===================================================================== -tail -n 22 ./node-full1/node.log -===================================================================== -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:28.01 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 219, dsSuffix = Nothing} at 075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452 at slot 219 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:40.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 228, dsSuffix = Nothing} at 720c625a259a23f21926fe7a30dad9b7a4b50958a508c8cfdc96a94625fbf00d at slot 228 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.75 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.76 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:52.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 253, dsSuffix = Nothing} at af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:03.26 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 257, dsSuffix = Nothing} at 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:16.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 283, dsSuffix = Nothing} at c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:37.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 300, dsSuffix = Nothing} at e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.75 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:58.75 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 303, dsSuffix = Nothing} at bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:05.50 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 328, dsSuffix = Nothing} at 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:19.75 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 357, dsSuffix = Nothing} at 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:31.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 366, dsSuffix = Nothing} at 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 -===================================================================== +--------------------------------------------------------------------- +docker logs -n 5 artifacts-mithril-aggregator-1 +--------------------------------------------------------------------- +{"msg":"Marked expired open messages","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:45:00.368456608Z","hostname":"bd8372c8c9d5","pid":1,"src":"AggregatorRunner","expired_open_message":"None"} +{"msg":">> get_open_message(signed_entity_type: CardanoTransactions(Epoch(15), BlockNumber(1559)))","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:45:00.368471645Z","hostname":"bd8372c8c9d5","pid":1,"src":"MithrilCertifierService"} +{"msg":" ⋅ No open message to certify, waiting…","v":0,"name":"mithril-aggregator","level":30,"time":"2024-11-14T10:45:00.36863267Z","hostname":"bd8372c8c9d5","pid":1,"src":"AggregatorRuntime","time_point":"TimePoint { epoch: Epoch(15), immutable_file_number: 14, chain_point: ChainPoint { slot_number: SlotNumber(1569), block_number: BlockNumber(1569), block_hash: \"6aadd9a1c21c53f79b703cabfc2a49032dcde2464b94ab578719b6aadb222f23\" } }"} +{"msg":"Incrementing 'mithril_aggregator_runtime_cycle_success_since_startup' counter","v":0,"name":"mithril-aggregator","level":20,"time":"2024-11-14T10:45:00.368647673Z","hostname":"bd8372c8c9d5","pid":1,"src":"MetricsService"} +{"msg":"… Cycle finished, Sleeping for 1000 ms","v":0,"name":"mithril-aggregator","level":30,"time":"2024-11-14T10:45:00.368664195Z","hostname":"bd8372c8c9d5","pid":1,"src":"AggregatorRuntime"} +--------------------------------------------------------------------- + +--------------------------------------------------------------------- +docker logs -n 5 artifacts-mithril-signer-node-pool1-1 +--------------------------------------------------------------------- +{"msg":">> get_current_time_point","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.5408476Z","hostname":"143e20c318ed","pid":1,"src":"SignerRunner"} +{"msg":">> get_beacon_to_sign(time_point: TimePoint (epoch: 15, immutable_file_number: 14, chain_point: ChainPoint (slot_number: 1571, block_number: 1571, block_hash: 50640d2cbcc7a36cda9bb42b127769448b3799b95613ebcc021b0b416b793942)))","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.541841221Z","hostname":"143e20c318ed","pid":1,"src":"SignerRunner"} +{"msg":" ⋅ No beacon to sign, waiting…","v":0,"name":"mithril-signer","level":30,"time":"2024-11-14T10:45:00.541994982Z","hostname":"143e20c318ed","pid":1,"src":"StateMachine"} +{"msg":"Incrementing 'mithril_signer_runtime_cycle_success_since_startup' counter","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.542006483Z","hostname":"143e20c318ed","pid":1,"src":"MetricsService"} +{"msg":"… Cycle finished, Sleeping for 700 ms","v":0,"name":"mithril-signer","level":30,"time":"2024-11-14T10:45:00.542022062Z","hostname":"143e20c318ed","pid":1,"src":"StateMachine"} +--------------------------------------------------------------------- + +--------------------------------------------------------------------- +docker logs -n 5 artifacts-mithril-signer-node-pool2-1 +--------------------------------------------------------------------- +{"msg":">> get_current_time_point","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.526442506Z","hostname":"b675f9c9de52","pid":1,"src":"SignerRunner"} +{"msg":">> get_beacon_to_sign(time_point: TimePoint (epoch: 15, immutable_file_number: 14, chain_point: ChainPoint (slot_number: 1571, block_number: 1571, block_hash: 50640d2cbcc7a36cda9bb42b127769448b3799b95613ebcc021b0b416b793942)))","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.527386742Z","hostname":"b675f9c9de52","pid":1,"src":"SignerRunner"} +{"msg":" ⋅ No beacon to sign, waiting…","v":0,"name":"mithril-signer","level":30,"time":"2024-11-14T10:45:00.527529799Z","hostname":"b675f9c9de52","pid":1,"src":"StateMachine"} +{"msg":"Incrementing 'mithril_signer_runtime_cycle_success_since_startup' counter","v":0,"name":"mithril-signer","level":20,"time":"2024-11-14T10:45:00.527539103Z","hostname":"b675f9c9de52","pid":1,"src":"MetricsService"} +{"msg":"… Cycle finished, Sleeping for 700 ms","v":0,"name":"mithril-signer","level":30,"time":"2024-11-14T10:45:00.527547906Z","hostname":"b675f9c9de52","pid":1,"src":"StateMachine"} +--------------------------------------------------------------------- -===================================================================== -tail -n 22 ./node-pool1/node.log -===================================================================== -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:28.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 219, dsSuffix = Nothing} at 075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452 at slot 219 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.76 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:40.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 228, dsSuffix = Nothing} at 720c625a259a23f21926fe7a30dad9b7a4b50958a508c8cfdc96a94625fbf00d at slot 228 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:52.75 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 253, dsSuffix = Nothing} at af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.26 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:03.26 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 257, dsSuffix = Nothing} at 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:16.01 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 283, dsSuffix = Nothing} at c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:37.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 300, dsSuffix = Nothing} at e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:58.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 303, dsSuffix = Nothing} at bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:05.51 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 328, dsSuffix = Nothing} at 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:19.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 357, dsSuffix = Nothing} at 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:31.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 366, dsSuffix = Nothing} at 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 -===================================================================== ===================================================================== -tail -n 22 ./node-pool2/node.log -===================================================================== -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:28.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 219, dsSuffix = Nothing} at 075fc8366d353b45debedfc6faa92148c8fad584d81dbb4ea7b8b4d121489452 at slot 219 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:40.75 UTC] Chain extended, new tip: af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:40.75 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 228, dsSuffix = Nothing} at 720c625a259a23f21926fe7a30dad9b7a4b50958a508c8cfdc96a94625fbf00d at slot 228 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:43.76 UTC] Chain extended, new tip: 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:27:52.75 UTC] Chain extended, new tip: bfc0b2c1c4d06699efcdf6ad7b33c48cea722fb4bb5c5d6761a3768609cf77a4 at slot 269 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:27:52.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 253, dsSuffix = Nothing} at af93c6964de49d0696bf194c222f6e5a40e5123ef688a20613a33a705b6b736a at slot 253 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:03.25 UTC] Chain extended, new tip: c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:03.25 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 257, dsSuffix = Nothing} at 9f141fe78c0baa433c2554d3a09a9b43c47faa7b740be254893000310e5bad3b at slot 257 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:04.75 UTC] Chain extended, new tip: ac332aea5f043b3fd5ac68a04225932a21935ad7e5c5cfbb7e5b0b00df713bff at slot 285 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:16.00 UTC] Chain extended, new tip: e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:16.01 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 283, dsSuffix = Nothing} at c6238e98f186278eeef86d13f3482ebfb9b1d01d2a28da78282bfd241524eccd at slot 283 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:18.25 UTC] Chain extended, new tip: bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:37.00 UTC] Chain extended, new tip: 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:37.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 300, dsSuffix = Nothing} at e68d08e0c127a5346a74dd06713d8de0b4e37e338a0e03987da356bb70892b99 at slot 300 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:28:58.76 UTC] Chain extended, new tip: 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:28:58.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 303, dsSuffix = Nothing} at bc07b985d7f76bacc0a726b2dc5aa76a7254f1e4548a633cdfd62c31e022b3a5 at slot 303 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:05.50 UTC] Chain extended, new tip: 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:05.50 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 328, dsSuffix = Nothing} at 7d53c5eba9679c96ba32d79a02cfd953280b3477f1dd8eeb18447638c8a30e20 at slot 328 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:19.75 UTC] Chain extended, new tip: 5733ec701db5c9dc253dd4b611421de0c2d223e6ee99c8d61010a9fea42d504b at slot 385 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:19.76 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 357, dsSuffix = Nothing} at 3e9734018c585eea160a33accf82f758713f0e7aae1fab4dc40bccd859b8066f at slot 357 -[jp:cardano.node.ChainDB:Notice:21] [2022-07-05 11:29:31.00 UTC] Chain extended, new tip: 331c824ebee92dee7717f7bcc1457ac89b0de33d76073e6edd97a28770fa364b at slot 400 -[jp:cardano.node.ChainDB:Info:25] [2022-07-05 11:29:31.00 UTC] Took ledger snapshot DiskSnapshot {dsNumber = 366, dsSuffix = Nothing} at 8876850840ae52ca240d517def4b9c8a5db98e2e7db17f8abf87e4f12db13d15 at slot 366 +=== Cardano Network ===================================================================== +--------------------------------------------------------------------- +tail -n 5 ./node-full1/node.log +--------------------------------------------------------------------- +[denis-XP:cardano.node.LocalErrorPolicy:Error:63] [2024-11-14 10:45:00.36 UTC] IP LocalAddress "node-full1/ipc/node.sock@2660" ErrorPolicyUnhandledApplicationException (MuxError MuxBearerClosed " closed when reading data, waiting on next header True") +[denis-XP:cardano.node.LocalErrorPolicy:Error:63] [2024-11-14 10:45:00.36 UTC] IP LocalAddress "node-full1/ipc/node.sock@2659" ErrorPolicyUnhandledApplicationException (MuxError MuxBearerClosed " closed when reading data, waiting on next header True") +[denis-XP:cardano.node.ChainDB:Notice:23] [2024-11-14 10:45:01.00 UTC] Chain extended, new tip: d710c33fa606ae604b9de61eb10e83cd937ef4ab33cfb5afdce42e782b752a0a at slot 1572 +[denis-XP:cardano.node.Mempool:Info:31] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("tag",String "RisingEdge")])),("kind",String "TraceMempoolSynced")] +[denis-XP:cardano.node.Mempool:Info:31] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("contents",Number 6.8471e-5),("tag",String "FallingEdgeWith")])),("kind",String "TraceMempoolSynced")] +--------------------------------------------------------------------- + +--------------------------------------------------------------------- +tail -n 5 ./node-pool1/node.log +--------------------------------------------------------------------- +[denis-XP:cardano.node.LocalErrorPolicy:Error:64] [2024-11-14 10:45:00.83 UTC] IP LocalAddress "node-pool1/ipc/node.sock@3353" ErrorPolicyUnhandledApplicationException (MuxError MuxBearerClosed " closed when reading data, waiting on next header True") +[denis-XP:cardano.node.LocalErrorPolicy:Error:64] [2024-11-14 10:45:00.83 UTC] IP LocalAddress "node-pool1/ipc/node.sock@3352" ErrorPolicyUnhandledApplicationException (MuxError MuxBearerClosed " closed when reading data, waiting on next header True") +[denis-XP:cardano.node.ChainDB:Notice:22] [2024-11-14 10:45:01.00 UTC] Chain extended, new tip: d710c33fa606ae604b9de61eb10e83cd937ef4ab33cfb5afdce42e782b752a0a at slot 1572 +[denis-XP:cardano.node.Mempool:Info:30] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("tag",String "RisingEdge")])),("kind",String "TraceMempoolSynced")] +[denis-XP:cardano.node.Mempool:Info:30] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("contents",Number 6.2125e-5),("tag",String "FallingEdgeWith")])),("kind",String "TraceMempoolSynced")] +--------------------------------------------------------------------- + +--------------------------------------------------------------------- +tail -n 5 ./node-pool2/node.log +--------------------------------------------------------------------- +[denis-XP:cardano.node.Mempool:Info:30] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("contents",Number 5.1172e-5),("tag",String "FallingEdgeWith")])),("kind",String "TraceMempoolSynced")] +[denis-XP:cardano.node.ChainDB:Info:22] [2024-11-14 10:45:01.00 UTC] Block fits onto some fork: d710c33fa606ae604b9de61eb10e83cd937ef4ab33cfb5afdce42e782b752a0a at slot 1572 +[denis-XP:cardano.node.ChainDB:Notice:22] [2024-11-14 10:45:01.00 UTC] Switched to a fork, new tip: d710c33fa606ae604b9de61eb10e83cd937ef4ab33cfb5afdce42e782b752a0a at slot 1572 +[denis-XP:cardano.node.Mempool:Info:30] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("tag",String "RisingEdge")])),("kind",String "TraceMempoolSynced")] +[denis-XP:cardano.node.Mempool:Info:30] [2024-11-14 10:45:01.00 UTC] fromList [("enclosingTime",Object (fromList [("contents",Number 4.089e-5),("tag",String "FallingEdgeWith")])),("kind",String "TraceMempoolSynced")] +--------------------------------------------------------------------- + ``` ## Interact with the Mithril aggregator by using the Mithril client diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/README.mdx b/docs/website/versioned_docs/version-maintained/mithril/advanced/README.mdx new file mode 100644 index 00000000000..3600c41437f --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/README.mdx @@ -0,0 +1,9 @@ +--- +title: Advanced +--- + +import DocCardList from "@theme/DocCardList"; + +This section delves into the technical aspects of Mithril, providing detailed insights into its protocol, phases, certificate chain design, and network architecture. Explore these topics to understand how Mithril solves blockchain challenges at a deeper level. + + diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/advanced/_category_.json new file mode 100644 index 00000000000..2244fab97d5 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Advanced", + "collapsible": true, + "collapsed": false, + "position": 3 +} diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/README.mdx b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/README.mdx new file mode 100644 index 00000000000..98499c1eb85 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/README.mdx @@ -0,0 +1,9 @@ +--- +title: Mithril network +--- + +import DocCardList from "@theme/DocCardList"; + +This section explores the Mithril network, which consists of various nodes that work together to execute the protocol’s rules for signing, aggregating, and verifying blockchain data. By distributing these responsibilities across a decentralized network, Mithril ensures secure, efficient, and scalable data validation without requiring full node operations. + + diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/_category_.json new file mode 100644 index 00000000000..f60bec40c41 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Mithril network", + "collapsible": true, + "collapsed": false, + "position": 2 +} diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/aggregator.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/aggregator.md similarity index 97% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/aggregator.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/aggregator.md index 7d703530800..a1b84ea9f47 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/aggregator.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/aggregator.md @@ -3,7 +3,7 @@ sidebar_position: 2 sidebar_label: Mithril aggregator --- -# Mithril aggregator node +# Mithril aggregator :::info @@ -15,7 +15,7 @@ A **Mithril aggregator** is a trustless node responsible for coordinating the ac - For more information about the **Mithril protocol**, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the **Mithril aggregator**, see the [developer manual](../../manual/develop/nodes/mithril-aggregator.md). +- For more information about the **Mithril aggregator**, see the [developer manual](../../../manual/develop/nodes/mithril-aggregator.md). ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/architecture-c4.puml b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/architecture-c4.puml similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/architecture-c4.puml rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/architecture-c4.puml diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/architecture.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/architecture.md similarity index 89% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/architecture.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/architecture.md index ad6cc57e4f8..3547de93c7f 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/architecture.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/architecture.md @@ -3,7 +3,7 @@ sidebar_position: 1 sidebar_label: Architecture --- -# Mithril network architecture +# Architecture :::info @@ -33,7 +33,7 @@ The network is composed of the following nodes: - **Mithril relay**: -> A forward proxy that is used to secure communications between the Mithril signer and the Mithril aggregator. More information is available in the [Mithril signer deployment model](../../manual/operate/run-signer-node.md#mithril-signer-deployment-model) section. +> A forward proxy that is used to secure communications between the Mithril signer and the Mithril aggregator. More information is available in the [Mithril signer deployment model](../../../manual/operate/run-signer-node.md#mithril-signer-deployment-model) section. :::tip diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/client.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/client.md similarity index 97% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/client.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/client.md index ecd563037e1..238c3d70603 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/client.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/client.md @@ -3,7 +3,7 @@ sidebar_position: 4 sidebar_label: Mithril client --- -# Mithril client node +# Mithril client :::info @@ -18,7 +18,7 @@ The Mithril client node is used to list, show or verify artifacts certified by M - For more information about the Mithril protocol, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the Mithril client, see the [developer manual](../../manual/develop/nodes/mithril-client.md). +- For more information about the Mithril client, see the [developer manual](../../../manual/develop/nodes/mithril-client.md). ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/aggregator-runtime.jpg b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/aggregator-runtime.jpg similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/aggregator-runtime.jpg rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/aggregator-runtime.jpg diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/architecture.svg b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/architecture.svg similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/architecture.svg rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/architecture.svg diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/signer-runtime.jpg b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/signer-runtime.jpg similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/signer-runtime.jpg rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/signer-runtime.jpg diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/signer-workflow.png b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/signer-workflow.png similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/images/signer-workflow.png rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/images/signer-workflow.png diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/signer.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/signer.md similarity index 97% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-network/signer.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/signer.md index 4a6ef14d24d..2a76a382764 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/signer.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-network/signer.md @@ -3,7 +3,7 @@ sidebar_position: 3 sidebar_label: Mithril signer --- -# Mithril signer node +# Mithril signer :::info @@ -15,7 +15,7 @@ The Mithril signer is a node that works transparently on top of the stake pool o - For more information about the **Mithril protocol**, see the [protocol in depth](../mithril-protocol/protocol.md) overview. -- For more information about the **Mithril signer**, see the [developer manual](../../manual/develop/nodes/mithril-signer.md). +- For more information about the **Mithril signer**, see the [developer manual](../../../manual/develop/nodes/mithril-signer.md). ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/README.mdx b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/README.mdx new file mode 100644 index 00000000000..59aa5408186 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/README.mdx @@ -0,0 +1,9 @@ +--- +title: Mithril protocol +--- + +import DocCardList from "@theme/DocCardList"; + +This section explains the Mithril protocol, which serves as the foundational cryptographic framework for the system. It outlines the processes for creating and verifying multi-signatures, enabling secure and efficient blockchain data validation. By leveraging a stake-based threshold signature scheme, the Mithril protocol ensures scalability, decentralization, and integrity within the network. + + diff --git a/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/_category_.json new file mode 100644 index 00000000000..8a8bdf8e5c1 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Mithril protocol", + "collapsible": true, + "collapsed": false, + "position": 1 +} diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/certificates.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/certificates.md similarity index 93% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/certificates.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/certificates.md index efcb0c6eaaf..b7216406bd6 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/certificates.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/certificates.md @@ -1,16 +1,12 @@ --- sidebar_position: 2 -sidebar_label: Certificate chain in depth +sidebar_label: Certificate chain design --- -# Mithril certificate chain in depth +# Certificate chain design ## Introduction -The **Mithril protocol** can be summarized as: - -> A protocol that enables stakeholders in a proof-of-stake blockchain network to individually sign messages. These signatures are then aggregated into a multi-signature, ensuring that stakeholders collectively represent a minimum share of the total stake. - The **certificate chain** is a Mithril component that certifies the **stake distribution** used to create the multi-signature. Its primary purpose is to prevent adversaries from executing an **eclipse attack** on the blockchain. Without the certificate, the stake distribution can't be trusted. A malicious actor could relatively easily create a fake stake distribution and use it to produce a valid multi-signature, which would be embedded in a valid but non-genuine certificate. This certificate could be served by a dishonest Mithril aggregator node, leading an honest Mithril client to restore a non-genuine snapshot. @@ -61,7 +57,7 @@ The message `MSG(p,n)` is a map of multiple values associated with their respect :::note -The **trigger** represents the instant at which a certificate should be created. It is combined with at least the associated **epoch** to create a [**beacon**](../../glossary.md#beacon) of the certificate. In the current implementation of the Cardano node database snapshot, this trigger is a new [**immutable file number**](../../glossary.md#immutable-file-number). +The **trigger** represents the instant at which a certificate should be created. It is combined with at least the associated **epoch** to create a [**beacon**](../../../glossary.md#beacon) of the certificate. In the current implementation of the Cardano node database snapshot, this trigger is a new [**immutable file number**](../../../glossary.md#immutable-file-number). ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/images/certificate-chain.jpg b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/images/certificate-chain.jpg similarity index 100% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/images/certificate-chain.jpg rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/images/certificate-chain.jpg diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/protocol.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/protocol.md similarity index 96% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/protocol.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/protocol.md index 52dc7451f37..4c5d407d8ef 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/protocol.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/protocol.md @@ -1,9 +1,9 @@ --- sidebar_position: 1 -sidebar_label: Protocol in depth +sidebar_label: Protocol phases --- -# Mithril protocol in depth +# Protocol phases :::info @@ -13,7 +13,7 @@ Mithril is based on the research paper [Mithril: Stake-based Threshold Multisign :::info -You can interact with the **Mithril protocol** through the [protocol simulation](../../manual/develop/protocol-simulation.md). This will help you understand participants' interactions, multi-signature creation, and the influence of protocol parameters. +You can interact with the **Mithril protocol** through the [protocol simulation](../../../manual/develop/protocol-simulation.md). This will help you understand participants' interactions, multi-signature creation, and the influence of protocol parameters. ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/security.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/security.md similarity index 87% rename from docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/security.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/security.md index 49af323e6ce..e91b2a53ef5 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/security.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/mithril-protocol/security.md @@ -1,48 +1,12 @@ --- sidebar_position: 3 -sidebar_label: Security +sidebar_label: Protocol security --- # Protocol security -:::info - -Mithril is based on the [Mithril: Stake-based Threshold Multi-signatures](https://iohk.io/en/research/library/papers/mithril-stake-based-threshold-multisignatures/) research paper. - -::: - -Mithril is a stake-based threshold multi-signature (STM) protocol that aggregates individual signatures into a compact certificate. This process occurs when the total stake supporting a message exceeds a predefined threshold. The protocol enhances scalability in signing, communication, and verification by pseudorandomly selecting a subset of eligible participants to sign each message. - This document presents a comprehensive security analysis of Mithril, examining potential threats and the protocol’s defenses against various attack vectors. It starts with an overview of the STM protocol and the adversarial model, followed by an in-depth discussion of security measures against common cryptographic attacks. The document concludes with an analysis of parameter selection, highlighting trade-offs between security and efficiency through practical examples. -## Mithril protocol explained - -The STM protocol enables participants to sign a message collectively, validating the signature based on their combined stake. It leverages threshold multi-signatures to aggregate multiple individual signatures into a single, compact signature. This approach is especially beneficial in proof-of-stake (PoS) systems, where blockchain security relies on the distribution and control of stake among participants. - -- _Threshold multi-signature_: a cryptographic scheme that aggregates individual signatures into one compact signature if the total stake of the signers exceeds a predefined threshold -- _Stake-based eligibility_: the protocol ensures that only participants with sufficient stake are pseudorandomly selected as eligible to sign messages -- _Aggregation and verification_: aggregates individual signatures into a multi-signature, enabling efficient verification. - -### Protocol phases - -- **Initialization phase** - - - _Setup_: the protocol sets up the necessary cryptographic parameters and prepares the system for operation - - _Key generation_: participants generate a public-private key pair $(sk_i, pk_i)$ - - _Proof of possession_: each participant creates a proof $(\mathcal{PoP_i})$ that they possess the private key corresponding to their public key - - _Registration_: participants register their public keys $(pk_i)$ and $(\mathcal{PoP_i})$, which are then stored in a Merkle tree structure for efficient verification - - _Aggregate verification key_: the root of the Merkle tree, which serves as the aggregate verification key $(\mathcal{AVK})$. - -- **Operation phase** - - _Eligibility determination_: - - _Lottery mechanism_: the protocol initiates a series of lotteries for each message to determine eligible participants. Each participant's chance of winning is proportional to their stake - - _Security parameter_ $(m)$: the number of parallel lotteries, which ensures that enough participants are eligible - - _Quorum parameter_ $(k)$: the minimum number of eligible signatures required to form a valid multi-signature - - _Signing process_: - - _Individual signature generation_: eligible participants generate individual signatures for the message - - _Aggregation_: these signatures are aggregated into a single multi-signature; a minimum of $k$ signatures are aggregated into a single multi-signature - - _Verification_: the multi-signature, along with the Merkle proofs, is verified using the $\mathcal{AVK}$. - :::info Protocol phases are described in more detail [here](./protocol.md#protocol-phases). diff --git a/docs/website/versioned_docs/version-maintained/mithril/threat-model.md b/docs/website/versioned_docs/version-maintained/mithril/advanced/threat-model.md similarity index 99% rename from docs/website/versioned_docs/version-maintained/mithril/threat-model.md rename to docs/website/versioned_docs/version-maintained/mithril/advanced/threat-model.md index ad2af874b75..217ee0bdab6 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/threat-model.md +++ b/docs/website/versioned_docs/version-maintained/mithril/advanced/threat-model.md @@ -1,9 +1,9 @@ --- sidebar_position: 3 -sidebar_label: Mithril threat model +sidebar_label: Threat model analysis --- -# Mithril threat model +# Threat model analysis :::danger diff --git a/docs/website/versioned_docs/version-maintained/mithril/beginner/README.mdx b/docs/website/versioned_docs/version-maintained/mithril/beginner/README.mdx new file mode 100644 index 00000000000..aa65135352d --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/beginner/README.mdx @@ -0,0 +1,9 @@ +--- +title: Beginner +--- + +import DocCardList from "@theme/DocCardList"; + +This section introduces Mithril in simple terms, explaining its purpose, key features, and how it solves blockchain challenges. Explore Mithril’s benefits and high-level functionality now. + + diff --git a/docs/website/versioned_docs/version-maintained/mithril/beginner/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/beginner/_category_.json new file mode 100644 index 00000000000..32a0fb86494 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/beginner/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Beginner", + "collapsible": true, + "collapsed": false, + "position": 2 +} diff --git a/docs/website/versioned_docs/version-maintained/mithril/beginner/how-it-works.md b/docs/website/versioned_docs/version-maintained/mithril/beginner/how-it-works.md new file mode 100644 index 00000000000..a2149d40676 --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/beginner/how-it-works.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 3 +sidebar_label: How it works +--- + +# How it works + +The protocol utilizes a lottery mechanism where the probability of a signer winning is directly proportional to their stake. This lottery determines which signers are eligible to participate in the signing round. The generated signatures are then combined by an aggregator into a **Mithril multi-signature**, which requires a predefined threshold (quorum) of the total stake to be reached. + +The **Mithril protocol** consists of three phases: + +- **Protocol establishment.** During this phase, the protocol parameters are established. These parameters are crucial for security and include: + - **m**: the number of lotteries each signer can participate in for each message + - **k**: the minimum number of unique winning lottery indices needed to create a multi-signature + - **f**: a tuning parameter that adjusts the chances of signers winning a lottery based on their stake. +- **Initialization.** In this phase, participating signers generate and broadcast their keys along with a proof of possession. This process happens at the start of each new epoch, which is five days on Cardano. The aggregate verification key (AVK), a condensed representation of the key registration process, is computed and later used to sign and verify multi-signatures. +- **Operations.** This phase involves the creation and broadcasting of individual signatures by signers. Aggregators collect these signatures and combine them into multi-signatures once the quorum is reached. These multi-signatures are then sealed into a Mithril certificate along with the AVK. + +:::info + +Refer to the [Protocol phases](../advanced/mithril-protocol/protocol.md) overview for more details. + +::: + +Mithril involves three main participants – **signers, aggregators, and clients** – working together to ensure secure and efficient data verification. + +The operations phase is the core of the Mithril process, involving the generation of individual signatures, their aggregation into a multi-signature, and the creation of a certificate that verifies the authenticity of blockchain data: + +- **Message signing.** When a new message, such as a snapshot of the Cardano blockchain, requires certification, a multi-party signing round is initiated. +- **Lottery participation.** Each signer (SPO) participates in the lottery process pertaining to the message, with the likelihood of winning influenced by the signer's stake and other parameters. +- **Individual signature generation.** Signers who win at least one lottery create individual signatures for the message using their specific signing key, sending these signatures to the Mithril aggregator. +- **Aggregation.** The aggregator collects individual signatures and combines them into a single multi-signature once the requisite number of unique winning lottery indices is met (quorum). +- **Certificate generation.** This multi-signature, along with the signed message and additional metadata, forms a Mithril certificate. This certificate serves as verification that a sufficient amount of stake has endorsed the message. +- **Verification.** Clients, including light wallets or node operators, can confirm the authenticity of their assets (information retrieved from some untrusted sources) via the certificates. The verification process is efficient and does not require downloading the entire blockchain history; it entails checking the multi-signature against the known aggregate verification key and tracing the certificate back to a trusted genesis certificate. + +To fully understand Mithril, it is essential to explore its advanced operational aspects, which include its cryptographic foundations, the roles and security requirements of SPOs, and the strategic upgrade paths for the network. + +To explore advanced topics, see: + +- Mithril protocol + - [Protocol phases](../advanced/mithril-protocol/protocol.md) + - [Certificate chain design](../advanced/mithril-protocol/certificates.md) + - [Protocol security](../advanced/mithril-protocol/security.md) + - [Threat model analysis](../advanced/threat-model.md). +- Mithril network + - [Architecture](../advanced/mithril-network/architecture.md) + - [Mithril aggregator](../advanced/mithril-network/aggregator.md) + - [Mithril signer](../advanced/mithril-network/signer.md) + - [Mithril client](../advanced/mithril-network/client.md). diff --git a/docs/website/versioned_docs/version-maintained/mithril/beginner/mithril-in-a-nutshell.md b/docs/website/versioned_docs/version-maintained/mithril/beginner/mithril-in-a-nutshell.md new file mode 100644 index 00000000000..600643dee3e --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/beginner/mithril-in-a-nutshell.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 1 +sidebar_label: Mithril in a nutshell +--- + +# Mithril in a nutshell + +Let’s start with some background information to understand the current challenge and the solution that Mithril provides. + +Running a Cardano node allows users to interact with the blockchain in a trustless and decentralized way. The network relies on thousands of nodes working together to validate blocks and transactions, creating a unified and secure system. Each node holds a full copy of the blockchain, ensuring independence and decentralization. However, node synchronization is resource-intensive. For example, Daedalus, a full-node wallet, downloads and independently validates every transaction in the blockchain’s history. This process requires significant time, storage, and computational power, creating a barrier for users who lack the necessary resources or technical expertise. + +This challenge leaves users and developers with limited choices: invest in the costly setup and maintenance of a full node or rely on centralized services, which compromises Cardano’s core principle of decentralization. + +## How Mithril helps + +The Mithril protocol is designed to enhance blockchain efficiency and scalability by leveraging stake-based multi-signatures. It achieves higher performance without increasing trust requirements, offering a modular and transparent setup. Signers operate independently to produce individual signatures, which aggregators combine into a single, efficient multi-signature. + +Consider this analogy. Think of it like a community vote where only people who own a certain amount of tokens can participate. Each participant’s vote is signed, and these signatures are then combined to show that a significant portion of the token holders agree on the outcome. + +Unlike traditional systems requiring all participants to validate data, Mithril uses a stake-based threshold multi-signature scheme (STM). This means only a minimum fraction of the total stake is needed to generate a valid signature, ensuring both security and efficiency. + +Operating in a trustless setting, Mithril relies solely on existing proof-of-stake assumptions for consensus security. This makes it ideal for applications such as wallet-as-a-service or mobile clients, which can securely verify and exchange data using certificates from Mithril nodes. + +Additionally, Mithril enables rapid Certification by allowing stakeholders to validate checkpoints rather than the entire transaction history. This feature is especially beneficial for light clients, such as light wallets, and extends to use cases like data synchronization between layer 2 chains and full node bootstrapping. diff --git a/docs/website/versioned_docs/version-maintained/mithril/beginner/why-use-mithril.md b/docs/website/versioned_docs/version-maintained/mithril/beginner/why-use-mithril.md new file mode 100644 index 00000000000..24fd284867b --- /dev/null +++ b/docs/website/versioned_docs/version-maintained/mithril/beginner/why-use-mithril.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 2 +sidebar_label: Why should you use Mithril? +--- + +# Why should you use Mithril? + +Mithril was developed with a focus on optimization, scalability, and interoperability. It addresses several key challenges in the blockchain ecosystem: + +## Challenges + +- **Slow node bootstrapping.** Synchronizing a full Cardano node from scratch can take days, hindering user participation and development. +- **Light client security and decentralization.** Light clients such as wallets offer efficiency but often rely on centralized and trusted third parties for data, compromising security and decentralization. +- **Layer 2 interaction.** Layer 2 solutions designed to enhance scalability need efficient methods to verify their state and interact with the main chain without requiring validator nodes to run a full Cardano node. + +## Solutions + +Mithril addresses these challenges through its stake-based threshold multi-signature (STM) scheme. This approach allows for efficient and secure verification of blockchain data without the need to run a full node, thereby improving scalability and accessibility. + +Here's how Mithril provides solutions: + +- **Fast bootstrapping.** Mithril enables the rapid setup of a full Cardano node in under 20 minutes by providing certified snapshots of the Cardano database. These snapshots can be quickly verified using the multi-signature scheme. +- **Secure and efficient data exchange for lightweight applications.** Lightweight applications such as wallets can leverage Mithril to verify transaction data associated with specific addresses without relying on third parties or running a full node. This maintains decentralization and security while offering greater efficiency. +- **Support for layer 2 solutions.** Mithril allows lightweight verification of the state and transactions of layer 2 solutions, improving their interaction with the main chain. For example, it can verify the stake of validator nodes in a bridge. diff --git a/docs/website/versioned_docs/version-maintained/mithril/intro.md b/docs/website/versioned_docs/version-maintained/mithril/intro.md index c3269cd7361..cd33224fa0a 100644 --- a/docs/website/versioned_docs/version-maintained/mithril/intro.md +++ b/docs/website/versioned_docs/version-maintained/mithril/intro.md @@ -3,47 +3,24 @@ sidebar_position: 1 sidebar_label: Introduction --- -# About Mithril +# Introduction -:::info +Mithril is a protocol and network specifically designed for proof-of-stake blockchains. Its primary goal is to provide lightweight and secure access to blockchain data while ensuring a high level of security and decentralization. Originally developed for Cardano during its Basho development phase, which focuses on optimization, scalability, and interoperability, Mithril has numerous potential applications. These include synchronizing data for both light and full-node wallets, as well as facilitating data exchanges with layer 2 solutions such as bridges, sidechains, rollups, and state channels. -Explore the Mithril protocol through our [protocol simulation](../manual/develop/protocol-simulation.md). This interactive experience will provide you with insights into how participants collaborate to generate a **multi-signature**, and you'll also gain a clearer understanding of the protocol parameters. +This section provides a detailed overview of the Mithril protocol and the network, their purpose, and how Mithril addresses key challenges in blockchain scalability and security. The section includes both beginner-friendly explanations and advanced technical insights, guiding readers from foundational concepts to in-depth protocol details. -::: - -## Mithril in a nutshell - -Mithril is a research project whose goal is to provide [Stake-based Threshold Multisignatures](https://iohk.io/en/research/library/papers/mithrilstake-based-threshold-multisignatures/) on top of the Cardano network. - -In a nutshell, Mithril can be summarized as: - -> A protocol that allows stakeholders in a proof-of-stake blockchain network to individually sign messages that are aggregated into a multi-signature, which guarantees that they represent a minimum share of the total stake. - -In other words, an adversarial participant with less than this share of the total stake will not be able to produce valid multi-signatures :closed_lock_with_key:. - -## What you'll find in this guide - -In this guide, you will find: - -- The **Mithril protocol** documentation: - - - [Mithril protocol in depth](./mithril-protocol/protocol.md) - - - [Mithril certificate chain in depth](./mithril-protocol/certificates.md) - - - An interactive protocol discovery through the [Mithril simulation](../manual/develop/protocol-simulation.md) - -- The **Mithril network** documentation: - - - [Mithril network architecture](./mithril-network/architecture.md) - - - [Mithril aggregator node](./mithril-network/aggregator.md) +If you're new to Mithril, see the ‘Beginner' explainers: - - [Mithril signer node](./mithril-network/signer.md) +- [Mithril in a nutshell](./beginner/mithril-in-a-nutshell.md) +- [Why should you use Mithril?](./beginner/why-use-mithril.md) +- [How it works](./beginner/how-it-works.md). - - [Mithril client node](./mithril-network/client.md) +To dive deeper into advanced topics, see: -- The [**Mithril threat model**](./threat-model) +- [Mithril protocol](./advanced/mithril-protocol/README.mdx) +- [Mithril network](./advanced/mithril-network/README.mdx) +- [Mithril security](./advanced/mithril-protocol/security.md) +- [Threat model analysis](./advanced/threat-model.md). :::tip @@ -51,6 +28,6 @@ If you need help, feel free to reach out to the Mithril team: - [GitHub discussions](https://github.com/input-output-hk/mithril/discussions) -- [Stack Exchange](https://cardano.stackexchange.com/questions/tagged/mithril) +- [Stack Exchange](https://cardano.stackexchange.com/search?q=mithril). ::: diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/mithril-network/_category_.json deleted file mode 100644 index 982cf99ace5..00000000000 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-network/_category_.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "label": "Mithril Network", - "collapsible": true, - "collapsed": false, - "position": 2, - "link": { - "type": "generated-index", - "title": "Mithril Network Topics" - } -} diff --git a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/_category_.json b/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/_category_.json deleted file mode 100644 index 6f6217665d0..00000000000 --- a/docs/website/versioned_docs/version-maintained/mithril/mithril-protocol/_category_.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "label": "Mithril protocol", - "collapsible": true, - "collapsed": false, - "position": 1, - "link": { - "type": "generated-index", - "title": "Mithril protocol Topics" - } -} From d60d86699c9c80779ba575192c4441351bda687d Mon Sep 17 00:00:00 2001 From: Jean-Philippe Raynaud Date: Thu, 5 Dec 2024 17:06:53 +0100 Subject: [PATCH 6/6] chore: bump documentation website version From '0.1.46' to '0.1.47'. --- docs/website/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/website/package.json b/docs/website/package.json index 1c96b626217..2d854405dee 100644 --- a/docs/website/package.json +++ b/docs/website/package.json @@ -1,6 +1,6 @@ { "name": "mithril-doc", - "version": "0.1.46", + "version": "0.1.47", "private": true, "scripts": { "docusaurus": "docusaurus",